Estrai i dati da NetCDF usando un poligono shapefile in Python [duplicato]


11

Ho bisogno di sottoinsieme dei dati da un NetCDF usando uno shapefile specifico. I dati sono la temperatura della superficie del mare e il colore dell'oceano con una risoluzione di 1/4 gradi. Ho 4 poligoni che descrivono gli Stati Uniti. Piattaforma continentale nord-orientale, grande ecosistema marino ed elementi secondari che devo utilizzare per estrarre i dati. Sto lavorando con file compositi mensili dal 1982 al 2014, quindi questa routine di estrazione dei dati deve essere automatizzata. I file sono già sottoimpostati nella griglia approssimativa dell'area di lavoro di [35, 45, -80, -60].

inserisci qui la descrizione dell'immagine

In precedenza, stavamo convertendo i file di dati HDF5 in raster in R ed elaborandoli in questo modo, ma questo metodo è davvero inefficiente e sono sicuro che esiste una soluzione migliore in Python utilizzando gli attuali file NetCDF.

Finora ho usato GDAL e Fiona per leggere gli shapefile e NetCDF4 per caricare i file di dati. Non sono sicuro di come effettuare il sottoimpostazione dei dati. Ho trovato questo:

GDAL per Python: estrarre sottodomini dal file NetCDF?

Ma non ho la più pallida idea di come sottoinsedire un file NetCDF usando qualcosa di diverso da un semplice riquadro di selezione, che sicuramente questi poligoni non lo sono.

Il punto nelle routine poligonali richiederebbe probabilmente un'eternità per funzionare, ma forse potrei sottoinsieme i dati usando un riquadro di selezione più piccolo che viene ruotato per adattarsi a queste forme come un punto iniziale iniziale e quindi fare una ricerca point-in-poly:

Sottoimpostazione di un file netCDF curvilineo (output del modello ROMS) utilizzando un rettangolo di selezione lon / lat.

Qualche idea?

MODIFICA 1:

Ho appena trovato il pacchetto OpenClimateGIS che sembra adattarsi perfettamente al conto ... Ci proverò per vedere se riesco a farlo funzionare: http://ncpp.github.io/ocgis/examples. html # avanzato subsetting


Il tuo ultimo link in Modifica 1 sembra essere morto. Questo sembra essere il miglior sostituto: earthsystemcog.org/projects/openclimategis
Aaron

Risposte:


1

Questo potrebbe essere adattabile alle tue esigenze.

Se non ti dispiace chiamare la riga di comando da Python, potresti fare qualcosa del genere gdalwarp -cutline clip.shp -cl clip -crop_to_cutline input_raster output_raster_clipped.tif. -cwheree -csqlpotrebbero essere le opzioni gdalwarp più appropriate per selezionare uno dei quattro poligoni per il ritaglio.


1

Dai un'occhiata a questo: /programming/34585582/how-to-mask-the-specific-array-data-based-on-the-shapefile

Quello che vuoi tenere a mente è che una volta caricato NetCDF, stai lavorando con un array NumPy.

Cosa stai provando a produrre? Statistiche riassuntive basate sulle aree poligonali?

Comunque, ecco cosa farei:

  1. Carica il tuo file di forma e ottieni le tue aree in un formato supportato (puntare al processo maschera matplotlib nel link sopra suona bene)
  2. Carica il tuo file NetCDF e ottieni i dati in un singolo array numpy X, Y, T.
  3. Maschera quell'array usando i poligoni (uno alla volta?)
  4. Esporta le tue statistiche di riepilogo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.