Estoy tratando de agregar algunos datos raster (todos .tif) hasta una resolución más gruesa (de .05 grados a .25 grados) usando gdalwarp en python, pero el comando no funciona. En lugar de obtener una salida con una amplia gama de valores, todos los valores de la salida son 0. La resolución y la profundidad de píxeles / tipo son correctos, pero los valores no lo son.
Aquí está la documentación del comando gdalwarp: http://www.gdal.org/gdalwarp.html
Tengo dos archivos de entrada que deseo agregar hasta una resolución de 0,25 grados, produciendo varias salidas:
-
'NDVI_raster': La primera entrada es una trama con signo de 16 bits que representa NDVI, con valores que van de -10.000 a 10.000 y valores nodata de -15.000.
-
'nodata_mask': La segunda es una máscara NoData, float de 32 bits, donde 1 = valores de datos "buenos", y 0 = NoData.
Con 'NDVI_raster' como entrada, quiero producir 7 salidas diferentes, cada una representando una estadística diferente. Lo hago llamando a gdalwarp 7 veces, cada vez ajustando el método de remuestreo (-r) a uno de los siguientes: media, modo, máx, mín, mediana, q1, q2. Llamaré a las salidas NDVI_ave.tif, NDVI_mode.tif, etc. En este momento, estoy usando GDAL 1.10.1, que sólo permite media y modo, así que estoy probando con sólo estas dos estadísticas ahora.
Utilizando 'nodata_mask' como entrada, quiero producir en última instancia una QAL (capa de garantía de calidad). Para ello, utilizo gdalwarp, con el modo de remuestreo establecido en "promedio" para agregar hasta 0,25 grados. El resultado es que cada píxel representa la proporción de píxeles buenos/píxeles totales de la entrada. Llamemos a la salida QAL.
Esto es lo que hay en mi código (usando mode como ejemplo para la primera entrada):
os.system('gdalwarp -tr .25 .25 -r mode -srcnodata -15000 %s %s' % (NDVI_raster, NDVI_mode))
Y para la capa de control de calidad:
os.system('gdalwarp -tr .25 .25 -r average -srcnodata -15000 %s %s' % (nodata_mask, QAL))
Los resultados son rásters con la resolución, proyección y profundidad de píxel correctas, pero los valores de píxel son todos 0.
¿Alguien familiarizado con python/gdal sabe qué está pasando?
Al llamar al comando gdalwarp desde la línea de comandos (linux), obtengo el resultado deseado. Cuando uso os.system para llamar a gdalwarp desde python, obtengo rásters vacíos. Así que tal vez algo está mal con mi gdal / python enlaces?
En lugar de llamar al comando a través de os.system, he utilizado subproceso. La herramienta a través de este método también parece funcionar sin problemas, pero el resultado es el mismo: una trama llena de 0's.
He intentado poner la llamada a gdalwarp en un script de shell bash y llamar a ese script de shell desde python, pero el resultado es un montón de -1s en lugar de 0s. Por extraño que parezca, lo había probado antes y estoy bastante seguro de que funcionó, pero la prueba se borró de mi servidor y ahora no puedo volver a crearlo por alguna razón.
Poner el comando gdalwarp en un script de shell bash y luego llamar a ese script de shell desde la línea de comandos me da el resultado deseado. Llamar al mismo script de shell desde python, sin embargo, no lo hace. Parece que algo va mal con python, pero ¿qué y cómo lo arreglo?