Sí se puede hacer esto en un script. Para hacer esto de manera eficiente, usted necesitará SciPy . SciPy es un primo de NumPy y juntos amplían Python con un montón de capacidades de manejo de arrays extremadamente potentes. En SciPy se utilizará la función ' ndimage Módulo '.
Su procedimiento es hacer un raster de sus zonas. Luego importa tu raster original y el raster de las zonas en un array NumPy. Haz una tercera matriz numpy con los valores únicos de tu matriz de zonas para usarla como índice para la función ndimage. Por último, utiliza una de las estadísticas de ndimage para extraer el resultado, por ejemplo
myIndex = numpy.unique(zonesArray)
minResult = ndimage.minimum(myRasterArray, labels=zonesArray, index=indexArray)
(obviamente no he incluido todo el código para abrir un archivo raster o vectorial, etc., pero vea más abajo la ayuda para ello).
A menudo escribo mis resultados en un simple archivo de texto csv y luego puedo hacer una unión de tablas para extraer las estadísticas de nuevo en mis polígonos de zona. Si usted tiene muchos rasters, entonces usted puede automatizar el proceso en un proceso por lotes.
Aunque se puede hacer esto con GDAL y, de hecho, se necesitará GDAL para leer los datos originales de ráster y polígono, no recomendaría que se intentara sin SciPy porque el proceso tendrá una presteza glacial. Ver esta excelente serie sobre la codificación de GDAL con Python. Observe el tutorial 6 de la serie, ya que es especialmente relevante. Sin embargo, no menciona SciPy ya que es un poco antiguo (y donde menciona 'Numeric' entienda que éste ha sido reemplazado por 'NumPy'). ndimage es muy rápido y mucho mejor que iterar manualmente sobre un ráster de forma bit a bit o incluso iterar sobre un array celda a celda. La diferencia de velocidad al usar SciPy frente a NumPy puede ser de segundos comparado con horas para los mismos datos (por experiencia personal). Además, se necesita menos código :)
Este mensaje contiene muchas cosas y puede parecer desalentador si no sabes nada de Python. En ese caso, comience con la serie de tutoriales que mencioné anteriormente, que asume cero experiencia en codificación. Luego, después de las primeras lecciones, salta al material de rasterización. Una vez que sepas cómo abrir un raster y ponerlo en un array Numpy (también conocido como 'numérico'), lee la documentación de SciPy sobre ndimage .
0 votos
"El uso de shapefiles >15mB causa problemas". ¿Está usted seguro? He cargado con éxito en qgis (tanto en windows como en linux) shapefiles que tenían más de 100 mbytes
0 votos
Si no sabes nada de scripts en python tu siguiente opción es usar GRASS, con el que puedes escribir muy fácilmente un script que itere sobre cualquier número de shapefiles. También te sugiero que inviertas algo de tiempo en aprender python, porque es una herramienta realmente potente para los análisis científicos
0 votos
Gracias por tus comentarios Nick. Los Shapefiles >15mB causan problemas para el plugin Zonal Stats - tarda horas en terminar y luego devuelve resultados para sólo 15 polígonos o más. Ejecutar los shapefiles uno a la vez (sin fusionar en archivos más grandes) funciona bien sin embargo. He jugado brevemente con GRASS y lo he encontrado un poco desalentador, pero lo investigaré. Si pudieras ofrecerme alguna orientación sobre qué es exactamente lo que necesito hacer en GRASS, sería de gran ayuda.
0 votos
@Thomas - Es probable que tu problema se deba más al tamaño de la trama subyacente que a los shapefiles. Cualquier proceso que haga una búsqueda celda por celda en un raster grande se verá afectado a altas resoluciones. Si se duplica la resolución, se cuadruplican los datos ráster, por lo que las cosas pueden irse rápidamente de las manos. SciPy maneja los datos de manera diferente. Recientemente procesé más de un centenar de vectores con una media de 15mB derivando valores de rásters con una media de casi 400mB cada uno. SciPy tardó entre unos pocos segundos y unos cinco minutos por archivo. Sólo por este ahorro de tiempo, merece la pena familiarizarse con Python y SciPy.
0 votos
En general, ¿cuánto tiempo dura este proceso? He estado utilizando archivos rasterizados muy grandes (TIF's de unos 700 mb) y una capa vectorial con unos 200 polígonos; han pasado varias horas y el proceso aún no se ha completado. Perdonad si esto se ha marcado como una respuesta -- no quería abrir un nuevo hilo para tratar el mismo tema, sin embargo.
0 votos
Y todavía no es una respuesta y esto no es un foro de discusión. Los comentarios también empujarán a las viejas preguntas. ¿Qué esperas para una respuesta de todos modos? El tiempo de procesamiento variará de un sistema a otro dependiendo de los archivos utilizados y de la potencia del hardware.
0 votos
@BenThompson - ¿usas R? No lo recuerdo, pero hace tiempo. Mis rasters no eran ni de lejos tan grandes como los tuyos (sólo 10MB) así que probablemente eso ralentizará mucho las cosas.