Memuat Data Raster Multiband Geografis di BigQuery
Sasaran: Memuat Data Raster di BigQuery menggunakan dua pendekatan di bawah,
1. Menggunakan Dataflow dengan GeoBeam
2. Menggunakan pustaka inti GDAL.
Untuk mengatur konteksnya, berikut adalah beberapa terminologi seputar data raster yang dijelaskan,
Gambar Raster
Dalam bentuk Raster, data ditangkap melalui penginderaan jauh sebagai gambar dan direpresentasikan sebagai grid piksel. Sebuah satelit atau pesawat yang dipasang kamera menangkap citra area tertentu di bumi yang mewakili data yang terus menerus bervariasi misalnya sifat tanah, perkebunan di lahan hutan dan lain-lain.
Gambar diberi geotag dan menyimpan informasi posisi geografis. Biasanya informasi ini terdiri dari koordinat untuk piksel kiri atas pada gambar, ukuran setiap piksel dalam arah X, ukuran setiap piksel dalam arah Y, dan jumlah (jika ada) rotasi gambar. Dengan sedikit informasi ini, aplikasi GIS dapat memastikan bahwa data raster ditampilkan di tempat yang tepat.
Band
Gambar raster dapat berisi satu atau lebih pita, masing-masing mencakup area spasial yang sama, tetapi berisi informasi yang berbeda. Beberapa raster memiliki satu pita, atau lapisan (ukuran karakteristik tunggal), data, sementara yang lain memiliki banyak pita. Pada dasarnya, sebuah pita diwakili oleh satu matriks nilai sel, dan raster dengan banyak pita berisi beberapa matriks nilai sel yang bertepatan secara spasial yang mewakili area spasial yang sama.
Band dapat mewakili setiap bagian dari spektrum elektromagnetik termasuk rentang tidak terlihat oleh mata seperti bagian inframerah atau ultraviolet. Gambar dengan pita tunggal disebut gambar grayscale. Tiga pita dari citra multispektral dapat ditampilkan dalam warna Merah, Hijau, dan Biru sehingga kita dapat melihatnya.
Mewakili Fitur pada Gambar Raster
Setiap piksel atau kumpulan piksel dapat mewakili titik geografis atau garis fitur seperti sungai atau area yang ditampilkan sebagai poligon.
Memuat Data Raster di set data BigQuery
GeoTIFF adalah format data raster yang banyak digunakan. Format ini memungkinkan satu piksel peta dalam gambar TIFF ke koordinat geografis. Format File Gambar Tag, disingkat TIFF atau TIF , adalah format file gambar untuk menyimpan grafik raster.
Ini adalah file tiff yang saya dapatkan dari contoh geobeam,
File raster ini dimuat ke BigQuery untuk analisis geospasial. Skema data dalam file ini adalah seperti di bawah ini,
[
{
"name": "h3",
"type": "INT64",
"description": "Derived available soil water capacity (volumetric fraction) with FC = pF 2.5 for depth 0 cm"
},
{
"name": "geom",
"type": "GEOGRAPHY"
}
]
BigQuery menawarkan banyak fungsi yang memungkinkan kita membuat nilai geografi baru, menghitung pengukuran geografi, menjelajahi hubungan antara dua geografi, dan banyak lagi. Kita dapat melakukan pengindeksan geospasial hierarkis dengan sel kisi S2 menggunakan fungsi BigQuery S2. Selain itu, fitur machine learning BigQuery ML dapat digunakan untuk mengidentifikasi pola dalam data, seperti membuat model machine learning k-means untuk mengelompokkan data geospasial.
Penyerapan File GeoTiff di BigQuery dilakukan menggunakan dua metode di bawah ini seperti dalam cakupan artikel ini,
- Penggunaan Perpustakaan GeoBeam yang didasarkan pada GDAL, PROJ dan perpustakaan lainnya
- Menggunakan pustaka OSGEO — GDAL, Rasterio secara langsung
Saya menggunakan dataflow dengan kode contoh geobeam untuk memuat banyak gambar dan dalam artikel ini saya akan membahas langkah-langkah dan temuan pemuatan file tiff Soil Grid.
- Pasang geobeam,
pip install geobeam
python -m geobeam.examples.geotiff_soilgrid \
--runner DataflowRunner \
--sdk_container_image gcr.io/dataflow-geobeam/base \
--temp_location <your temp bucket> \
--project <your project> \
--service_account_email <your service account> \
--region us-central1 \
--worker_machine_type c2-standard-8 \
--gcs_url gs://geobeam/examples/soilgrid-test-clipped.tif \
--dataset examples \
--table soilgrid \
--band_column h3
RasterPolygonSource di GeoBeam digunakan untuk mengaktifkan pemuatan data tingkat baris yang siap untuk kueri langsung di BigQuery.
class geobeam.io.RasterPolygonSource(file_pattern, bidx=1, in_epsg=None, in_proj=None, **kwargs)
with beam.Pipeline(options=pipeline_options) as p:
(p
| beam.io.Read(GeotiffSource(known_args.gcs_url))
| 'MakeValid' >> beam.Map(geobeam.fn.make_valid)
| 'FilterInvalid' >> beam.Filter(geobeam.fn.filter_invalid)
| 'FormatRecords' >> beam.Map(geobeam.fn.format_record,
known_args.band_column, known_args.band_type)
| 'WriteToBigQuery' >> beam.io.WriteToBigQuery('DATASET.TABLE'))
Data Polygon dimuat di kolom tipe data geografi, geom, dan digunakan untuk kueri lebih lanjut.
Menyerap data menggunakan GDAL
Pendekatan ini saya menggunakan pustaka open source OSGEO, GDAL dan OGR. Metode ini memberikan kontrol lebih dalam metode pemuatan data dan langkah-langkah seperti poligonisasi piksel raster dapat dilakukan dalam hal tingkat keterhubungan.
GDAL dapat diinstal sebagai,
sudo apt-get install gdal-bin unzip
from osgeo import gdal, ogr
import sys
src_ds = gdal.Open('./SoilGrid.tif')
band = 0
if src_ds is None:
print ('Unable to open tif ')
sys.exit(1)
print ("[ RASTER BAND COUNT ]: ", src_ds.RasterCount)
for band in range( src_ds.RasterCount ):
band += 1
print ("[ GETTING BAND ]: ", band)
srcband = src_ds.GetRasterBand(band)
if srcband is None:
continue
stats = srcband.GetStatistics( True, True )
print("band num is : ", band)
print ("[ NO DATA VALUE ] = ", srcband.GetNoDataValue())
print ("[ MIN ] = ", srcband.GetMinimum())
print ("[ MAX ] = ", srcband.GetMaximum())
print ("[ SCALE ] = ", srcband.GetScale())
print ("[ UNIT TYPE ] = ", srcband.GetUnitType())
dst_layername = "POLYGONIZED_DATA_BAND" + str(band)
drv = ogr.GetDriverByName("ESRI Shapefile")
dst_ds = drv.CreateDataSource( dst_layername + ".shp" )
dst_layer = dst_ds.CreateLayer(dst_layername, srs = None )
gdal.Polygonize( srcband, None, dst_layer, -1, [], callback=None )
if stats is None:
continue
ogr2ogr -f csv -dialect sqlite -sql 'select AsGeoJSON(geometry) AS geom, * from "crop_data"' crop_data.csv crop_data.shp
bq load --autodetect --replace sample_data.crop_data_vector gs://sample_data/crop_data.csv
Untuk menguji dan membuat prototipe analisis geospasial, saya menggunakan BigQuery GeoViz sebagai cara memvalidasi kueri dan menghasilkan keluaran visual dari BigQuery. Untuk pelaporan intelijen bisnis, Looker Studio dapat digunakan atau Looker dapat digunakan untuk terhubung ke BigQuery dan menggabungkan visualisasi geospasial dengan berbagai jenis laporan lainnya untuk menyajikan tampilan terpadu dari insight yang diperlukan.
Saya berencana untuk menerbitkan contoh yang lebih rumit di blog mendatang tentang analisis data geospasial dan membuat dasbor.
Referensi
https://webhelp.esri.com/
https://docs.qgis.org/2.8/en/docs

![Apa itu Linked List? [Bagian 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































