Estou trabalhando em um modelo computacional da abundância de polinizadores selvagens em uma paisagem. O modelo em si está completo e agora estou lutando com uma etapa de pós-processamento.
Eu tenho a minha varredura de suprimento de polinizadores GDAL que se parece com isso (cores mais claras significam maior visitação do polinizador em um pixel):
E eu tenho um shapefile de pontos do OGR representando locais de amostra na paisagem:
Estou tentando executar algumas análises nos pixels sob esses pontos, mas, para fazer isso, preciso extrair o valor de um pixel sob um ponto.
É possível extrair o valor de um pixel em um ponto usando apenas OGR e GDAL através do Python? Eu preferiria evitar ler toda a varredura na memória ReadAsArray()
, pois meus rasters de saída são muito, muito grandes (muito grandes para caber na memória).
Notei este post , que é semelhante, mas requer uma chamada de linha de comando.
Respostas:
Você pode usar o método gdal.Dataset ou gdal.Band ReadRaster. Veja os tutoriais da API GDAL e OGR e o exemplo abaixo. O ReadRaster não usa / requer numpy, o valor de retorno são dados binários brutos e precisa ser descompactado usando o módulo de estrutura python padrão .
Um exemplo:
Como alternativa, como o motivo que você deu para não usar
numpy
foi para evitar a leitura de toda a matriz em usoReadAsArray()
, abaixo está um exemplo que usanumpy
e não lê toda a varredura.fonte
px
/py
estão erradas no caso em que mx / my está fora dos limites derb
, porqueint(-0.5) == 0
. Você precisafloor(...)
e, em seguida, precisa verificar se nenhum depx
/py
é menor que zero (ou o faz antes de chamarint()
), porque os índices negativos funcionam (eles ficam do outro lado da matriz). Gostaria muito de saber se existe uma maneira mais clara de lidar com esse problema. Além disso, como você reescreve essas linhas para que elas lidem corretamente com as rotações?