MCD19A2大气遥感数据处理

有没有人会处理MCD19A2数据的啊?批量处理,将时间、aod、aodqa、经纬度读取出来。本人刚研一,最近也是刚刚了解数据结构,python基础几乎为零,从网上找代码学习也只是稀里糊涂的。时间是读取Oribt_time_stamp里面的。

img

题主你好,我新写了篇文章看不知道能否帮到你,是用PYTHON 处理 MCD19A2(C6),文章链接:http://t.csdn.cn/ZX35B
目前已经出了C6.1产品精度应该会有较大的提升(https://lpdaac.usgs.gov/products/mcd19a2v061/

不知道您是否使用GEE,GEE可以不用下载繁多的数据直接在服务器云端上处理速度比自己批量处理要快的多,以下为GEE代码示例:

//所选区域范围 
var Bounds = 
    ee.Geometry.Polygon(
         [[[53.39306671552197, 54.598371442447],
          [53.39306671552197, 0.7485052185944432],
          [163.08056671552197, 0.7485052185944432],
          [163.08056671552197, 54.598371442447]]], null, false);
var MAIAC_ImageCollection = ee.ImageCollection('MODIS/006/MCD19A2_GRANULES')//选择数据集
      .filterDate("2022-01-01", "2022-01-02")//日期筛选
      .filter(ee.Filter.eq('SATELLITE','A'))   //T代表Terra A 代表 Aqua
      .filterBounds(Bounds);//区域范围筛选

var QA_MAIAC_ImageCollection = MAIAC_ImageCollection.map(function(img) {
  //质量筛选
  //bitmask质量筛选函数
  function bitwiseExtract(value, fromBit, toBit) {
    if (toBit === undefined) toBit = fromBit
    var maskSize = ee.Number(1).add(toBit).subtract(fromBit)
    var mask = ee.Number(1).leftShift(maskSize).subtract(1)
    return value.rightShift(fromBit).bitwiseAnd(mask)
  }
  //QA筛选
  var qa = img.select("AOD_QA");//选择QA波段
  var aod550=img.select('Optical_Depth_055').multiply(0.001)//乘以比例因子
  var qamask=bitwiseExtract(qa,8,11).eq(0)//8-11位等于0的也就是 Bits 8-11: QA for AOD  0: Best quality 最好质量的 GEE可以在数据集里查找
  var Best_Aod550=aod550.updateMask(qamask).rename("Best_Aod550")//掩膜提取
  //addband 增加波段
  img=img.addBands(Best_Aod550)
  return img
})
print(QA_MAIAC_ImageCollection)
Map.addLayer(QA_MAIAC_ImageCollection.select('Best_Aod550').mean(), {min: 0,max: 1,palette: ['black', 'blue', 'purple', 'cyan', 'green', 'yellow', 'red']}, 'Best_Aod550');//添加地图显示

要使用Python处理MCD19A2数据,您需要遵循以下步骤:

安装必要的Python库:numpy、h5py和pandas。您可以使用以下命令来安装它们:

pip install numpy h5py pandas

下载MCD19A2数据。您可以从NASA的Land Processes Distributed Active Archive Center(LP DAAC)网站上下载数据。请确保您已经注册了LP DAAC账户,并且已经授权以访问该数据。
了解数据的结构和内容。MCD19A2数据是以HDF格式存储的,包含多个数据集和元数据。您可以使用h5py库来读取和处理HDF格式的数据。
编写Python脚本来批量处理数据。您需要使用Python中的循环语句和条件语句来处理多个文件,并将时间、AOD、AODQA和经纬度等数据读取到pandas数据帧中。
以下是一个示例Python脚本,用于读取MCD19A2数据中的时间、AOD、AODQA和经纬度数据:

import h5py
import pandas as pd
import numpy as np
import os

# 设置输入文件夹和输出文件夹路径
input_folder = "path/to/input/folder"
output_folder = "path/to/output/folder"

# 获取输入文件夹中的所有HDF文件名
file_names = os.listdir(input_folder)
file_names = [f for f in file_names if f.endswith('.hdf')]

# 遍历所有HDF文件,并读取时间、AOD、AODQA和经纬度数据
for file_name in file_names:
    # 打开HDF文件并读取数据
    with h5py.File(os.path.join(input_folder, file_name), 'r') as f:
        # 读取AOD数据集
        aod = f['AOD'][:]
        aod = np.ma.masked_where(aod == -9999.0, aod)
        # 读取AODQA数据集
        aodqa = f['AOD_QA'][:]
        aodqa = np.ma.masked_where(aodqa == -9999.0, aodqa)
        # 读取经纬度数据集
        lat = f['Latitude'][:]
        lon = f['Longitude'][:]
        # 读取时间元数据
        time = f['/MODIS_SWATH_Type_GEO/Data_Fields/DateTime'][:]

    # 创建pandas数据帧,并将数据添加到其中
    data = pd.DataFrame()
    data['time'] = pd.to_datetime(time)
    data['aod'] = aod.flatten()
    data['aodqa'] = aodqa.flatten()
    data['lat'] = lat.flatten()
    data['lon'] = lon.flatten()

    # 将数据保存为CSV文件
    output_file_name = os.path.splitext(file_name)[0] + '.csv'
    output_file_path = os.path.join(output_folder, output_file_name)
    data.to_csv(output_file_path, index=False)

这只是一个简单的示例脚本,可能需要根据您的具体数据和需求进行调整。

可参考这个教程:遥感数据处理之MCD19A2数据的处理

该回答引用GPTᴼᴾᴱᴺᴬᴵ
MCD19A2是MODIS卫星观测到的气溶胶光学厚度(AOD)产品,数据格式为HDF,可以使用HDFView或h5py库来读取。以下是一个读取MCD19A2 HDF数据中时间、AOD、AODQA、经度和纬度的示例:

import h5py
import numpy as np

# 定义HDF文件路径
file_path = 'MCD19A2.A2019124.h28v05.006.2019148122854.hdf'

# 打开HDF文件
with h5py.File(file_path, 'r') as f:
    # 读取数据集
    aod = np.array(f['/HDFEOS/GRIDS/MODIS_Grid_Daily_1km_VAOD/Data Fields/AOD_550_Dark_Target_Deep_Blue_Combined'])
    aodqa = np.array(f['/HDFEOS/GRIDS/MODIS_Grid_Daily_1km_VAOD/Data Fields/AOD_550_Dark_Target_Deep_Blue_Combined_QA_Flag'])
    lat = np.array(f['/HDFEOS/GRIDS/MODIS_Grid_Daily_1km_VAOD/Data Fields/Latitude'])
    lon = np.array(f['/HDFEOS/GRIDS/MODIS_Grid_Daily_1km_VAOD/Data Fields/Longitude'])
    time = np.array(f['/HDFEOS/GRIDS/MODIS_Grid_Daily_1km_VAOD/Data Fields/Orbit_time_stamp'])

# 将时间戳转换为日期时间
time = np.array([np.datetime64('1993-01-01') + np.timedelta64(int(x), 's') for x in time])

# 输出结果
print('AOD shape:', aod.shape)
print('AODQA shape:', aodqa.shape)
print('Latitude shape:', lat.shape)
print('Longitude shape:', lon.shape)
print('Time shape:', time.shape)


这里使用了numpy和h5py库来读取MCD19A2 HDF数据中的AOD、AODQA、经度、纬度和时间。其中,aod、aodqa、lat和lon是4维数组,分别表示AOD值、AODQA值、经度和纬度。time是1维数组,表示时间戳。可以根据实际需求,将时间戳转换为日期时间,例如上面的示例将时间戳转换为日期时间。