Saya memiliki file raster besar (129600 x 64800 piksel) dengan badan air global (nilai 1 bit 0 dan 1) dan mencoba mengekstrak garis pantai samudera dan perairan daratan.
Saya sudah mencoba dengan ArcGIS dan QGIS untuk mengkonversi dari raster ke polyline, tetapi butuh waktu lama.
Adakah yang tahu cara yang lebih baik / lebih cepat (Python atau R) atau alat yang lebih baik untuk tugas ini?
Memperbarui
- R: rasterToContour mungkin cepat dan tepat, tetapi jika Anda memiliki dataset yang sangat besar seperti milik saya (8.398.080.000 piksel), Anda memerlukan jumlah RAM yang sangat besar (lebih dari 16GB) atau Anda memaksa R untuk melakukan lebih banyak pemrosesan pada hard drive dan itu juga akan memakan waktu lama.
- Python / GDAL: gdal_poligonize membuat poligon bukan polyline
Perbarui 2
- R rasterToContour: rasterToContour tidak memberikan hasil yang diinginkan. Dibandingkan dengan ArcGIS (raster ke polygon diikuti oleh fitur untuk garis) itu tidak mengekstrak garis piksel yang tepat, seperti yang ditunjukkan dalam contoh di bawah ini.
PEMBARUAN 3
Python / GDAL: Saya telah menjalankan gdal_polygonize dari baris perintah terhadap ArcGIS pada dataset uji dan hasilnya sangat jelas:
- gdal: 49 detik
- ArcGIS: 1,84 detik
python
r
performance
Generik Wevers
sumber
sumber
Jawaban:
Saya bekerja dengan R dan digunakan
rasterToPolygons
dariraster
paket di masa lalu, tapi sekarang saya lebih sukagdal_polygonizeR
oleh John Baumgartner. Ini berdasarkangdal_polygonize.py
dan jauh lebih cepat. John Baumgartner menerbitkan kode dan memberikan contoh untuk digunakan di blog - nya .Jika Anda terbiasa dengan python, Anda bisa menggunakan
gdal_polygonize.py
langsung tentu saja.sumber
Untuk anak cucu, saya sudah sukses dengan
stars::
paketR
untuk melakukan operasi jenis ini dengan cepat.sumber
Coba
rasterToContour
dari paket raster .Anda kemudian dapat dengan mudah menulis file ke folder lokal, misalnya sebagai 'ESRI Shapefile' (.shp), menggunakan kode di bawah ini. Lihat
ogrDrivers
dari rgdal untuk mengetahui driver mana yang kompatibel dengan sistem Anda.sumber
rasterToContour
ke beberapa nilai yang lebih tinggi, misalnya 1e + 9. Anda akan berakhir dengan detail lebih lanjut. Pengaturan default membuat garis kontur yang cukup umum.resample
data Anda menjadi resolusi spasial yang lebih kasar, satu-satunya solusi yang dapat saya bayangkan adalah dengan membagi data Anda menjadi beberapa ubin (mis. 16 sub-raster), kemudian lakukanrasterToContour
pada setiap ubin secara terpisah dengan cara yang iteratif dan Akhirnya,merge
shapefile yang dihasilkan menjadi satu shapefile besar. Jika Anda tertarik, paket kelompok kerja kami Rsenal menawarkan fungsi yang dipanggilsplitRaster
untuk membuat beberapa sub-raster dari satu raster besar.Walaupun saya penggemar berat GDAL, alat poligonisasi terlalu lambat untuk aplikasi saya.
Alternatif cepat adalah
gdal_trace_outline
dari skrip Dans GDAL yang juga memiliki lebih banyak opsi mengenai toleransi, donat, dll.Seperti
gdal_polygonize
ini juga menghasilkan poligon yang perlu Anda konversi sesudahnyaogr2ogr -nlt MULTILINESTRING
.Kekurangannya adalah Anda perlu mengompilasinya sendiri, kecuali jika Anda menggunakan Linux atau Mac OsX System.
sumber