Estoy tratando de determinar la cantidad de vapor de agua precipitable (PWV), ozono y aerosoles en función del tiempo sobre puntos específicos de la Tierra, es decir, nuestros observatorios astronómicos. Para hacer esto, ya tengo un código de Python modapsclient
que descargará los productos MODIS Aqua y Terra MYDATML2 y MODATML2 dos veces al día que cubren la latitud y longitud específicas que me interesan.
De lo que no estoy seguro es de cómo extraer las cantidades específicas que quiero, como la hora en que se tomaron los datos MODIS y PWV para la posición particular de latitud y longitud de mi observatorio para convertirlos en una serie de valores de tiempo. Los productos MYDATML2 parecen contener cuadrículas de latitud y longitud 2D Cell_Along_Swath_5km
y, Cell_Across_Swath_5km
por lo tanto, supongo que esto hace que los datos de franja sean opuestos a los datos de mosaico o cuadrícula. Las cantidades que quiero, como Precipitable_Water_Infrared_ClearSky
también parecen estar en contra de Cell_Along_Swath_5km
y, Cell_Across_Swath_5km
pero no estoy seguro de cómo obtener ese valor PWV en el lat específico, siempre que me interese. ¿Ayuda por favor?
fuente
Respuestas:
[EDITAR 1 - Cambié la búsqueda de coordenadas de píxeles]
Usando esta muestra de MODATML que proporcionó y usando la biblioteca gdal. Abramos el hdf con gdal:
Luego, queremos ver cómo se nombran los subdatasets para importar correctamente los que necesitamos:
Esto devuelve un diccionario:
Digamos que queremos obtener la primera variable, el grosor óptico de la nube, podemos acceder a su nombre de la siguiente manera:
Ahora podemos cargar la variable en la memoria llamando nuevamente. Método Open ():
Por ejemplo, puede acceder a Precipitable_Water_Infrared_ClearSky que le interesa proporcionando 'SUBDATASET_20_NAME'. Solo eche un vistazo al diccionario datasets_meta.
Sin embargo, la variable extraída no tiene una geoproyección (var.GetGeoprojection ()) como cabría esperar de otros tipos de archivos como GeoTiff. Puede cargar la variable como una matriz numpy y trazar la variable 2d sin proyección:
Ahora, como no hay geoproyección, analizaremos los metadatos de la variable:
Este es otro diccionario que incluye toda la información que necesita, incluida una descripción larga del submuestreo (noté que solo se proporciona con el primer subdataset), que incluye la explicación de estos Cell_Along_Swath:
Creo que esto significa que, en base a estos píxeles de 1 km, los 5 km se construyeron tomando exactamente los valores de píxeles en una determinada posición en la matriz de detección de 5x5 (la posición se indica en los metadatos, creo que esto es un instrumento para reducir las fallas).
De todos modos, en este punto tenemos una matriz de celdas de 1x1 km (ver descripción de submuestreo arriba, no estoy seguro de la ciencia detrás de esto). Para obtener las coordenadas de cada centroide de píxeles, necesitamos cargar los subdatasets de latitud y longitud.
Por ejemplo,
Puede notar que las coordenadas de latitud y longitud son diferentes para cada píxel.
Digamos que su observatorio está ubicado en las coordenadas lat_obs, long_obs, de modo que minimice la diferencia de coordenadas x, y:
y extrae tu valor
fuente
Longitude_px
yLatitude_px
son ambas matrices de longitud cero. ¿También hay una manera de manejar la conversión usándose agdal
sí misma? (en lugar de confiar en una aproximación de 1 grado es X no. de millas y luego volver a aproximar eso a km)