Extrahieren Sie Daten aus netcdf mithilfe eines Shapefile-Polygons in Python

11

Ich muss Daten aus einer NetCDF mit einem bestimmten Shapefile unterteilen. Die Daten sind die Meeresoberflächentemperatur und die Ozeanfarbe bei einer Auflösung von 1/4 Grad. Ich habe 4 Polygone, die die USA beschreiben. Großes marines Ökosystem im nordöstlichen Festlandsockel und seine Unterkomponenten, die ich zum Extrahieren der Daten verwenden muss. Ich arbeite mit monatlichen zusammengesetzten Dateien von 1982 bis 2014, daher muss diese Datenextraktionsroutine automatisiert werden. Die Dateien sind bereits auf das ungefähre Arbeitsbereichsraster von [35, 45, -80, -60] untergeordnet.

Geben Sie hier die Bildbeschreibung ein

Früher haben wir HDF5-Datendateien in Raster in R konvertiert und auf diese Weise verarbeitet, aber diese Methode ist wirklich ineffizient, und ich bin sicher, dass es in Python eine bessere Lösung gibt, wenn die aktuellen NetCDF-Dateien verwendet werden.

Bisher habe ich GDAL und Fiona zum Einlesen der Formdateien und NetCDF4 zum Laden der Datendateien verwendet. Ich bin nicht sicher, wie ich die Daten unterteilen soll. Ich habe das gefunden:

GDAL für Python: Subdomains aus NetCDF-Datei extrahieren?

Aber ich habe nicht die geringste Ahnung, wie man eine netcdf-Datei mit etwas anderem als einem einfachen Begrenzungsrahmen unterordnet, was diese Polygone mit Sicherheit nicht sind.

Es würde wahrscheinlich eine Ewigkeit dauern, bis ein Punkt in Polygon-Routinen funktioniert, aber vielleicht könnte ich die Daten mithilfe eines kleineren Begrenzungsrahmens unterteilen, der gedreht wird, um diesen Formen wie diesem als Ausgangspunkt zu entsprechen, und dann eine Punkt-in-Poly-Suche durchführen:

Untersetzen einer krummlinigen netCDF-Datei (ROMS-Modellausgabe) unter Verwendung eines Lon / Lat-Begrenzungsrahmens.

Irgendwelche Ideen?

EDIT 1 :

Ich bin gerade auf das OpenClimateGIS-Paket gestoßen, das anscheinend perfekt zur Rechnung passt ... Ich werde es versuchen, um zu sehen, ob ich es zum Laufen bringen kann: http://ncpp.github.io/ocgis/examples. html # advanced-subsetting

Ryan
quelle
Ihr letzter Link in Edit 1 scheint tot zu sein. Dies scheint der beste Ersatz zu sein: earthsystemcog.org/projects/openclimategis
Aaron

Antworten:

1

Dies kann an Ihre Bedürfnisse angepasst werden.

Wenn es Ihnen nichts ausmacht, die Befehlszeile von Python aus aufzurufen, können Sie so etwas tun gdalwarp -cutline clip.shp -cl clip -crop_to_cutline input_raster output_raster_clipped.tif. -cwhereund -csqlmöglicherweise geeignetere gdalwarp-Optionen zum Auswählen eines der vier Polygone zum Ausschneiden.

elil
quelle
1

Schauen Sie sich das an: /programming/34585582/how-to-mask-the-specific-array-data-based-on-the-shapefile

Was Sie beachten möchten, ist, dass Sie nach dem Laden Ihrer NetCDF mit einem NumPy-Array arbeiten.

Was versuchst du auszugeben? Zusammenfassende Statistiken basierend auf den Polygonbereichen?

Jedenfalls würde ich Folgendes tun:

  1. Laden Sie Ihr Shapefile und bringen Sie Ihre Bereiche in ein unterstütztes Format (das Ziel des Matplotlib-Maskenprozesses im obigen Link klingt gut)
  2. Laden Sie Ihre NetCDF-Datei und übertragen Sie die Daten in ein einzelnes X-, Y- und T-Numpy-Array
  3. Maskieren Sie dieses Array mit den Polygonen (einzeln?)
  4. Exportieren Sie Ihre Zusammenfassungsstatistiken.
Alex Leith
quelle