Data Gempa Bumi dari BMKG

Sebagai salah satu upaya peningkatan transparansi dan akuntabilitas pemerintah dan meningkatkan partisipasi masyarakat, BMKG ikut membuka inisiatif membuka beberapa data. Salah dua data yang sudah disediakan BMKG secara terbuka adalah data prakiraan cuaca dalam waktu 3 harian dan data gempa bumi yang terjadi di seluruh wilayah Indonesia yang dicatat oleh BMKG.

Ada tujuh jenis data melalui API endpoint BMKG, yaitu kejadian gempa terkini (format XML dan JSON), daftar 15 gempa bumi terakhir dengan magnitudo (M > 5.0) (format XML dan JSON), daftar 15 gempa bumi terakhir yang dapat dirasakan oleh masyarakat (format XML dan JSON), dan data shakemap dalam bentuk gambar JPG. Penggunaan API ini dapat dibaca di Data Gempabumi Terbuka BMKG.

Untuk menunjang pengembangan dashboard RECTO Tsunami, saya ingin mengimplementasikan data BMKG ini yang diperbaharui setiap menitnya oleh sistem. Untuk itu dengan bahasa pemrograman Python, saya buat sedikit script yang dapat memanggil data dari JSON API BMKG dan membuatnya dalam bentuk Pandas.DataFrame untuk diolah selanjutnya. Script ini sangat sederhana dan mudah dibuat, namun diharapkan bisa mempermudah akses data BMKG melalui sebuah modul Python sederhana. Instalasi dapat dilakukan dengan:

$ pip install bmkg-data

Setelah sudah berhasil melakukan instalasi, untuk mendapatkan data BMKG dalam bentuk tabel anda bisa menggunakan snippet code di bawah ini:

from bmkg_data import earthquake

# Get the last 15 events of felt earthquake
df_felt = earthquake.get_felt_earthquakes()

# Get the last 15 events of M > 5.0 earthquake
df_significant = earthquake.get_significant_earthquakes()

# Get the latest earthquake event
df_latest = earthquake.get_latest_earthquake()

Selamat mencoba dan menggunakan script sederhana ini.

Jangan Gunakan Aplikasi Oximeter di Android

Gambar 1. Forward WhatsApp tentang Oximeter

Pulse Oximeter adalah alat noninvasif yang mampu mengukur kadar saturasi oksigen dalam darah dan umumnya di pasang di jari. Di tengah pandemi COVID-19, alat ini umum digunakan untuk pemantauan kondisi saturasi oksigen, untuk mencegah terjadinya happy hypoxia, kondisi kekurangan oksigen tanpa gejala. Layaknya beberapa perangkat dan obat-obatan penunjang isolasi mandiri lainnya, pulse oximeter ini menjadi langka ditengah tajamnya kenaikan kasus COVID-19. Untuk itu banyak orang mencari alternatif lain untuk memantau kadar oksigen.

Pengukuran konsentrasi oksigen dalam darah (SpO2) sebenarnya adalah persentase hemoglobin yang mengandung oksigen dibandingkan keseluruhan hemoglobin. Pengukuran noninvasif oleh pulse oximeter memungkinkan karena adanya perbedaan penyerapan panjang gelombang cahaya dari hemoglobin yang mengandung oksigen dan yang tidak. Maka dari itu, umumnya pulse oximeter memiliki pemancar dan penerima cahaya di dua panjang gelombang (umumnya merah dan inframerah).

Aplikasi pulse oximeter yang tersedia di Google Play untuk HP Android, perlu dicurigai. Tanpa adanya sebuah sensor dan pemancar panjang gelombang (merah dan inframerah) ini, secara praktis tidak mungkin dilakukan pengukuran kandungan oksigen dalam darah. Maka dari itu, hindarilah penggunaan aplikasi Pulse Oximeter sebagai pengganti perangkat yang asli.

