Me gustaría saber cómo obtener todos los valores ráster dentro de un polígono usando gdal o pygeoprocessing, sin leer toda la cuadrícula como una matriz.
pygeoprocessing y gdal pueden hacer estadísticas zonales, pero solo la función min, max, mean, stdev o count están disponibles desde dicha función. Dado que las estadísticas zonales necesitan acceder a los valores, ¿sería fácil extraer valores de la misma manera?
Encontré una pregunta muy similar aquí: (¿ Obtener el valor de píxel del ráster GDAL bajo el punto OGR sin NumPy? ) Pero solo para un "punto" particular.
python
gdal
pygeoprocessing
egayer
fuente
fuente
Respuestas:
Puede usar rasterio para extraer los valores de trama dentro de un polígono como en GIS SE: GDAL python cut geotiff image with geojson file
Utilizo aquí un archivo ráster de una banda y GeoPandas para el archivo de forma (en lugar de Fiona)
El resultado de out_image es una matriz enmascarada de Numpy
Ahora uso ¿Cómo obtengo las coordenadas de una celda en un geotif? o Python affine transforma para transformar entre el píxel y las coordenadas proyectadas con
out_transform
la transformación afín para los datos del subconjuntoCreación de un nuevo GeoDataFrame resultante con los valores de columna, fila y elevación
fuente
geoms = [mapping(geoms[0])]
lugar de sologeoms[0]
?mapping(geoms[0])
= Formato GeoJSON de la geometríadata = out_image.data[0]
tirómulti-dimensional sub-views are not implemented
por mí, perodata = out_image[0,:,:]
funcionó. ¿Es esta una solución alternativa menos eficiente o problemática? ¿Alguna idea de por qué habría fallado como está escrito?Si tiene problemas al usar rasterio en el mismo script con gdal, estaba probando con pygeoprocessing (también se usa bien) y descubrí una solución alternativa. La secuencia de comandos completa (con rutas a mis capas) es la siguiente:
Después de ejecutarlo, obtuve:
donde los valores de muestreo ráster fueron los esperados en cada punto y se incorporaron a la capa de puntos.
fuente