pyModis开发(一)convertmodis_gdal module模块
pyModis是一个专门针对MODIS数据的开源python开发包。该开发包主要实现MODIS数据的批量下载和投影转换(正弦投影转其他投影等)、拼接、裁切、数据抽取等处理功能。对于MODIS数据的处理,MRT和Gdal是两个常用的工具和开发库。pyModis结合了两者,提供了多种处理方式。pyMODIS开发包库包含:downmodis module 、parsemodis module 、convertmodis module、convertmodis_gdal module 、qualitymodis module、optparse_required module 和
optparse_gui module 七个主要模块。
convertmodis_gdal module模块
利用python gdal库来转换MODISHDF文件。可以创建GeoTiff文件(或其他gdal支持的文件格式)或者多个带的HDF拼接文件。模块包括三个类和三个函数:
Classes:
- file_info
- createMosaicGDAL
- convertModisGDAL
Functions:
- getResampling()
- raster_copy()
- raster_copy_with_nodata()
convertModisGDAL类
convertModisGDAL(hdfname, prefix, subset, res, outformat="GTiff",
epsg=None, wkt=None, resampl='NEAREST_NEIGHBOR', vrt=False)
利用GDAL库将MODIS数据从hdf格式转换成GDAL格式,可以实现hdf的投影转换、子数据集(波段数据)抽取、格式转换、重采样等功能。
参数
- hdfname (str) – 输入数据的文件路径列表,list。
- prefix (str) – 输出数据的前缀
- subset (str) – 子数据集或者波段数据,可以是"(0 1 1)"类似的字符串(支持的字符串格式还包括:'011','0,1,1'等等),也可以是0,1,1的列表,0表示不需要处理,1表示处理。如果设为None,则表示对整个数据集里所有子集进行处理。
- res (int) – 输出分辨率,如果设置为0,则采用源数据的分辨率。
- outformat (str) – 输出格式字符串, GDAL支持的格式都可以,默认“GTiff“。
- epsg (int) – 输出文件投影的EPSG编码。
- wkt (str) – 输出文件投影的WKT字符串。
- resampl (str) – 重采样类型,默认为'NEAREST_NEIGHBOR',支持的重采样类型还包括:'AVERAGE', 'BILINEAR', 'CUBIC', 'CUBIC_SPLINE', 'LANCZOS','MODE'。
- vrt (bool) – 输入文件是否为通过createMosaicGDAL创建的GDAL VRT 文件,True为使用VRT文件,False为不使用VRT。注意,使用vrt时,只处理第一个子数据集(波段数据)。当需要处理VRT中的多个波段或子数据集时,该操作无效。
主要函数
run(quiet=False)
处理主函数,对已选图层(波段)子集进行重投影变换。如果vrt为True,程序会直接调用run_vrt_separated(),且只会处理vrt的第一个子数据集(波段数据)。
run_vrt_separated()
针对VRT文件的处理函数,对createMosaicGDAL创建的VRT文件进行重投影变换,对应的createMosaicGDAL类的函数write_vrt的参数separated设置为True。
用法示例
对MODIS数据进行多幅拼接
from pymodis import convertmodis_gdal
mosaic_g = createMosaicGDAL(self.__hdfs, self.__subset)
if mosaic_g is None:
return False
else:
mosaic_name_list = []
out_name_list = []
for k in list(mosaic_g.file_infos.keys()):
mosaic_names = "{pref}_{band}.vrt".format(pref=self.__mosaic_name, band=k)
out_names = "{pref}_{band}".format(pref=self.__outname, band=k)
mosaic_name_list.append(mosaic_names)
out_name_list.append(out_names)
if mosaic_g.write_vrt(self.__mosaic_name):
self.__mosaic_files = mosaic_name_list
self.__out_names = out_name_list
return True
else:
return False
createMosaicGDAL类
createMosaicGDAL(hdfnames, subset, outformat='HDF4Image')
利用GDAL拼接MODIS数据从hdf格式到GDAL支持的文件格式。
参数:
- hdfnames (list) – 待拼接的文件路径列表
- subset (str) – 待拼接的子集或波段数据,可以是"(0 1 1)"类似的字符串(支持的字符串格式还包括:'011','0,1,1'等等),也可以是0,1,1的列表,0表示不需要处理,1表示处理。如果设为None,则表示对整个数据集里所有子集进行处理。
- outformat (str) – 输出格式字符串,支持的格式包括:HDF4Image、GTiff、HFA,不支持VRT文件输出。
主要函数
run(output, quiet=False)
处理主函数,创建拼接处理过程。
参数
output (st) - 输出文件的名称。
write_mosaic_xml(prefix)
输出MODIS拼接的XML元数据文件。
参数
prefix(str) - 包含元数据的XML文件的名称前缀
write_vrt(output, separate=True, quiet=False)
输出VRT文件
参数
- output(str) - 输出文件的前缀
- separate(bool) - 是否为各个波段各自输出一个VRT文件,True表示为每个波段输出一个VRT文件,False表示输出到一个文件。
file_info类
GDAL文件信息类,该类拷贝自gdal_merge.py
参数
filename(str) - 待读取的文件名称列表
返回值
1表示成功,0表示文件无法打开
主要函数
copy_into(t_fh, s_band=1, t_band=1, nodata_arg=None)
将此文件映像复制到目标文件中。
这个方法将计算file_info对象文件和目标gdal的重叠区域。对象,并复制用于公共窗口区域的图像数据。假设这些文件在一个相同的投影中。不作检查或纠正。但是,如果目标文件的分辨率不同,或者图像像素类型不同,则会执行适当的重采样和转换(使用常规的GDAL提升/降级规则)。
参数
- t_fh – gdal.Dataset object for the file into which some or all of this file may be copied.
- s_band –
- t_band –
- nodata_arg –
返回值
1代表成功(或者不需要拷贝),0表示失败。
init_from_name(filename)
初始化
getResampling(res)函数
getResampling(res)
Return the GDAL resampling method
Parameters: res (str) – the string of resampling method
raster_copy函数
raster_copy(s_fh, s_xoff, s_yoff, s_xsize, s_ysize, s_band_n, t_fh, t_xoff, t_yoff, t_xsize, t_ysize, t_band_n, nodata=None)[source]¶
Copy a band of raster into the output file.
Function copied from gdal_merge.py
raster_copy_with_nodata函数
raster_copy_with_nodata(s_fh, s_xoff, s_yoff, s_xsize, s_ysize, s_band_n, t_fh, t_xoff, t_yoff, t_xsize, t_ysize, t_band_n, nodata)[source]
Copy a band of raster into the output file with nodata values.
Function copied from gdal_merge.py