python FY-3D MWRI亮温每轨影像hdf转tif
FY-3D MWRI亮温数据包含单独的经纬度数据集和亮温数据集(维度大小一样),需要把HDF数据转成0.1度的WGS84 tif数据。
方法:gdal.Translate + gdal.Warp
1. 先使用gdal.Translate 函数构建VRT文件
gdal.Translate(vrtDir, subDataset, format='vrt')
X_DATASET
Y_DATASET
lines = [] with open(vrtDir, 'r') as f: for line in f: lines.append(line) lines.insert(1, '<Metadata domain="GEOLOCATION">\n') lines.insert(2, ' <MDI key="LINE_OFFSET">1</MDI>\n') lines.insert(3, ' <MDI key="LINE_STEP">1</MDI>\n') lines.insert(4, ' <MDI key="PIXEL_OFFSET">1</MDI>\n') lines.insert(5, ' <MDI key="PIXEL_STEP">1</MDI>\n') lines.insert(6, ' <MDI key="SRS">GEOGCS["WGS84",DATUM["WGS_1984",SPHEROID["WGS84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],' 'TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],' 'UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4326"]]</MDI>\n') lines.insert(7, ' <MDI key="X_BAND">1</MDI>') lines.insert(8, ' <MDI key="X_DATASET">HDF5:"{}"://GEOLOCATION/Longitude</MDI>\n'.format(geo_file)) lines.insert(9, ' <MDI key="Y_BAND">1</MDI>\n') lines.insert(10, ' <MDI key="Y_DATASET">HDF5:"{}"://GEOLOCATION/Latitude</MDI>\n'.format(geo_file)) lines.insert(11, '</Metadata>\n') if 'GEO' in vrtDir and 'vrt' in vrtDir: with open(vrtDir, 'w') as f: for line in lines: f.writelines(line)
但需要注意的是,FY-3D MWRI文件中经纬度数据存在填充值65535,这样会导致后面gdal.Warp转换出错,所以需要去掉经纬度数据集中的填充值后,再将其写入VRT文件。
# 删除65535所在的行
data = h5py.File(inputfile) Lon_set = data['Geolocation/Longitude'] lon = Lon_set[:, :] lon = np.where(lon == 65535, np.nan, lon) lon_xin = lon[~np.isnan(lon).any(axis=1)] Lat_set = data['Geolocation/Latitude'] lat = Lat_set[:, :] lat = np.where(lat == 65535, np.nan, lat) lat_xin = lat[~np.isnan(lat).any(axis=1)]
# 将修改后的经纬度矩阵写入新HDF
with h5py.File(geofile, 'w') as hf:
hf.create_dataset("lon-dataset", data=lon_xin)
hf.create_dataset("lat-dataset", data=lat_xin)
hf.create_dataset("lon-dataset", data=lon_xin)
hf.create_dataset("lat-dataset", data=lat_xin)
然后将包含修改后经纬度的写入VRT文件,即修改X_DATASET
和Y_DATASET
lines.insert(8, ' <MDI key="X_DATASET">HDF5:"{}"://lon-dataset</MDI>\n'.format(geo_file)) lines.insert(10, ' <MDI key="Y_DATASET">HDF5:"{}"://lat-dataset</MDI>\n'.format(geo_file))
2. 使用gdal.Warp 函数进行几何校正
VrtData = gdal.Warp(tiff_file, vrtDir, dstNodata=-32768, format='GTiff', geoloc=True, outputType=dst_dtype, resampleAlg=resample_alg, xRes=Res_x, yRes=Res_y)
参考:https://blog.csdn.net/tk20190411/article/details/108547883
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理