Disclaimer:
Saya adalah lulusan teknik elektro yang pernah mengambil kelas Instrumen Biomedik dan pernah bereksperimen mengukur detak jantung dan kadar oksigen darah menggunakan sensor inframerah yang dipasang di ujung jari. Kesimpulan dari artikel singkat ini juga dibahas di referensi yang saya cantumkan (dalam Bahasa Inggris).

Referensi:
Question: Should smartphone apps be used clinically as oximeters? Answer: No. – The Centre for Evidence-Based Medicine (cebm.net)

Aplikasi Geospasial di Awan

Arsitektur cloud native mengalami peningkatan popularitas di bidang IT, menghasilkan berbagai perkembangan perangkat dan praktik terbaik yang dikembangkan oleh perusahaan komputasi awan untuk membuat proses pengembangan yang murni berjalan di atas komputasi awan. Bidang informasi geospasial juga secara perlahan mulai bermigrasi untuk mengikuti tren komputasi awan, memindahkan algoritma yang biasanya terlalu berat untuk dijalankan di sebuah komputer dan melakukan visualisasi di atas aplikasi peta di halaman web. Artikel ini membahas evolusi aplikasi Geospasial di Awan (cloud native geospatial) dengan melihat arsitektur dan praktik terbaik yang muncul belakangan ini.

Sebelum mengeksplorasi lebih lanjut tentang Geospasial di Awan dan memberikan definisinya, ada empat asumsi yang menjadi dasar pengembangan ekosistem Geospasial di Awan:

  1. Semua data yang dibutuhkan oleh user ada di Awan, koleksi data ini jauh lebih besar dari data yang dapat dikumpulkan di sebuah komputer pribadi.
  2. Komputasi yang tidak terbatas untuk mengolah data besar ini tersedia di Awan dan algoritma yang mendasari pemrosesan data tersebut dapat dibagikan secara daring dan diubah-ubah secara kolaboratif.
  3. Sistem antrian dan notifikasi dapat dikembangkan agar data baru dapat diproses secara langsung, memberikan perkembangan terkini dan notifikasi kepada penggunanya.
  4. Data bisa divisualisasikan dengan peta melalui peladen web map tiles yang bisa menunjukkan data sumber maupun data dalam proses ataupun hasil akhir pemrosesan data.

Melalui empat asumsi dasar ini, proses pengolahan data geospasial yang sudah ada bisa berubah dengan adanya kapabilitas komputasi awan dan proses data yang sepenuhnya ada di Awan. Hasil dari asumsi ini adalah berbagai perkembangan teknologi untuk menunjang konsep microservices, bukan hanya dalam perspektif teknologi, namun juga dalam proses dan metodologi. Beberapa hasil evolusinya adalah munculnya paradigma-paradigma baru dalam pengolahan data geospasial.

Jika seluruh data sudah ada di Awan, tidak perlu lagi adanya duplikat data untuk mengolah dan memroses data. Sebelumnya kita perlu mengunduh data geospasial untuk menggunakan perangkat lunak untuk melakukan proses dan membuat visualisasi. Dengan komputasi awan, pemilik data dapat membayar untuk harga penyimpanan data sedangkan pengguna dapat membayar untuk akses data tanpa perlu memikirkan infrastruktur besar yang menjembataninya.

Paradigma yang berubah akibat data di Awan adalah algoritma yang dapat dikirim ke tempat data, dan bukan sebaliknya. Saat data ada di Awan, akan lebih realistis untuk membuat kontainer yang berisi algoritma pemrosesan untuk dijalankan di komputasi awan yang dekat dengan sumber data. Kontainer algoritma ini bisa dalam bentuk kontainer Docker atau sebuah fungsi seperti AWS Lambda / Google Cloud Functions. Komputasi ini dapat menggunakan sistem geospasial awan terkini seperti RasterFoundry atau Google Earth Engine, di mana pengguna dapat mengirimkan sebuah instruksi operasi pengolahan data.

