使用CDO将MODIS MCD12Q1土地覆盖数据从HDF转NetCDF
MODIS MCD12Q1 HDF转NetCDF格式实用方案
直接用GDAL转换(推荐)
MODIS MCD12Q1是分层HDF格式,GDAL可直接识别其子数据集:- 先查看文件包含的子数据集:
gdalinfo MCD12Q1.AYYYYDD.hXXvXX.061.YYYYMMDD.hdf - 提取目标子数据集转NetCDF,比如常用的IGBP土地覆盖类型(
LC_Type1):gdal_translate -of NetCDF HDF4_EOS:EOS_GRID:"MCD12Q1.AYYYYDD.hXXvXX.061.YYYYMMDD.hdf":MOD12Q1:LC_Type1 output.nc - 如需重投影或调整分辨率,添加对应参数,比如转WGS84投影+0.01°分辨率:
gdal_translate -of NetCDF -t_srs EPSG:4326 -tr 0.01 0.01 HDF4_EOS:EOS_GRID:"MCD12Q1.AYYYYDD.hXXvXX.061.YYYYMMDD.hdf":MOD12Q1:LC_Type1 output_wgs84.nc
- 先查看文件包含的子数据集:
修正CDO命令用法
你之前使用的-import_cmsaf是针对CMSAF专属产品的,不适用于MODIS数据,正确流程如下:- 先用GDAL转成临时NetCDF文件:
gdal_translate -of NetCDF HDF4_EOS:EOS_GRID:"MCD12Q1.AYYYYDD.hXXvXX.061.YYYYMMDD.hdf":MOD12Q1:LC_Type1 temp.nc - 再用CDO完成重采样等操作:
cdo -f nc remapbil,r360x180 temp.nc output_resampled.nc
- 先用GDAL转成临时NetCDF文件:
批量处理脚本
若有大量HDF文件,可使用bash脚本批量转换:for hdf in MCD12Q1*.hdf; do out_nc="${hdf%.hdf}.nc" gdal_translate -of NetCDF HDF4_EOS:EOS_GRID:"$hdf":MOD12Q1:LC_Type1 "$out_nc" cdo remapbil,r360x180 "$out_nc" "${out_nc%.nc}_resampled.nc" done
内容的提问来源于stack exchange,提问作者JAGRITI JAIN
相关产品推荐
相关产品推荐

