Tengo un gran archivo ráster (129600 por 64800 píxeles) con cuerpos de agua globales (valores de 1 bit 0 y 1) e intento extraer las costas de aguas continentales y oceánicas.
He intentado con ArcGIS y QGIS para convertir de ráster a polilínea, pero lleva años.
¿Alguien sabe una forma mejor / más rápida (Python o R) o una mejor herramienta para esta tarea?
Actualizar
- R: rasterToContour puede ser rápido y preciso, pero si tiene un conjunto de datos muy grande como el mío (8,398,080,000 píxeles) necesita una gran cantidad de RAM (más de 16 GB) o obliga a R a hacer más procesamiento en el disco duro y También llevará años.
- Python / GDAL: gdal_poligonize crea polígonos en lugar de polilíneas
Actualización 2
- R rasterToContour: rasterToContour no entrega los resultados deseados. En comparación con ArcGIS (ráster a polígono seguido de entidad a línea), no extrae el contorno exacto del píxel, como se muestra en los ejemplos a continuación.
ACTUALIZACIÓN 3
Python / GDAL: ejecuté gdal_polygonize desde la línea de comandos contra ArcGIS en un conjunto de datos de prueba y los resultados fueron extremadamente claros:
- gdal: 49 segundos
- ArcGIS: 1.84 segundos
python
r
performance
Wevers genéricos
fuente
fuente



Respuestas:
Estoy trabajando con R y utilicé
rasterToPolygonselrasterpaquete en el pasado, pero ahora prefierogdal_polygonizeRJohn Baumgartner. Se basa engdal_polygonize.pyy es mucho más rápido. John Baumgartner publicó el código y dio un ejemplo de uso en su blog .Si está familiarizado con Python, puede usarlo
gdal_polygonize.pydirectamente, por supuesto.fuente
Para la posteridad, he tenido éxito con el
stars::paqueteRpara hacer este tipo de operación rápidamente.fuente
Probar
rasterToContourdesde el paquete de trama .Luego, puede escribir fácilmente los archivos en una carpeta local, por ejemplo, como 'ESRI Shapefile' (.shp), utilizando el siguiente código. Eche un vistazo
ogrDriversdesde rgdal para saber con qué controladores es compatible su sistema.fuente
rasterToContourun valor más alto, por ejemplo, 1e + 9. Terminarás con más detalles entonces. La configuración predeterminada crea líneas de contorno bastante generalizadas.resamplesus datos tengan una resolución espacial más gruesa, la única solución que puedo imaginar sería dividir sus datos en múltiples mosaicos (por ejemplo, 16 sub-rásteres), luego realizarrasterToContouren cada mosaico por separado de manera iterativa y , finalmente,mergelos archivos de forma resultantes en un gran archivo de formas. En caso de que esté interesado, el paquete de nuestro grupo de trabajo Rsenal ofrece una función llamadasplitRasterpara crear múltiples sub-rásteres a partir de un gran ráster.Si bien soy un gran admirador de GDAL, la herramienta de poligonalización también fue demasiado lenta para mis aplicaciones.
Una alternativa rápida es
gdal_trace_outlinede los scripts Dans GDAL que también tiene más opciones con respecto a la tolerancia, donas, etc.De
gdal_polygonizeesta forma, también se producen polígonos con los que luego tendrías que convertirlosogr2ogr -nlt MULTILINESTRING.Lo malo es que debe compilarlo usted mismo, a menos que esté en un sistema OsX de Linux o Mac.
fuente