Ketika data dan algoritmanya sudah bisa diimplementasikan dan dibagikan dengan sesama pengguna data, kolaborasi antar peneliti dapat muncul. Pengguna selanjutnya dapat menggunakan algoritma yang tersedia secara terbuka dan menerapkannya terhadap data yang tersedia tanpa perlu mendalami proses di belakang layar. Melalui bantuan layanan web map tiles, data-data ini bisa divisualisasikan pada setiap langkah dalam proses tersebut.

Akhir dari data hasil pengolahan GIS atau penginderaan jauh ini umumnya berupa sebuah peta statis yang seringkali berada di sebuah slide PowerPoint. Tujuan sebuah peta adalah untuk membantu memberikan informasi yang tepat guna, dengan Geospasial di Awan, pengguna yang membutuhkan informasi tertentu dapat berlangganan produk data untuk area yang diminati oleh pengguna tersebut tanpa harus membaca peta statis untuk mencari data yang dibutuhkan.

Realisasi Geospasial di Awan adalah penggunaan format data Cloud Optimized GeoTIFF yang dapat memanfaatkan fitur HTTP yaitu Byte Serving. Byte Serving adalah teknologi yang mendasari konsep streaming musik dan video tanpa harus mengunduh keseluruhan file audio atau video. Format COG mengikuti prinsip yang serupa sehingga pengguna dapat mengakses hanya bagian dari sebuah file raster yang dibutuhkan, sehingga konsep pengolahan data baru dapat dikembangkan.

Konsep utama dari COG relatif sederhana, dengan menaruh data penginderaan dan data penggambaran tersebut di Awan dan dapat diakses sebagai secara streaming. Melalui COG dan penyimpanan di Awan, perangkat lunak dapat dikembangkan untuk mengakses data ini di ekosistem Awan yang sama, sehingga pengolahan data dapat dilakukan tanpa perlu biaya unduh data dan penyimpanan data. Pengguna tidak perlu lagi menghabiskan waktu untuk mencari data, tapi hanya perlu mengakses data terkini yang tersedia dan menghasilkan analisis berdasarkan data tersebut.

Konsep kedua yang membantu sebuah aplikasi Geospasial di Awan adalah katalog aset spatiotemporal (SpatioTemporal Asset Catalog). Penyedia data penginderaan dan penggambaran tidak perlu lagi menyiapkan sistem katalog, namun bisa mengadopsi katalog STAC untuk mengidentifikasi seluruh data yang tersedia.

Konsep ketiga adalah adanya web tiling dinamis, menggunakan COG sebagai data masukan, perantara dan keluaran, sebuah server web map yang mengikuti standar Open Geospatial Consortium seperti WMTS ataupun XYZ tiles dapat digunakan untuk membantu visualisasi data. Layanan yang dapat membaca COG dan menghasilkan web map tile seperti rio-tiler dapat digunakan untuk mengembangkan prinsip visualisasi data ini.

Menggunakan ketiga teknologi ini dan berdasarkan sistem-sistem yang sudah dikembangkan menggunakan konsep Geospasial di Awan, pengguna dapat menghasilkan data peta yang dapat ditambahkan oleh informasi terkini dan bukan peta statis. Akhirnya, data geospasial bisa menjadi bagian dari kehidupan, membantu memperbaiki aplikasi yang sudah ada dan membantu membuat ekosistem interoperabilitas di mana berbagai organisasi dapat mengadopsi teknologi-teknologi ini untuk menyajikan data mereka. Selanjutnya, pengguna dapat fokus dengan hasil analisis yang dapat dibuat melalui data-data terkini yang terbuka untuk umum untuk aplikasi demi kemaslahatan bersama.

Artikel ini merupakan intisari dari seri artikel oleh Chris Holmes: Cloud Native Geospatial – Planet Stories – Medium.

Understanding Myself through Big Five Test

One key turn-around point that I had in my self-development was to understand who I am. I was able to get a depiction of my own personality through the understandmyself.com website.

UnderstandMyself.com is based on the Big Five personality traits, consisting of extraversion, agreeableness, conscientiousness, neuroticism, and openness. Sometimes the acronym OCEAN (openness, conscientiousness, extraversion, agreeableness, and neuroticism) is used.

