MODIS hdf数据批量转tif数据
Python GDAL 地学分析 MODIS hdf数据批量转tif数据
一、概况
MODIS即中分辨率成像光谱仪(Moderate-resolution Imaging Spectroradiometer,缩写MODIS)是美国宇航局研制大型空间遥感仪器,以了解全球气候的变化情况以及人类活动对气候的影响。
1998年MODIS机载模型器安装到EOS-AM(上午轨道)和PM(下午轨道)系列卫星上,从1999年12月正式向地面发送数据。MODIS是NASA地球行星使命计划中总数为15颗。
二、数据处理
MODIS数据一般以hdf格式存储,下面我们使用GDAL对hdf数据批量转为tif数据。
方法一:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from osgeo import gdal import os import glob # gdal打开hdf数据集 os.chdir("待处理数据的文件夹路径") file_list = glob.glob("*.hdf") for i in file_list: datasets = gdal.Open(i) # 获取hdf中的子数据集 SubDatasets = datasets.GetSubDatasets() Metadata = datasets.GetMetadata() # 打印元数据 for key,value in Metadata.items(): print('{key}:{value}'.format(key = key, value = value)) # 获取要转换的子数据集 data = datasets.GetSubDatasets()[0][0] Raster_DATA = gdal.Open(data) DATA_Array = Raster_DATA.ReadAsArray() print(DATA_Array) # 保存为tif TifName = "保存路径" geoData = gdal.Warp(TifName, Raster_DATA, dstSRS = 'EPSG:4326', format = 'GTiff', resampleAlg = gdal.GRA_Bilinear) del geoData
方法二:
from osgeo import gdal
from osgeo import osr
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# _*_ coding: utf-8 _*_ __author__ = 'ly' __date__ = '2024/02/22 10:30' # # import osr from osgeo import osr from osgeo import gdal def array2raster(newRasterfn, rasterOrigin, xsize, ysize, array): """ newRasterfn: 输出tif路径 rasterOrigin: 原始栅格数据路径 xsize: x方向像元大小 ysize: y方向像元大小 array: 计算后的栅格数据 """ cols = array.shape[1] # 矩阵列数 rows = array.shape[0] # 矩阵行数 originX = rasterOrigin[0] # 起始像元经度 originY = rasterOrigin[1] # 起始像元纬度 driver = gdal.GetDriverByName('GTiff') outRaster = driver.Create(newRasterfn, cols, rows, 1, gdal.GDT_Float32) # 括号中两个0表示起始像元的行列号从(0,0)开始 outRaster.SetGeoTransform((originX, xsize, 0, originY, 0, ysize)) # 获取数据集第一个波段,是从1开始,不是从0开始 outband = outRaster.GetRasterBand(1) outband.WriteArray(array) outRasterSRS = osr.SpatialReference() # 代码4326表示WGS84坐标 outRasterSRS.ImportFromEPSG(4326) outRaster.SetProjection(outRasterSRS.ExportToWkt()) outband.FlushCache() ds = gdal.Open('D:\python\modis\MOD03.A2023244.04201.hdf') subdatasets = ds.GetSubDatasets() print('Number of subdatasets: {}'.format(len(subdatasets))) for sd in subdatasets: print('Name: {0}\nDescription:{1}\n'.format(*sd)) ndvi_ds = gdal.Open(subdatasets[0][0]).ReadAsArray() dst_filename = "D:/python/modis/转换文件.tif" xsize = 0.0025 ysize = 0.0025 array2raster(dst_filename, [90, 75], xsize, ysize, ndvi_ds)
查看支持的格式:gdalinfo --formats
pip install --upgrade GDAL
,Best Wish 不负年华