Mengapa GDALPolygonize jauh lebih lambat daripada ArcGIS Raster to Polygon?


9

Saya mencoba mempolimerisasi raster menggunakan GDALPolygonize () dalam skrip Python. Script mulai poligonisasi kemarin jam 5 sore dan masih poligonisasi sekarang jam 9:30 pagi. Saya tidak tahu seberapa jauh itu, tapi saya tahu itu masih berjalan karena ketika saya menyegarkan Windows explorer saya, saya bisa melihat perubahan ukuran file untuk output shapefile.

Raster saya agak besar, tapi saya masih tidak mengharapkannya selama ini. Raster saya adalah 35.486 Kolom dan 23.682 Baris dengan ukuran sel 1 meter. Ini adalah raster biner di mana nilai 1 mewakili data dan 0 adalah NoData.

Ketika saya mempologonisasi di ArcGIS menggunakan Raster ke Polygon di Conversion Toolbox, butuh 56 detik. Shapefile yang dihasilkan adalah 200mb sedangkan shapefile masih dibuat oleh GDALPolygonize masih hanya 100mb. Itu membuat saya berpikir GDAL sekitar setengah jalan dilakukan setelah berjalan sepanjang malam.

Spesifikasi: Windows 7 64bit, 8gb RAM, GDAL 1.10 64bit, ArcGIS Desktop 10.2, 64 bit Background Geoprocessing untuk ArcGIS Desktop, Python 2.7.3 64bit

PEMBARUAN Hari 2 - GDALPolygonize masih berjalan. Sudah semalam 2 malam berturut-turut dan sepanjang hari tanpa menyelesaikan. ArcGIS membutuhkan waktu 56 detik.


pembaruan cepat dari 2018: gdal_polygonize masih membutuhkan waktu lebih dari 56 detik. Saya memiliki raster 12000x12000 dan gdal telah bekerja selama lebih dari satu jam. Ini tidak banyak dibandingkan dengan hari, tetapi lebih dari 60 kali lebih dari 56 detik, jadi saya merasa saya akan melihat proses yang berjalan ketika saya kembali untuk memeriksa mesin saya besok pagi.
thymaro

Jawaban:


4

Saya memiliki pengalaman yang sama. Algoritma ini sangat lambat untuk raster besar, meskipun cukup cepat untuk yang lebih kecil. Ada satu solusi yang mungkin:

  1. Membagi file raster besar menjadi file yang lebih kecil dengan gdalwarp (menggunakan -te untuk menentukan tingkat setiap file):

gdalwarp -te 12.08 48.5 12.5 51.1 original_file.tif part1.tif

  1. Polygonize masing-masing ke dalam shapefile terpisah:

gdal_polygonize.py part1.tif -f "ESRI Shapefile" part1.shp

  1. Gabungkan shapefile bersama:

ogr2ogr -f "ESRI Shapefile" -update -append merge.shp part1.shp -nln merge

  1. Larutkan shapefile baru:

ogr2ogr "output.shp" "input.shp" -dialect sqlite -sql "SELECT ST_Union(geometry), field FROM input GROUP BY field"

Saya tahu, ini gila sekali, tapi waktu terakhirnya jauh lebih cepat.

Stanley


1
Anda mungkin bisa membungkus ini menjadi satu skrip sehingga Anda hanya perlu melakukan sesuatu sendiri sekali
henrik-dmg

Hai Stanley, terima kasih atas jawaban ini. Saya mencoba melakukan sesuatu yang mirip dengan ini karena raster saya mengambil selamanya poligon. Apakah metode ini menggabungkan poligon di tepinya kembali seakan Anda tidak pernah membagi raster di tempat pertama? Bisakah Anda memperluas pernyataan SQL di perintah terakhir? Saya tidak tahu SQL dan saya mencoba mencari cara untuk membuat ini bekerja dengan data saya.
user20408

alih-alih menggunakan gdalwarp, tidak bisakah Anda hanya ubin raster Anda dengan membuat file vrt saat menyimpannya? Setidaknya, itulah cara saya belajar memotong raster saya dan saya tidak harus melakukannya untuk setiap ubin secara terpisah.
thymaro
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.