Openness

People who are high in this trait tend to be more adventurous and creative, while those who are low in this trait tend to struggle with abstract thinking.

I find myself ranked higher than the average person in this trait. I believe that I am able to let my mind wander and try to formulate different ideas, seeing a new way to find solutions that others may have missed. This may lead me to be less well adapted to situations that are routinized and predictable.

Openness to experience is made up of the aspects from intellect and openness. I am ranked at the 78th percentile in Intellect, making me enjoy exploring novel ideas, working on issue-oriented discussions, enjoy reading and discuss idea-centered books. I like learning new things and finding new vocabulary to use to generate and explain novel, creative concepts and adapt to new experiences.

I am also typically open, I enjoy an outlet for my creativity, appreciate music and like to sing and make music for myself, but still can live without it.

Conscientiousness

I am moderately low in conscientiousness, which is a trait that I must admit is hard for me to work on. I am not particularly dutiful, although I am also not a sloth per se. I can work hard when pushed, but sometimes find myself distracted, indecisive, and do not mind procrastinating.

Although, this trait may be responded by other people negatively for my tendency to slack off, I do find myself not judgmental to myself or others. I find myself attributing my success to chance and luck factors instead of my hard work. I’m trying my best to overcome this disadvantages and work my way to be more conscientiousness, through harnessing my sense of purpose to allow me to get my act together while trying to improve myself.

Industriousness one of the aspect of conscientiousness, this trait is also one of my impeding factor, with low industriousness, I was always an underachiever. I put off a lot of responsibilities, that’s why I’m not judgmental of other people, including myself.

I am typical in orderliness, I do enjoy seeing everything in a good order, but I am not overtly oriented toward details, rigidly abiding rules and judgmental towards others. I am not the right person to manage complex, sensitive processes, but when supervised properly I can manage to maintain focus and proper attention.

Extraversion

I am low in Extraversion or high in Introversion, I am less enthusiastic, talkative, and assertive in social situations, socially awkward at times. I find constant social contact very draining and tiring and will always crave time alone to recharge. This trait make me more likely to be depressed and have lower level of self esteems.

I keep everything to myself and will always struggle to persuade, make the sale, or work in huge groups. I am low in enthusiasm, I do not really get excited about a lot of things and do not speak my mind, unless it is of interest to me. I am also very low in assertiveness, I never dominate and control social situations, I put my own opinion with reservation and do not speak my mind. This is a huge handicap for me, when I speak up about issues that I am knowledgeable, competent, and able.

Agreeableness

I am typical in agreeableness. I am somewhat cooperative, warm and considerate. I look for the best in others and reasonably interpersonally tolerant. With average level of agreeableness, I am somewhat forgiving, accepting, flexible, gentle, and patient. I sometimes feel pity for those who are excluded, punished, or defeated, but not enough to be easily taken advantage by disagreeable people or those with predatory intent. However, sometimes with high neuroticism, this may make me suffer from resentment or to harbor invisible anger.

Neuroticism

I am moderately high in neuroticism. This makes me more sensitive towards negative emotions, such as pain, sadness, irritable, or defensive anger, fear, and anxiety. With everything going wrong in the past, I feel that everything will go wrong now, and also in the future. I am anxious and irritable when thinking of a genuine problem I remember. I am risk-averse and with my very high withdrawal trait (91st percentile), I am more prone to feel sad, lonesome, disappointed, and grief-stricken. I have high levels of doubt, worry continuously, and become embarassed easily, and too self conscious and will be discouraged rapidly in the face of threat and punishment.

Knowing Myself, What Next?

I was discouraged when I first saw my result, I worry if I would ever find myself be in a position that can be useful to myself, my immediate family and society. I began to wonder if I am misusing the talents that I have received from the Almighty. Once I begin to accept myself as who I am, with the positive side and negative side, I was able to formulate a way forward. Self-help books did help in my self development, I think all of this is necessary to maintain a good mental health.

