Gostaria de saber como obter todos os valores de varredura em um polígono usando gdal ou pygeoprocessing, sem ler toda a grade como uma matriz.
pygeoprocessing e gdal podem fazer estatísticas zonais, mas apenas o min, max, mean, stdev ou count estão disponíveis nessa função. Como as estatísticas zonais precisam acessar os valores, seria fácil extrair valores da mesma maneira?
Eu encontrei uma pergunta muito semelhante aqui: ( Obtendo valor de pixel da varredura GDAL sob o ponto OGR sem NumPy? ), Mas apenas para um "ponto" específico.
python
gdal
pygeoprocessing
egayer
fonte
fonte
Respostas:
Você pode usar o rasterio para extrair os valores do raster dentro de um polígono, como no GIS SE: GDAL, imagem de geotiff de corte python com arquivo geojson
Eu uso aqui um arquivo raster de uma banda e GeoPandas para o shapefile (em vez de Fiona)
O resultado out_image é um array mascarado Numpy
Agora eu uso Como obter as coordenadas de uma célula em um geotif? ou Python affine transforma para transformar entre o pixel e as coordenadas projetadas com
out_transform
a transformação affine para os dados do subconjuntoCriação de um novo GeoDataFrame resultante com os valores de col, linha e elevação
fonte
geoms = [mapping(geoms[0])]
vez de apenasgeoms[0]
?mapping(geoms[0])
= Formato GeoJSON da geometriadata = out_image.data[0]
jogoumulti-dimensional sub-views are not implemented
para mim, masdata = out_image[0,:,:]
funcionou. Esta é uma solução alternativa menos eficiente ou problemática? Alguma idéia de por que teria falhado como está escrito?Se você tiver problemas usando o rasterio no mesmo script que o gdal, eu estava testando o pygeoprocessing (também usa formas bem torneadas) e descobri uma solução alternativa. O script completo (com caminhos para minhas camadas) é o seguinte:
Depois de executá-lo, obtive:
onde os valores de amostragem raster foram os esperados em cada ponto e incorporados à camada de pontos.
fonte