Python与开源GIS:开始使用GDAL

Python与开源GIS:开始使用GDAL

2017-04-04 作者: bukun 浏览: 3720 次

摘要: 导入GDAL 在Python中使用GDAL,只需要导入gdal模块。在早期的版本中,GDAL是使用下面的语句导入的: import gdal 但是后来GDAL成为OSGEO的子项目后,对代码进行了重新组织。 在 RFC 17号文件中, 实现了Python的....

导入GDAL

在Python中使用GDAL,只需要导入gdal模块。在早期的版本中,GDAL是使用下面的语句导入的:

import gdal

但是后来GDAL成为OSGEO的子项目后,对代码进行了重新组织。 在 RFC 17号文件中, 实现了Python的新的名称空间osgeo,并将gdal与ogr都包含在这个名称空间之下。 现在推荐使用下面的语句导入:

from osgeo import gdal

当然早期版本也是支持的,但是在使用的时候会产生一个弃用警告:

>>> import gdal
/usr/lib/python2.6/dist-packages/osgeo/gdal.py:99: DeprecationWarning: gdal.py was placed in a namespace, it is now available as osgeo.gdal
DeprecationWarning)

为了保持兼容性,可以使用下面的语句来导入:

    >>> try:
      >     import gdal
      > except:
      >     from osgeo import gdal

除了gdal包,还有一个gdalconst包最好也导入。 gdalconst也是osgeo的一个包,它只是在代码中对GDAL中用到的一些常量进行了绑定。其中gdalconst中的常量都加了前缀,力图与其他模块冲突最小。 所以对gdalconst你可以直接这样导入:

    >>> from osgeo.gdalconst import *

驱动

要读取某种类型的数据,必须要先载入数据驱动,也就是初始化一个对象,让它“知道”某种数据结构。 可以使用下面语句一次性注册所有的数据驱动,但是只能读不能写:

    >>> gdal.AllRegister()

单独注册某一类型的数据驱动,这样的话可以读也可以写,可以新建数据集(这最终还要取决于GDAL是否已经进行了实现)。一些不同类型的数据驱动的编码,在表\ref {tab:gdaL_format}中已经介绍过了。 下面的语句注册了Erdas的栅格数据类型。

    >>> driver = gdal.GetDriverByName('HFA') 
    >>> driver.Register()

可以使用下面的语句判断driver是否注册成功。

    >>> driver = gdal.GetDriverByName('GeoTiff')
    >>> driver == True
    False

上面的注册就失败了,因为不存在名称为“GeoTiff”的数据格式(正确的格式为“GTiff”)。

查看系统支持的数据格式

除了使用GetDriverByName(), GDAL还可以使用GetDriver()来获得驱动。 下面的代码获取了系统支持的所有的驱动的名称。

    from osgeo import gdal
    drv_count = gdal.GetDriverCount()
    for idx in range(drv_count):
        driver = gdal.GetDriver(idx)
        print( "%10s: %s" % (driver.ShortName, driver.LongName))

上面第4行,直接使用了索引值来获得驱动,而在第5行则打印了驱动的名称。注意到驱动有ShortName与LongName。ShortName与栅格数据格式在GDAL中定义的编码是一致的,而LongName则可以看成是描述性的文字。 对于不同的Linux发行版,以及安装的GDAL的版本与编译选项的不同,上面程序的结果是不一样的。所以一般情况下要避免使用gdal.GetDriver()这个函数来获取驱动。 我使用的系统是Debian Squeeze,返回的驱动的个数是88。

随机推荐

Copyright © 2014-2019 OSGeo中国中心 吉ICP备05002032号

Powered by TorCMS