Data Tide Gauge IDSL dari Joint Research Center Uni Eropa

Pada tanggal 22 Desember 2018, 13:56 UTC, terjadi gelombang Tsunami yang disebabkan oleh Gunung Anak Krakatau yang diduga karena letusan gunung berapi tersebut. Saat bencana ini terjadi, sistem peringatan dini tsunami Indonesia (InaTEWS) tidak memiliki mekanisme untuk menjalankan perhitungan prediksi tinggi muka air dari letusan gunung berapi. Untuk memperkuat peringatan dini, pemerintah Indonesia menerapkan sistem peringatan yang mampu memberikan informasi terkini dari perubahan ketinggian muka air laut yang dapat menunjukkan gelombang Tsunami akibat letusan gunung berapi, agar dapat diberikan peringatan dini.

Gambar 1. Sensor Tinggi Muka Air yang terpasang di Pulau Sebesi (IDSL-301)
Sumber: TAD – IDSL-301 (europa.eu)

Joint Research Center Uni Eropa bersama dengan Kementerian Kelautan dan Perikanan (KKP), dan Badan Meteorologi Klimatologi dan Geofisika (BMKG) mengembangkan sistem peringatan baru. Sistem ini mengadopsi instrumen pengukuran Tsunami secara real-time yaitu Inexpensive Device for Sea Level Monitoring (IDSL) yang dikembangkan oleh JRC untuk memberikan data tinggi muka air laut secara 24/7 dan memberikan peringatan kemungkinan terjadinya Tsunami. Perangkat IDSL hibah dari JRC ini dimiliki oleh KKP dan datanya dapat diakses melalui TAD – Home (europa.eu)

Saat mengembangkan RECTO Tsunami, data ini juga dipakai untuk melengkapi data tide gauge (InaTides) yang dimiliki oleh Indonesia yang dikelola oleh Badan Informasi Geospasial (BIG). Salah satu hasil dari pengembangan dashboard Tsunami tersebut adalah library pengambilan data dari TAD Server JRC dalam bahasa pemrograman Python. Instalasi dapat dilakukan dengan pip, seperti berikut ini:

$ pip install idsl-gauge

Informasi lebih lanjut dan contoh Jupyter Notebook penggunaan library dapat dilihat di link GitHub di bawah ini:

https://github.com/josefmtd/idsl-gauge

Referensi:

  1. JRC Publications Repository – Anak Krakatau volcano emergency tsunami early warning system (europa.eu)

Data Gempa Realtime USGS

ANSS Comprehensive Earthquake Catalog (ComCat) adalah katalog gempa bumi yang menunjukkan sumber gempa dan produk-produk tambahan lainnya dari jaringan seismik USGS.

USGS juga menyediakan GeoJSON Summary Feed yang diperbaharui setiap 1 menit. GeoJSON adalah format untuk struktur data geografis, dapat merepresentasikan sebuah Geometry, Feature, atau FeatureCollection. GeoJSON dibuat berdasarkan standar JSON.

Gambar 1. RECTO Tsunami tsunami-data | Indonesian National Oceanography Data Center (nodc.id)

Saat mengembangkan RECTO Tsunami menggunakan Python, InfluxDB, dan Grafana, saya mengembangkan script sederhana untuk mengunduh data dari USGS. Program ini sekarang sudah saya simpan di PyPI dengan link: https://pypi.org/project/usgs-quake/. Melalui script ini, RECTO Tsunami dapat mengambil data termutakhir dari feed GeoJSON USGS dan menampilkannya ke sebuah dashboard Grafana. Instalasi modul ini dapat dilakukan dengan PIP:

$ pip install usgs-quake

Setelah berhasil instalasi usgs-quake, Anda dapat menggunakan Jupyter Notebook untuk memulai mendapatkan data gempa dalam bentuk pandas.DataFrame seperti contoh di bawah ini.

from usgs_quake import USGSEarthquake
import datetime

# Indonesian boundaries
min_lat = -15
max_lat = 15
min_lon = 90
max_lon = 150

min_mag = 6

