J'essaie de déterminer la quantité de vapeur d'eau précipitable (PWV), d'ozone et d'aérosols en fonction du temps sur des points spécifiques de la Terre, à savoir nos observatoires astronomiques. Pour ce faire, j'ai déjà du code Python modapsclient
qui télécharge les produits MODIS Aqua et Terra MYDATML2 et MODATML2 deux fois par jour qui couvrent la latitude et la longitude spécifiques qui m'intéressent.
Ce que je ne sais pas, c'est comment extraire les quantités spécifiques que je veux, telles que l'heure à laquelle les données MODIS ont été prises et PWV pour la position particulière de latitude et de longitude de mon observatoire pour en faire une série temporelle de valeurs. Les produits MYDATML2 semblent contenir des grilles de latitude et de longitude 2D Cell_Along_Swath_5km
et Cell_Across_Swath_5km
donc je suppose que cela en fait des données en andains plutôt que des données de mosaïque ou de grille? Les quantités que je veux telles que Precipitable_Water_Infrared_ClearSky
semblent également être contre Cell_Along_Swath_5km
et mais Cell_Across_Swath_5km
je ne sais pas comment obtenir cette valeur PWV au lat spécifique, longtemps je suis intéressé. Aide s'il vous plaît?
la source
Réponses:
[EDIT 1 - J'ai changé la recherche de coordonnées de pixels]
En utilisant cet exemple de MODATML que vous avez fourni et en utilisant la bibliothèque gdal. Ouvrons le hdf avec gdal:
Ensuite, nous voulons voir comment les sous-jeux de données sont nommés afin d'importer correctement ceux dont nous avons besoin:
Cela renvoie un dictionnaire:
Disons que nous voulons obtenir la première variable, l'épaisseur optique du nuage, nous pouvons accéder à son nom par:
Maintenant, nous pouvons charger la variable en mémoire en appelant à nouveau la méthode .Open ():
Par exemple, vous pouvez accéder à Precipitable_Water_Infrared_ClearSky qui vous intéresse en fournissant «SUBDATASET_20_NAME». Jetez un œil au dictionnaire datasets_meta.
Cependant, la variable extraite n'a pas de géoprojection (var.GetGeoprojection ()) comme vous vous en doutez pour d'autres types de fichiers tels que GeoTiff. Vous pouvez charger la variable sous forme de tableau numpy et tracer la variable 2d sans projection:
Maintenant, puisqu'il n'y a pas de géoprojection, nous allons examiner les métadonnées de la variable:
Ceci est un autre dictionnaire qui comprend toutes les informations dont vous avez besoin, y compris une longue description du sous-échantillonnage (j'ai remarqué que cela n'est fourni qu'avec le premier sous-ensemble de données), qui comprend l'explication de ces Cell_Along_Swath:
Je pense que cela signifie que sur la base de ces pixels de 1 km, le 5 km a été construit en prenant exactement les valeurs des pixels à une certaine position dans le tableau de détection 5x5 (la position est indiquée dans les métadonnées, je pense que c'est une chose instrumentale pour réduire les défauts).
Quoi qu'il en soit, à ce stade, nous avons un tableau de cellules de 1x1 km (voir la description du sous-échantillonnage ci-dessus, pas sûr de la science derrière). Pour obtenir les coordonnées de chaque pixel centroïde, nous devons charger les sous-jeux de latitude et de longitude.
Par exemple,
Vous pouvez remarquer que les coordonnées Latitude et Longitude sont différentes pour chaque pixel.
Supposons que votre observatoire se trouve aux coordonnées lat_obs, long_obs, puis minimisez la différence de coordonnées x, y:
et extrayez votre valeur
la source
Longitude_px
etLatitude_px
sont à la fois des tableaux de longueur nulle. Existe-t-il également un moyen de gérer la conversion en utilisantgdal
lui-même? (plutôt que de s'appuyer sur une approximation de 1 degré, il y a X nombre de miles et ensuite de la rapprocher en km)