¿Por qué GDALPolygonize es mucho más lento que ArcGIS Raster to Polygon?

9

Estoy intentando poligonalizar un ráster usando GDALPolygonize () en un script de Python. El guión comenzó a poligonizar ayer a las 5 p.m. y todavía se poligonaliza a las 9:30 a.m. No tengo idea de qué tan avanzado está, pero sé que todavía está yendo porque cuando actualizo mi explorador de Windows puedo ver el cambio de tamaño de archivo para el archivo de forma de salida.

Mi trama es bastante grande, pero todavía no espero que tarde tanto. Mi ráster tiene 35,486 columnas y 23,682 filas con un tamaño de celda de 1 metro. Es un ráster binario donde un valor de 1 representa datos y 0 es NoData.

Cuando poligonalicé en ArcGIS usando Raster to Polygon en el cuadro de herramientas de conversión, tardé 56 segundos. El archivo de forma resultante es de 200 mb mientras que el archivo de forma que GDALPolygonize todavía está creando solo es de 100 mb. Eso me hace pensar que GDAL está a medio camino después de correr toda la noche.

Especificaciones: Windows 7 de 64 bits, 8 gb de RAM, GDAL 1.10 de 64 bits, ArcGIS Desktop 10.2, 64 bits de geoprocesamiento en segundo plano para ArcGIS Desktop, Python 2.7.3 de 64 bits

ACTUALIZACIÓN Día 2: GDALPolygonize todavía se está ejecutando. Ha pasado la noche 2 noches seguidas y durante todo un día sin completar. ArcGIS tardó 56 segundos.

Brian
fuente
actualización rápida de 2018: gdal_polygonize todavía lleva mucho más de 56 segundos. Tengo una trama de 12000x12000 y gdal ha estado trabajando durante más de una hora. No es mucho en comparación con los días, pero es más de 60 veces más de 56 segundos, así que tengo la sensación de que estaré viendo un proceso en ejecución cuando regrese a revisar mi máquina mañana por la mañana.
thymaro

Respuestas:

4

Tengo la misma experiencia. El algoritmo es realmente lento para grandes rásteres, aunque bastante rápido para los más pequeños. Hay una posible solución alternativa:

  1. Divida el archivo ráster enorme en archivos más pequeños mediante gdalwarp (usando -te para definir la extensión de cada archivo):

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

  1. Poligonalice cada uno de ellos en un shapefile separado:

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

  1. Combinar shapefiles juntos:

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

  1. Disuelva el nuevo shapefile:

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

Lo sé, es una locura, pero el tiempo final fue mucho más rápido.

Stanley

Stanislav Dušek
fuente
1
Probablemente podría envolver esto en un script para que solo tenga que hacer algo usted mismo una vez
henrik-dmg
Hola Stanley, gracias por esta respuesta. Estoy tratando de hacer algo similar a esto porque mis rásteres tardan una eternidad en poligonizar. ¿Este método combina los polígonos en los bordes de nuevo juntos como si nunca dividiera los rásteres en primer lugar? ¿Podría ampliar las declaraciones SQL en el último comando? No conozco SQL y estoy tratando de descubrir cómo hacer que esto funcione con mis datos.
user20408
en lugar de usar gdalwarp, ¿no podría simplemente enlosar su ráster creando un archivo vrt al guardarlo? Al menos, así es como aprendí a cortar mis rásteres y no tengo que hacerlo para cada mosaico por separado.
thymaro