# Initializing module with boundaries and minimum magnitude
quakes = USGSEarthquake(min_lat, max_lat, min_lon, max_lon, min_mag)

# Historical Data Query
start = datetime.datetime(1970, 1, 1)
end = datetime.datetime.utcnow()

# Begin querying the ANSS ComCat and get the number of events
count = quakes.get_historical_data(start, end)
df_historical = quakes.get_simplified_dataframe()


# Realtime Data Query
level = 'significant'
period = 'month'

# Query significant earthquakes from the past month
quakes.get_realtime_data(level = level, period = period)
df_realtime = quakes.get_simplified_dataframe()

Semoga artikel singkat ini bermanfaat bagi yang membutuhkan data gempa real-time dari USGS maupun data historis yang tersedia di ComCat.

Referensi:

  1. API Documentation – Earthquake Catalog (usgs.gov)
  2. GeoJSON Summary Format (usgs.gov)

Kembali ke Normal? Visualisasi Data Sentinel-5P dari Google Earth Engine

European Space Agency (ESA) beberapa kali telah mengeluarkan peta sebaran konsentrasi gas nitrogen dioksida dan mengorelasikannya dengan aktivitas manusia. Melalui karantina ketat, terlihat dari luar angkasa bahwa emisi gas nitrogen dioksida di suatu wilayah turun dengan signifikan. ESA mengeluarkan gambar yang menunjukkan kurangnya polusi udara sekitar Eropa dan China pada tahu 2020. Menurut peneliti dari KNMI (Royal Netherlands Meteorological Institute), data harian konsentrasi nitrogen dioksida dapat berubah-ubah karena dampak cuaca, namun jika dirata-rata dalam periode waktu tertentu, dampak cuaca ini bisa dihilangkan dan kita dapat melihat efek aktivitas manusia terhadap konsentrasi nitrogen.

Nitrogen dioxide concentrations over France
Konsentrasi Nitrogen Dioksida di Prancis

Indonesia sedang mengalami kenaikan kasus COVID-19, dari data Jakarta kita mendapatkan bahwa ada kenaikan yang tajam dari bulan Mei 2021. Data ini dapat diakses di Covid-19 (jakarta.go.id).

Kenaikan Kasus COVID-19 di bulan Mei 2021

Sentinel-5P sebagai satelit terbaik yang dapat memantau konsentrasi nitrogen dioksida berskala global. Kali ini saya coba melakukan visualisasi data bulan Mei 2019, 2020, dan 2021 untuk melihat tren aktivitas manusia berdasarkan data nitrogen dioksida. Terlihat bahwa data nitrogen sudah kembali ke level sebelum pandemi. Aktivitas publik sepertinya sudah kembali ke normal.

Lalu, apa yang bisa dilakukan oleh pemegang kebijakan, apakah membatasi sementara aktivitas dan kembali menerapkan Work From Home bagi industri yang masih sanggup untuk dilakukan dari rumah? Pertanyaan ini mungkin bisa dijawab oleh pemerintah.

Sentinel-5P Hub dan Google Earth Engine

Misi satelit Sentinel-5 Precursor, juga dikenal sebagai Sentinel-5P, adalah misi Copernicus pertama yang didedikasikan untuk melakukan pemantauan atmosfer secara global. Satelit ini membawa instrumen TROPOMI (Tropospheric Monitoring Instrument). Instrumen ini dapat memberikan informasi tentang gas nitrogen dioksida (NO2), ozone (O3), formaledehida, sulfur dioksida (SO2), metana (CH4), karbon monoksida (CO), dan aerosol. Polutan gas ini berbahaya bagi kesehatan manusia ataupun berdampak terhadap perubahan iklim.

Instrumen TROPOMI pada misi Sentinel-5P merupakan instrumen paling akurat untuk mengukur polusi udara dari angkasa, melalui kebijakan data terbuka, masyarakat global dapat ikut menggunakan data ini untuk keperluan kebijakan publik tentang perubahan iklim maupun untuk kesehatan masyarakat, serta berbagai aplikasi lainnya.

