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数据。

方法一:

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
View Code

 方法二:

from osgeo import gdal
from osgeo import osr

# _*_ 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)
View Code

查看支持的格式:gdalinfo --formats

 pip install --upgrade GDAL

 

posted @ 2024-02-21 15:20  有翅膀的大象  阅读(179)  评论(0编辑  收藏  举报