You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python将MCD19A2气溶胶HDF数据3D数组转换为带坐标的DataFrame

MCD19A2栅格数组转带坐标DataFrame Python实现

承接你已有的代码,不需要生成临时TIFF文件,直接基于GDAL读取的地理变换参数和数组即可完成转换,全程在内存中处理,内存占用远低于R语言方案。

# 承接你已有的代码
from osgeo import gdal, osr
import pandas as pd
import numpy as np

# 你已完成的读取步骤
rds = gdal.Open("MCD19A2.A2006001.h26v04.006.2018036214627.hdf")
names = rds.GetSubDatasets()
aod_047 = gdal.Open(names[0][0])
a47 = aod_047.ReadAsArray()
# 取你需要的时间/轨道切片,这里取索引为1的切片
target_aod = a47[1]
n_rows, n_cols = target_aod.shape

# 1. 获取栅格地理变换参数
gt = aod_047.GetGeoTransform()
# gt参数顺序:左上角X坐标、X方向分辨率、旋转系数、左上角Y坐标、旋转系数、Y方向分辨率(通常为负)

# 2. 生成所有像素的投影坐标
x_coords = gt[0] + np.arange(n_cols) * gt[1]
y_coords = gt[3] + np.arange(n_rows) * gt[5]
xx, yy = np.meshgrid(x_coords, y_coords)

# 3. 展平数组拼接为DataFrame
df = pd.DataFrame({
    "X (n=1200)": xx.flatten(),
    "Y (n=1200)": yy.flatten(),
    "AOD_047": target_aod.flatten()
})

# 可选:过滤MCD19A2默认填充值-28672,去除无效观测
df = df[df["AOD_047"] != -28672].reset_index(drop=True)

# 可选:如果需要转为WGS84经纬度坐标,增加以下投影转换代码
src_srs = osr.SpatialReference()
src_srs.ImportFromWkt(aod_047.GetProjection())
tgt_srs = osr.SpatialReference()
tgt_srs.ImportFromEPSG(4326)
# 适配GDAL 3+的坐标顺序
tgt_srs.SetAxisMappingStrategy(osr.OAMS_TRADITIONAL_GIS_ORDER)
transformer = osr.CoordinateTransformation(src_srs, tgt_srs)
coords = np.column_stack((xx.flatten(), yy.flatten()))
lon_lat = np.array(transformer.TransformPoints(coords))
df["lon"] = lon_lat[:, 0]
df["lat"] = lon_lat[:, 1]

1200*1200的栅格展开后共144万行数据,内存占用仅几十MB,不会出现内存溢出问题。

内容的提问来源于stack exchange,提问作者ay__ya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 02:24:01