10 votos

¿Utilizar el plugin de estadísticas zonales de QGIS desde la consola de Python?

Estoy utilizando el plugin Zonal Stats en QGIS para extraer estadísticas ráster de polígonos superpuestos (tengo shapefiles de distribución de especies y quiero extraer datos ambientales del área de distribución de cada especie). Tengo unos 300 archivos de los que necesito obtener datos y me gustaría escribir un script para ejecutarlo en la consola de python, pero soy un completo novato con python y no tengo ni idea de cómo hacerlo.

0 votos

0 votos

Chad: sí, es una pregunta similar pero más específica. Nadie ha respondido a la otra pregunta, sino que han sugerido otras formas de resolver el problema. No sé cómo borrar el otro post

0 votos

En la otra pregunta te indiqué un r-script capaz de lo que quieres y Sylvester Sneekly te nombró el método exacto en python. Si no estás acostumbrado a codificar ni en python ni en r, todas las pistas adicionales no te ayudarán. Necesitas un script codificado por ti mismo o un montón de clicks de ratón. Aprenda algo de codificación, pruebe los ejemplos y repórtese, si algo no funciona.

16voto

kjo Puntos 197

El siguiente código me funcionó en QGis 1.8.0

Se podría modificar esto para acomodar múltiples archivos con algún bucle..

from qgis.analysis import QgsZonalStatistics

#specify polygon shapefile vector
polygonLayer = QgsVectorLayer('F:/temp/zonalstat/zonePoly.shp', 'zonepolygons', "ogr") 

# specify raster filename
rasterFilePath = 'F:/temp/zonalstat/raster1.tif'

# usage - QgsZonalStatistics (QgsVectorLayer *polygonLayer, const QString &rasterFile, const QString &attributePrefix="", int rasterBand=1)
zoneStat = QgsZonalStatistics (polygonLayer, rasterFilePath, 'pre-', 1)
zoneStat.calculateStatistics(None)

0 votos

Genial. Muchas gracias vinayan, es exactamente lo que buscaba.

0 votos

Ver también ici para una solución alternativa utilizando R

0 votos

Me alegro de que te haya servido de ayuda.

3voto

depperm Puntos 103
zoneStat = QgsZonalStatistics (polygonLayer, rasterFilePath, 'pre-', 1)
zoneStat.calculateStatistics(None)

calcula por defecto sólo el recuento, la suma y la media (como puede deducirse de Raster -> Zonal Statistics en QGIS Desktop, puede hacer mucho más).

Si, por ejemplo, quieres calcular sólo la media que tienes que utilizar:

zoneStat = QgsZonalStatistics (polygonLayer, rasterFilePath, 'pre-', 1, QgsZonalStatistics.Mean)
zoneStat.calculateStatistics(None)

véase API para todas las opciones.

0 votos

¿Puede alguien ayudarme con la sintaxis para obtener dos estadísticas a elección, digamos Mín y Máx, al mismo tiempo? He estado probando diferentes maneras pero sin éxito

0 votos

En Qgis 3 debe sustituir la ruta del archivo raster por el propio archivo raster. Por lo tanto, rasterFilePath = 'F:/temp/zonalstat/raster1.tif' se convierte en: rasterFile = QgsRasterLayer('F:/temp/zonalstat/raster1.tif', 'raster') Luego se cambia rasterFilePath por rasterFile en el comando zoneStat zoneStat = QgsZonalStatistics (polygonLayer, rasterFile, 'pre-', 1) zoneStat.calculateStatistics(None)

0 votos

@dorakiara quizás [QgsZonalStatistics.Min, QgsZonalStatistics.Max] ?

2voto

Rihan Meij Puntos 362

Esta es la manera de conseguir lo que quieres en SAGA GIS. Probablemente no es la solución que quieres, pero funciona. Investigaré las razones por las que mis plugins fallan y lo actualizaré tan pronto como sea posible.

Instalar SAGA GIS (también debería estar disponible a través de apt-get o aptitudbe en su distribución de linux).

  • Inicie SAGA, cargue su forma Raster y vectorial (Menú Módulos -> Archivo -> Importación GDAL/OGR). Puedes ver el proceso a continuación.
  • Ejecute el módulo "Estadísticas de cuadrícula para polígonos" (Menú Módulos -> Forma -> Cuadrícula -> Valores de cuadrícula). Los valores se añaden directamente a la tabla. El diálogo debe tener el siguiente aspecto enter image description here
  • Vaya a la pestaña "Datos" en el espacio de trabajo, haga clic con el botón derecho del ratón en su capa vectorial y elija " guardar como " para exportar la forma con los atributos añadidos. También puede mostrar la tabla de atributos haciendo clic con el botón derecho del ratón y luego haciendo clic en mostrar la tabla

Esto funciona para el conjunto de datos que me enviaste. También es posible llamar a los módulos SAGA en QGIS a través de SEXTANTE como un proceso BATCH. Para ello basta con activar los módulos SAGA en las opciones de SEXTANTE.

0 votos

Gracias por la sugerencia, pero ya he probado con Saga y los resultados que ha producido son incoherentes, es decir, si hago lo mismo dos veces, los resultados son diferentes. Sé que el plugin ZonalStats en QGIS funciona, por lo tanto estoy después de una manera de automatizar ZonalStats.

0 votos

@vinayan tengo el código que has dado para las estadísticas zonales pero está creando las columnas en la capa del vector del polígono pero no actualizando los valores calculados. ¿Por qué es así?

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