Estoy trabajando en un modelo computacional de la abundancia de polinizadores salvajes en un paisaje. El modelo en sí está completo, y ahora estoy luchando con un paso de procesamiento posterior.
Tengo mi ráster de suministro de polinizador GDAL que se parece a esto (los colores más claros significan una mayor visita de polinizador a un píxel):
Y tengo un archivo de forma OGR de puntos que representan ubicaciones de muestra en el paisaje:
Estoy tratando de ejecutar un análisis en los píxeles debajo de estos puntos, pero para hacerlo, necesito poder extraer el valor de un píxel debajo de un punto.
¿Es posible extraer el valor de un píxel debajo de un punto usando solo OGR y GDAL a través de Python? Preferiría evitar leer todo el ráster en la memoria ReadAsArray()
, ya que mis rásteres de salida son muy, muy grandes (demasiado grandes para caber en la memoria).
Noté esta publicación , que es similar, pero requiere una llamada de línea de comandos.
Respuestas:
Puede usar el método gdal.Dataset o gdal.Band ReadRaster. Consulte los tutoriales de la API de GDAL y OGR y el ejemplo a continuación. ReadRaster no utiliza / requiere numpy, el valor de retorno son datos binarios sin procesar y deben descomprimirse utilizando el módulo de estructura python estándar .
Un ejemplo:
Alternativamente, dado que la razón que dio para no usar
numpy
fue evitar leer toda la matriz al usarReadAsArray()
, a continuación se muestra un ejemplo que usanumpy
y no lee todo el ráster.fuente
px
/py
están equivocadas en el caso de que mx / my se encuentre fuera de los límites derb
, porqueint(-0.5) == 0
. Necesitafloor(...)
, y luego debe verificar que ninguno depx
/py
sea menor que cero (o hacerlo antes de llamarint()
), porque los índices negativos funcionan (obtienen el otro lado de la matriz). Me encantaría saber si hay una forma más ordenada de lidiar con este problema. Además, ¿cómo reescribe esas líneas para que se ocupen correctamente de las rotaciones?