Kebijakan Data Terbuka

Data terbuka dari Sentinel-5P dapat diakses di SentinelHub, yang dapat diakses dengan link: https://s5phub.copernicus.eu/dhus/#/home. Untuk dapat mengunduh dan melakukan query, perlu login dengan username ‘s5pguest’ dan password ‘s5pguest’. Query dapat dilakukan dengan GUI yang ada di web SentinelHub tersebut. Untuk eksplorasi singkat, GUI ini dapat dipakai untuk mengunduh secara langsung data Sentinel dalam format netCDF.

Google Earth Engine juga memiliki katalog data Sentinel-5P dalam bentuk grid (L3), untuk katalog Near Real-time (NRTI) dan Offline (OFFL), hasil pengolahan dengan harpconvert dari data L2 masing-masing gas hasil olahan data Sentinel-5P yang tersedia di S5PHub. Menggunakan GEE dengan Python API dapat dilakukan pemrosesan dan visualisasi data polutan gas terhadap waktu.

Catatan instalasi dan penggunaan Google Earth Engine API dan Sentinel-5P Hub API untuk mengambil data Sentinel-5P dalam bentuk ee.Image.

Sentinel-5P Hub API dengan Earth Engine API | Josef Matondang (stevenmtd.xyz)

Nitrogen dioxide concentrations over China
Gambar. Kadar nitrogen dioksida sebelum pandemi, saat pandemi, dan setelah pandemi
Sumber: ESA – Air pollution returning to pre-COVID levels

Artikel selanjutnya, saya akan mencoba membuat visualisasi polutan gas nitrogen dioksida di atas pulau Jawa sebelum pandemi, saat pandemi, setelah pandemi.

GeoTIFF and Cloud Optimized GeoTIFF for Dummies

Another article in my “For Dummies” series, without a background in geospatial data and geosciences, this is how I try to make sense of the available geospatial data formats.

GeoTIFF File Format

GeoTIFF is based on the TIFF format and is used as an interchange format for georeferenced raster imagery. The Open Geospatial Consortium (OGC) published version 1.1 of the OGC GeoTIFF Standard in September, 2019.

GeoTIFF file format is in widespread use worldwide and there are strong software support in the form of open source library: libgeotiff and Geospatial Data Abstraction Library (GDAL) package. Specifically the Earth science cloud computing community has developed a means of optimizing GeoTIFF files for use in cloud computing workflows. Cloud Optimized GeoTIFF (COG) files adhere to the GeoTIFF specification so all prior software and workflows can still be used with the COG files.

GeoTIFF format is not suitable for every data type, it is widely used as a distribution format for satellite and aerial photography imagery. GeoTIFF is not suitable for storing complex multi-dimensional data structures nor for storing vector data with many attributes. For these multi-dimensional data, netCDF is widely used within the geospatial data science community and working groups.

Working with Cloud Optimized GeoTIFF in Earth Engine

Earth Engine can load images from Cloud Optimized GeoTIFF (COG) stored in Google Cloud Storage. An example of readily available COG dataset in Google Cloud Storage is the public Landsat dataset. By using Google Cloud Storage, we can store any ee.Image from any Earth Engine operation, but also load COG data hosted on a GCS bucket. In order to utilize this feature, users need to have access to both Google Earth Engine and Google Cloud Platform to create new project and create a Google Cloud Storage within the project to be accessed by the Google user / Service Account.

COG data from external source can also be loaded by Google Earth Engine. As an example, with Python, rio-cogeo library can be used to convert a traditional GeoTIFF to a Cloud Optimized GeoTIFF format, once done, this file can be uploaded to Google Cloud Storage bucket for further analyses in the Google Earth Engine.

References:

  1. GeoTIFF | Earthdata (nasa.gov)
  2. Cloud Optimized GeoTIFF (cogeo.org)
  3. Cloud GeoTiff Backed Earth Engine Assets  |  Google Earth Engine

netCDF for Dummies

