17 votos

¿Manera más rápida de convertir gran trama a polilínea con R o Python?

Yo tengo un gran archivo raster (129600 por 64800 píxeles) con global de cuerpos de agua (1 bit valores 0 y 1) y tratar de extraer de océano y de aguas continentales y litorales.

He probado con ArcGIS y QGIS para convertir de raster a polilínea, pero se necesitan años.

¿Alguien sabe de una mejor y más rápida manera (Python o R) o una mejor herramienta para esta tarea?

Actualización

  • R: rasterToContour puede ser rápido y preciso, pero si usted tiene un conjunto de datos muy grande como la mía (8,398,080,000 píxeles) necesita una gran cantidad de memoria RAM (más de 16 GB) o la fuerza R para hacer más procesamiento en la unidad de disco duro y también se tienen las edades.
  • Python/GDAL: gdal_poligonize crea polígonos en lugar de polilíneas

Actualización 2

  • R rasterToContour: rasterToContour no entregar los resultados deseados. En comparación con ArcGIS (raster to polygon seguido por la característica de la línea) no extraer el píxel exacto del contorno, como se muestra en los ejemplos a continuación.

rasterToContour resultado rasterToContour result

ArcGIS resultado ArcGIS result

ACTUALIZACIÓN 3

Python/GDAL: me he quedado gdal_polygonize desde la línea de comandos en contra de ArcGIS en un conjunto de datos de prueba y los resultados fueron muy claros:

  • gdal: 49 segundos
  • ArcGIS: 1.84 segundos

10voto

user26872 Puntos 11194

Estoy trabajando con R y utilizado rasterToPolygons de la raster paquete en el pasado, pero ahora prefiero gdal_polygonizeR por Juan Baumgartner. Se basa en gdal_polygonize.py y es mucho más rápido. Juan Baumgartner publicado el código, y dio un ejemplo para el uso en su blog.

Si usted está familiarizado con python podría utilizar gdal_polygonize.py directamente de curso.

4voto

Tilo Wiklund Puntos 741

Intente rasterToContour de la trama del paquete.

f <- system.file("external/test.grd", package="raster")
r <- raster(f)
r[r[] < 750] <- 0
r[r[] >= 750] <- 1

x <- rasterToContour(r)
class(x)
> [1] "SpatialLinesDataFrame"
> attr(,"package")
> [1] "sp"

plot(r)
plot(x, add=TRUE)

enter image description here

A continuación, puede escribir fácilmente los archivos a una carpeta local, por ejemplo, como "Shapefile de ESRI' (.shp), utilizando el siguiente código. Eche un vistazo a ogrDrivers de rgdal para averiguar qué drivers de tu sistema es compatible con.

library(rgdal)
writeOGR(x, dsn = getwd(), layer = "coastlines", driver = "ESRI Shapefile")

2voto

Kersten Puntos 2310

Mientras que yo soy un gran fan de GDAL, el polygonize herramienta era demasiado lento para mi de las aplicaciones.

Una alternativa rápida es gdal_trace_outline de Dans GDAL scripts que también tiene más opciones con respecto a la tolerancia, donuts, etc.

Como gdal_polygonize esto también produce polígonos que iba a necesitar para convertir después con ogr2ogr -nlt MULTILINESTRING.

La desventaja es que usted necesita para compilarlo usted mismo, a menos que usted está en un Linux o Mac OsX Sistema.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X