Ich versuche, die Menge an ausfällbarem Wasserdampf (PWV), Ozon und Aerosolen als Funktion der Zeit an bestimmten Stellen auf der Erde zu bestimmen, nämlich an unseren astronomischen Observatorien. Zu diesem modapsclient
Zweck habe ich bereits Python-Code, mit dem die zweimal täglichen Produkte MODIS Aqua und Terra MYDATML2 und MODATML2 heruntergeladen werden, die den spezifischen Breiten- und Längengrad abdecken, an dem ich interessiert bin.
Ich bin mir nicht sicher, wie ich die gewünschten Größen extrahieren soll, z. B. die Zeit, zu der die MODIS-Daten erfasst wurden, und die PWV für die jeweilige Längen- und Breitengradposition meines Observatoriums, um sie in eine Zeitreihe von Werten umzuwandeln. Die MYDATML2-Produkte scheinen 2D-Breiten- und Längengradgitter von zu enthalten, Cell_Along_Swath_5km
und Cell_Across_Swath_5km
ich denke, dies macht es zu Schwaddaten im Gegensatz zu Kachel- oder Gitterdaten? Die Mengen ich so will wie Precipitable_Water_Infrared_ClearSky
scheinen auch gegen die zu sein Cell_Along_Swath_5km
und Cell_Across_Swath_5km
butI'm nicht sicher , wie den PWV Wert an den spezifischen bekommen lat, long Ich bin an. Hilfe bitte?
quelle
Antworten:
[EDIT 1 - Ich habe die Pixelkoordinatensuche geändert]
Unter Verwendung dieser Probe von MODATML dass Sie zur Verfügung gestellt und gdal Bibliothek. Öffnen wir das hdf mit gdal:
Dann wollen wir sehen, wie die Subdatasets benannt sind, um die benötigten Subdatensätze korrekt zu importieren:
Dies gibt ein Wörterbuch zurück:
Angenommen, wir möchten die erste Variable, die optische Dicke der Wolke, erhalten. Wir können auf ihren Namen zugreifen, indem wir:
Jetzt können wir die Variable erneut in den Speicher laden .Open () -Methode:
Sie können beispielsweise auf Precipitable_Water_Infrared_ClearSky zugreifen, an dem Sie interessiert sind, indem Sie 'SUBDATASET_20_NAME' angeben. Schauen Sie sich einfach das Wörterbuch datasets_meta an.
Die extrahierte Variable verfügt jedoch nicht über eine Geoprojektion (var.GetGeoprojection ()), wie Sie es von anderen Dateitypen wie GeoTiff erwarten würden. Sie können die Variable als Numpy-Array laden und die 2d-Variable ohne Projektion zeichnen:
Da es keine Geoprojektion gibt, werden wir die Metadaten der Variablen untersuchen:
Dies ist ein weiteres Wörterbuch, das alle Informationen enthält, die Sie benötigen, einschließlich einer langen Beschreibung der Unterabtastung (ich habe festgestellt, dass dies nur mit dem ersten Unterdatensatz bereitgestellt wird), die die Erläuterung dieser Cell_Along_Swath enthält:
Ich denke, dies bedeutet, dass basierend auf diesen 1 km-Pixeln die 5 km erstellt wurden, wobei genau die Pixelwerte an einer bestimmten Position im 5x5-Erfassungsarray verwendet wurden (die Position wird in den Metadaten angegeben, ich denke, dies ist ein Instrument, um Fehler zu reduzieren).
Jedenfalls haben wir zu diesem Zeitpunkt eine Reihe von Zellen 1x1 km (siehe Beschreibung der Unterabtastung oben, nicht sicher über die Wissenschaft dahinter). Um die Koordinaten jedes Pixelschwerpunkts zu erhalten, müssen die Unterdatensätze für Breite und Länge geladen werden.
Beispielsweise,
Möglicherweise stellen Sie fest, dass die Längen- und Breitengradkoordinaten für jedes Pixel unterschiedlich sind.
Angenommen, Ihr Observatorium befindet sich an den Koordinaten lat_obs, long_obs, als Sie die Differenz der x- und y-Koordinaten minimieren:
und extrahieren Sie Ihren Wert
quelle
Longitude_px
undLatitude_px
sind beide Arrays mit der Länge Null. Gibt es auch eine Möglichkeit, die Konvertierunggdal
selbst durchzuführen? (anstatt sich auf eine Annäherung von 1 Grad zu verlassen, ist X