2011-04-27 17 views
5

¿Hay alguna alternativa de fuente abierta para la herramienta Estadísticas Zonal (ArcGIS Spatial Analyst)? ¿Cuál es la mejor herramienta (que puedo usar en script) para contar estadísticas de archivos ráster?Estadísticas zonales QGIS

Respuesta

2

puede utilizar el paquete de la trama en I

library(raster) 
v <- raster('raster filename') 
z <- raster('zones raster filename') 
zv <- zonal(v, z, fun=mean) 
+1

ver ayuda (zonal) en R para un ejemplo ejecutable con datos de muestra – Spacedman

1

Corrígeme si me equivoco, RobertH, pero creo zonal() requiere que las zonas son ya 'rasterizada' en algún sentido, mientras que muchos veces uno querrá las estadísticas de las celdas ráster que caen dentro de los polígonos. Los diversos métodos de superposición en R dentro del paquete SP (ver: "superposición de métodos") son necesarios para esto, aunque si estoy equivocado, me gustaría escucharlo. Prefiero el paquete raster antes que utilizar SpatialGridsDataFrames, pero creo que uno debe confiar en las clases sp para mezclar polígonos y datos de grillas. Lo cual está bien, excepto que se vuelve problemático porque carece de la gran administración de memoria del paquete de ráster, lo que hace que las operaciones de estilo punto en polígonos sean realmente difíciles de hacer en R en rásteres grandes.

También me hacen creer, pero no lo he intentado, que esto se puede hacer dentro de GRASS, y/o mediante QGIS, con la próxima versión de QGIS (1.7) para tener algún tipo de función de estadísticas zonal incorporada .

3

Puede hacerlo con GRASS usando varios métodos. Cuál es el más adecuado dependerá de sus datos y la salida requerida. Tenga en cuenta que también puede usar GRASS desde dentro de QGIS utilizando la caja de herramientas GRASS o la caja de herramientas Sextante.

Supongamos que usted tiene:

  • un mapa del vector, por ejemplo, vector_zones con las zonas definidas en la columna de la myzones en la tabla de atributos.
  • 'valores' de la capa de un mapa de bits para los que desea calcular sus estadísticas zonales

r.statistics

Para utilizar r.statistics, primero tiene que convertir el mapa vectorial a una capa de trama, que puedes hacer con v.to.rast. Luego, use r.statistics para calcular las estadísticas zonales.

v.to.rast input=vector_zones output=zones column=myzones 
r.statistics base=zones cover=values out=outputmap method=average 

Esto le dará una nueva capa con la estadística de zona seleccionada, lo que podría ser la media, moda, mediana, varianza, etc. (consulte la página del enlace anterior).

r.univar

La función r.univar también funciona en capas de trama.

v.to.rast input=vector_zones output=zones column=myzones  
r.univar map=values zones=zones output=output.file fs=; 

La salida es una tabla con las estadísticas zonales.

v.rast.stats

Esto no requiere que usted para convertir la capa vectorial a una capa de trama (esto se hace internamente). La función calcula estadísticas univariadas básicas por categoría de vector (cat) desde el mapa ráster.

v.rast.stats vector=vector_zones layer=1 raster=values column_prefix=val 

Los resultados se cargan en la tabla de atributos del mapa vectorial.

1

El paquete Rasterstats es una buena herramienta de código abierto que funcionó bien para mí: http://blog.perrygeo.net/2013/09/24/python-raster-stats/

empecé a usarlo como una solución temporal porque el método ZonalStatistics de ArcPy estaba produciendo una trama problemática que conducen a un error extraño cuando tratando de convertir el ráster a una matriz (https://gis.stackexchange.com/questions/110274/save-fails-on-raster-object-created-from-numpyarraytoraster). Rasterstats funcionó bien y proporcionó una solución eficiente para mi problema.