¿Cómo calcular las estadísticas de trama para los polígonos?

14

¿Cómo puedo calcular sumas, promedios, etc. de puntos ráster (multibanda) por polígono de una capa vectorial? Me dijeron que esto se llama "estadísticas zonales". Intenté eso con QGIS primero.

Hay una forma de hacerlo pero es demasiado lento (convierta raster a vector, intersecte con la segunda capa vectorial, calcule la geometría, exporte números, calcule estadísticas con una hoja de cálculo u otro programa, vuelva a importar los resultados, tome Para siempre por mis 350.000 puntos raster).

También me dieron la sugerencia de usar saga-gis. Eso tiene "estadísticas zonales" pero esas se basan en categorías de una banda ráster, no en polígonos de una capa vectorial. Entonces, para usar esto, tendría que convertir mi capa vectorial a ráster y luego calcular las estadísticas.

Esta parece ser la manera incorrecta de resolver esto. No habría forma de contabilizar los puntos ráster que pertenecen a 2 o más polígonos porque están intersecados por el límite del polígono. Supongo que las estadísticas basadas en polígonos deberían poder manejar esto, así que también supongo que todavía no he encontrado el módulo correcto.

Saga-gis tiene muchos módulos. Déjeme saber cuál es el adecuado para esta aplicación.

    
pregunta stn 11.04.2012 - 02:06

5 respuestas

22

Estaba luchando para hacer exactamente lo mismo, pero por varias razones estoy comprometido a usar QGIS. Intenté usar v.rast.stats utilizando el complemento GRASS y también a través del complemento Sextante. El último enfoque fracasó, porque parece adjuntar las estadísticas a una capa vectorial temporal que luego elimina. El complemento de GRASS funcionó, pero no trata con polígonos superpuestos.

Después de investigar un poco (en la fuente del complemento ZonalStats de sonido prometedor), descubrí que QGIS en realidad tiene métodos de estadísticas zonales incorporados en la API, y estos también tienen enlaces Python. Por lo tanto, mientras solo esté buscando las estadísticas de count , sum y mean para sus funciones de polígono, la Consola de Python (Plugins > Consola de Python) es actualmente la forma más sencilla de adjuntar las estadísticas a la tabla de atributos de polígono .

  1. Seleccione su capa ráster en la tabla de contenido y escriba lo siguiente en la consola (toma el nombre del archivo de origen de su capa ráster)

    >>> rasterfile = qgis.utils.iface.mapCanvas().currentLayer().source()

  2. Seleccione su capa vectorial y ejecute el siguiente comando en la consola (toma la propia capa vectorial)

    >>> vectorlayer = qgis.utils.iface.mapCanvas().currentLayer()

  3. Ejecute los siguientes tres comandos en la consola (pasan la capa vectorial y el archivo raster a la calculadora de estadísticas zonal integrada de QGIS)

    >>> import qgis.analysis

    >>> zonalstats = qgis.analysis.QgsZonalStatistics(vectorlayer,rasterfile)

    >>> zonalstats.calculateStatistics(None)

Los resultados se agregarán como campos adicionales en la capa de polígono.

Tengaencuentaquesideseaagregarunprefijoalosnuevoscampos(enlugardetenerloscomosuma,mediayconteo),reemplazaráelprimercomandoenelpaso3conelsiguiente(asumiendoquedeseautilizar'zonal_'comoelprefijo:

>>>zonalstats=qgis.analysis.QgsZonalStatistics(vectorlayer,rasterfile,"zonal_")
    
respondido por el rudivonstaden 25.10.2012 - 17:31
6

Finalmente lo encontré: en Saga-GIS, los polígonos de categoría abierta y la cuadrícula de datos, luego las formas - > grid- > grid value- > grid grid para polígonos

    
respondido por el stn 12.04.2012 - 19:30
3

Puedes hacer esto fácilmente con PostGIS. Consulte este tutorial: enlace

    
respondido por el Pierre Racine 11.04.2012 - 04:39
3

Este problema parece haberse solucionado ya hace algún tiempo, pero de todos modos agregaré mi cuchara a la sopa, ya que hace poco necesité algunas estadísticas de trama.

La metodología QGIS descrita por rudivonstaden funcionó a la perfección, gracias por la sugerencia. Sin embargo, en mi caso, también quería saber los valores mínimos y máximos y estándar para los valores ráster dentro de mis polígonos, y qué funcionalidad no pude encontrar en QGIS. Encontré una solución a través de la función isectpolyrst en GME , que es uno de mis favoritos para resolver problemas de GIS. Esta función me dio las estadísticas que necesitaba y bastante rápido también.

PS. GME tiene un poco de una dependencia desafortunada (ArcGIS). Entonces, aunque el programa en sí está disponible de forma gratuita para todos, necesita ArcGIS para ejecutarlo. Pero si tiene ArcGIS (cualquier nivel de licencia), le recomiendo que lo pruebe.

EDIT:

Obtuve las estadísticas que quería, pero más tarde descubrí que salté a conclusiones un poco apresuradamente después de mirar las cifras reales. Obtienes estadísticas, sí, pero solo para la primera banda en un raster. Entonces, si operas con una imagen rasterizada de 3 bandas, las estadísticas están incompletas. Debería haber señalado la cantidad de canales en mi publicación original. Lo mejor es utilizar SAGA-GIS como la propuesta anterior, si trabaja con imágenes ráster multibanda.

    
respondido por el GISinHelsinki 03.11.2014 - 09:37
3
zonalstats = qgis.analysis.QgsZonalStatistics(vectorlayer,rasterfile)
zonalstats.calculateStatistics(None)

calcula de forma predeterminada solo el recuento, la suma y la media (como puede deducir de Raster -> Zonal Statistics en QGIS Desktop, puede hacer mucho más).

Si, por ejemplo, quiere calcular solo la media que tiene que usar:

zonalstats = qgis.analysis.QgsZonalStatistics(vectorlayer, rasterfile, QgsZonalStatistics.Mean)
zonalstats.calculateStatistics(None)

vea API para todas las opciones.

    
respondido por el Franz Plumpton 25.01.2016 - 10:52

Lea otras preguntas en las etiquetas