Extrair dados do NetCDF usando um polígono de shapefile em Python [duplicado]

11

Preciso agrupar dados de um NetCDF usando um shapefile específico. Os dados são temperatura da superfície do mar e cor do oceano com resolução de 1/4 de grau. Eu tenho 4 polígonos descrevendo os EUA. Grande ecossistema marinho da plataforma continental nordeste e seus subcomponentes que eu preciso usar para extrair os dados. Estou trabalhando com arquivos compostos mensais de 1982 a 2014, portanto essa rotina de extração de dados precisa ser automatizada. Os arquivos já estão subconjuntos na grade aproximada da área de trabalho de [35, 45, -80, -60].

insira a descrição da imagem aqui

Anteriormente, estávamos convertendo arquivos de dados HDF5 em rasters em R e processando-os dessa maneira, mas esse método é realmente ineficiente e tenho certeza de que existe uma solução melhor em Python usando os arquivos NetCDF atuais.

Até agora, tenho usado GDAL e Fiona para ler os shapefiles e o NetCDF4 para carregar os arquivos de dados. Não sei ao certo como definir subconjuntos de dados. Eu achei isto:

GDAL para Python: extraindo subdomínios do arquivo NetCDF?

Mas não tenho a menor idéia de como subconjunto de um arquivo NetCDF usando algo além de uma simples caixa delimitadora, que esses polígonos certamente não são.

O ponto nas rotinas poligonais provavelmente levaria uma eternidade para funcionar, mas talvez eu pudesse subconjunto dos dados usando uma caixa delimitadora menor que é rotacionada para se ajustar a essas formas como este como ponto de partida inicial e, em seguida, faça uma pesquisa point-in-poly:

Subconfigurando um arquivo netCDF curvilíneo (saída do modelo ROMS) usando uma caixa delimitadora lon / lat.

Alguma ideia?

EDIT 1:

Acabei de me deparar com o pacote OpenClimateGIS, que parece que ele se encaixa perfeitamente ... Vou tentar isso para ver se consigo fazê-lo funcionar: http://ncpp.github.io/ocgis/examples. html # subconjunto avançado

Ryan
fonte
Seu último elo Editar 1 parece ser dead.This parece ser o melhor substituto: earthsystemcog.org/projects/openclimategis
Aaron

Respostas:

1

Isso pode ser adaptável às suas necessidades.

Se você não se importa de chamar a linha de comando do python, pode fazer algo assim gdalwarp -cutline clip.shp -cl clip -crop_to_cutline input_raster output_raster_clipped.tif. -cwheree -csqlpodem ser opções mais adequadas para selecionar um dos quatro polígonos para recorte.

elil
fonte
1

Dê uma olhada no seguinte: /programming/34585582/how-to-mask-the-specific-array-data-based-on-the-shapefile

O que você deseja ter em mente é que, depois de carregar o NetCDF, você estará trabalhando com uma matriz NumPy.

O que você está tentando produzir? Estatísticas resumidas com base nas áreas de polígonos?

De qualquer forma, aqui está o que eu faria:

  1. Carregue seu shapefile e coloque suas áreas em um formato suportado (apontar para o processo de máscara matplotlib no link acima parece bom)
  2. Carregue seu arquivo NetCDF e obtenha os dados em uma única matriz numpy X, Y, T
  3. Mascarar essa matriz usando os polígonos (um de cada vez?)
  4. Exporte suas estatísticas de resumo.
Alex Leith
fonte