我想,将名为“MAM35S0.A2008010.0000.002.2008010173218.hdf”(MODIS Aqua产品)的文件转换为GTiff格式。
数据表是“HDF4_EOS:EOS_SWATH:”MAM35S0.A2008010.0000.002.2008010173218.hdf”:mod35:Cloud_Mask”,但是使用API无法正常转换,所以我使用了命令。
from osgeo import gdal
import numpy as np
import os
import subprocess
def run(base_dir:str=os.path.dirname(os.path.abspath(__file__)), hdf_file:str=None, src_dataset:str=None, proj=None):
cmd:str = None
abs_hdf_file:str = os.path.join(base_dir, hdf_file)
name, exit = os.path.splitext(hdf_file)
geotiff_file:str = "{0}_temp.tif".format(name)
abs_geotiff_file:str = os.path.join(base_dir, geotiff_file)
dataset = gdal.Open(abs_hdf_file, gdal.GA_ReadOnly)
metadata = dataset.GetMetadata()
geo_longs:list = metadata['GRINGPOINTLONGITUDE.1'].split(', ')
geo_lats:list = metadata['GRINGPOINTLATITUDE.1'].split(', ')
upper_long:str = geo_longs[0]
upper_lat:str = geo_lats[0]
lower_long:str = geo_longs[3]
lower_lat:str = geo_lats[3]
type:str = "Int16"
if src_dataset is None: src_dataset:str = dataset.GetSubDatasets()[5][0]
cmd = "gdal_translate -a_srs EPSG:4326 -ot {type} -b 1 -a_ullr {ulx} {uly} {rlx} {rly} -of GTiff {src_dataset} {dst_dataset} -a_nodata {value}".format(type=type, value=np.nan, ulx=upper_long, uly=upper_lat, rlx=lower_long, rly=lower_lat, src_dataset=src_dataset, dst_dataset=abs_geotiff_file)
result = subprocess.run(cmd.split(), capture_output=True)
dataset = None
if __name__=="__main__" :
run(hdf_file="MAM35S0.A2008010.0000.002.2008010173218.hdf", src_dataset='HDF4_EOS:EOS_SWATH:"MAM35S0.A2008010.0000.002.2008010173218.hdf":mod35:Cloud_Mask')
不过上传到cesium ion看到结果还是很惊喜
图像左右颠倒投影。如果有人对这种现象有经验或知识,请帮忙!
我还考虑通过复制 gdal_translate 命令来添加 gcp 信息。
但是还是不行,我怀疑是投影的问题,所以尝试了几种不同的投影,还是没有成功。
我想把MODIS传感器的HDF文件转换成GeoTiff,这样就可以像铯离子一样正常投影到GIS上了