利用Arcpy与MATLAB实现HDF5文件批量转GeoTIFF文件

利用Arcpy与MATLAB实现HDF5文件批量转GeoTIFF文件

HDF5文件类似netCDF文件,具有多个数据层,是地球科学等领域的新型数据存储数据格式。但是如何实现在GIS软件中的显示以及处理,还存在一部分问题。此博文意在将HDF5文件处理为GIS软件中处理起来较为容易的栅格数据(GeoTIFF),具体处理步骤及流程,且看本文。
本次使用到的数据主要为GPM卫星降水数据,使用的主要软件为MATLAB以及ArcGIS中的Arcpy模块。

1. MATLAB中HDF5文件转换为文本文件

  for year = 2000:2016
     for mon=1:12
            if mon<10
                filename=['F:\GPM\3B-MO.MS.MRG.3IMERG.',int2str(year),'0',int2str(mon),'01-S000000-E235959.',...
                    '0',int2str(mon),'.V06B.HDF5'];
            else
                filename=['F:\GPM\3B-MO.MS.MRG.3IMERG.',int2str(year),int2str(mon),'01-S000000-E235959.',...
                    int2str(mon),'.V06B.HDF5'];
            end
            data = h5read(filename, '/Grid/precipitation');
            if mon<10
                filename_txt=['F:\GPM\3B-MO.MS.MRG.3IMERG.',int2str(year),'0',int2str(mon),'01-S000000-E235959.',...
                    '0',int2str(mon),'.V06B.txt'];
            else
                filename_txt=['F:\GPM\3B-MO.MS.MRG.3IMERG.',int2str(year),int2str(mon),'01-S000000-E235959.',...
                    int2str(mon),'.V06B.txt'];
            end
            dlmwrite(filename_txt,data,'\t',1,1);
     end
  end

此部分利用MATLAB将数据层的值转换为文本文件,此时得到的文本文件并不是可以直接在Arcpy中转换的ASCII文件,需要为每个文本文件添加行列数、左下角经纬度、Nodata的值和分辨率大小的参数,这就需要用到bash命令为每个文本文件添加上述参数,得到ASCII文本文件。bash代码如下:

copy /b 	"F:\GPM\header_file.txt"+"F:\GPM\3B-MO.MS.MRG.3IMERG.20000601-S000000-E235959.06.V06B.txt"	"F:\GPM\ASCII\3B-MO.MS.MRG.3IMERG.20000601-S000000-E235959.06.V06B.txt"
## 其余合并代码相同

行列坐标文件head_file.txt:
ncols 3600
nrows 1800
xllcorner -180
yllcorner -90
cellsize 0.1
NODATA_value -9999.9

注意:可以在panoply软件中查看行列数。

2. ArcPy中利用ASCII文件转换为GeoTIFF文件

import arcpy
import os

arcpy.env.workspace = os.getcwd()
txtpath = os.getcwd()
outpath = os.getcwd()
txts = os.listdir(txtpath)

try:
        for ascii in txts:
            print(ascii[:-4]

你可能感兴趣的:(遥感制图,matlab,python)