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é
rasterToPolygons
elraster
paquete en el pasado, pero ahora prefierogdal_polygonizeR
John Baumgartner. Se basa engdal_polygonize.py
y 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.py
directamente, por supuesto.fuente
Para la posteridad, he tenido éxito con el
stars::
paqueteR
para hacer este tipo de operación rápidamente.fuente
Probar
rasterToContour
desde 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
ogrDrivers
desde rgdal para saber con qué controladores es compatible su sistema.fuente
rasterToContour
un 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.resample
sus 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 realizarrasterToContour
en cada mosaico por separado de manera iterativa y , finalmente,merge
los 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 llamadasplitRaster
para 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_outline
de los scripts Dans GDAL que también tiene más opciones con respecto a la tolerancia, donas, etc.De
gdal_polygonize
esta 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