pyModis开发(一)convertmodis_gdal module模块

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342