I have been working at Nusantara Earth Observation Network for a while, but only exposed to geospatial data recently. Without a formal education on geosciences or geospatial data, I often find myself fumbling for information. One of the most prevalent data format that I come across is netCDF. This article is written as an attempt to rewrite information about netCDF available in the internet from various source.

Network Common Data Form

Network Common Data Form (netCDF) is a file format for storing multidimensional scientific data (variables). Each netCDF file is made up of three basic components: dimensions, variables, and attributes.

A netCDF dimension is used to specify the shape of one or more of the variables, it can be used to represent time, latitude, longitude, or atmospheric level/ocean depth.

A netCDF variable is an array of values on the same type, each variable has a name, data type, and a shape described by a list of dimensions. Scalar variables have empty list of dimensions. A netCDF variable may also have an associated list of attributes to represent information about the variable, such as a units string, valid range of values, special value for missing data, and a long descriptive name.

A netCDF attribute provides auxiliary information about the variables or the dataset itself. With all three components, netCDF is a self-describing file, containing all information describing the data it contains. NetCDF data is machine-independent, by using the eXternal Data Representation (XDR), to represent array of bytes, 16-bit short integers, 32-bit long integers, IEEE-standard 32 and 64 bit floating point numbers. By using this XDR, programs will always deal with integer and floating-point data in the native form of the machine on which they run.

Since netCDF is a self-describing data that is also machine-independent, numerous scientific groups use netCDF to share their data. NetCDF can be accessed by programming interfaces in C, C++, Java, Fortran, Python, IDLL, MATLAB, R, Ruby, and Perl.

Processing NetCDF in Python with Xarray

Xarray expands on the capabilities of NumPy ndarray (N-dimensional array) by addling labels in the form of dimensions, coordinates and attributes on top of NumPy-like arrays. Xarray’s interface is based on the netCDF data model, but it goes beyond the traditional netCDF interfaces. Xarray is designed to be domain agnostic, providing multi-dimensional arrays manipulation for all sorts of applications.

Xarray is tailored to work with netCDF files, which were the source of xarray’s data model, and integrates tightly with dask for parallel computing for large datasets. Xarray has two core data structures, DataArray, which is similar to a pandas.Series for N-dimensional array, and Dataset which is similar to a pandas.DataFrame for a dict-like container of multiple N-dimensional arrays.

Xarray is built on other existing Python libraries, such as NumPy/Pandas for fast arrays/indexing, Dask for parallel computing, matplotlib for plotting.

Anaconda Environment for NetCDF Processing

To begin working with netCDF files on Python, create a new environment, so that your existing environment will be in tact.

$ conda create -n netcdf python=3.9
$ conda activate netcdf

Then, we can install from conda-forge channel, the packages we need and a JupyterLab ecosystem to sandbox and work with netCDF data. In this case, rioxarray module is also installed so that netCDF files can be exported as GeoTIFF.

$ conda install -c conda-forge xarray[complete] dask bottleneck
$ conda install -c conda-forge rioxarray
$ conda install -c conda-forge jupyterlab
$ jupyter-lab

NetCDF to Raster

By using rioxarray (rasterio and xarray), we can convert a netCDF file to a raster file (GeoTIFF). An example of how to export netCDF DataArray as a GeoTIFF is as follows:

import xarray as xr
import rioxarray as rxr

fname = 'L3m_20210101-20210108__242278547_4_AV-OLA_ZSD_8D_00.nc'

ds = xr.open_dataset(fname)
ds.rio.set_spatial_dims('lon', 'lat')
ds.rio.set_crs('EPSG:4326')
ds.ZSD_mean.rio.to_raster('ZSD_20210101-20210108_AV-OLA.tif')
Figure 1. Raster data exported from NetCDF, visualized on QGIS

References:

  1. xarray: N-D labeled arrays and datasets in Python (pydata.org)
  2. Unidata | NetCDF (ucar.edu)
  3. NetCDF: an interface for scientific data access | IEEE Journals & Magazine | IEEE Xplore