Python与开源GIS:获取图层信息

Python与开源GIS:获取图层信息


发布日期: 2017-10-22 更新日期: 2019-10-28 编辑:xuzhiping 浏览次数: 9156

标签:

摘要: Python与开源GIS教程的内容,开发了单独的内容,请打开 https://www.osgeo.cn/pygis/ 查看。 本页面的内容不再更新。 图层的概念 这里首先解释一下图层(Layer)的概念。 在GIS中,Layer 是指是一个由...

Python与开源GIS教程的内容,开发了单独的内容,请打开 https://www.osgeo.cn/pygis/ 查看。
本页面的内容不再更新。



图层的概念

这里首先解释一下图层(Layer)的概念。 在GIS中,Layer 是指是一个由同种要素(Feature,如点、线、多边形等) 组合在一起的“层”。这个概念,ESRI在ArcGIS中定义的模 型中的要素类(FeatureClass)。 在《Modeling our World》 中,对这两个概念有明确的阐述:

  1. 要素数据集(要素集):是具有相同坐标系统的要素类的集合。 我们可以选择在要素集的内部或外部组织简单要素类, 但拓扑要素类只能在要素集内部组织,以确保它们具有相同的坐标系统。
  2. 要素类:要素类是具有相同几何形状的要素的集合: 点、线或多边形。 我们最关心的两种要素类是简单要 素类和拓扑要素类。 简单要素类包括没有任何拓扑关系的点、线、多边形或注记。也就是说,一个要素类内的点与另一要素类中的线的终点可以是一致的,但它们是不同的。这些要素可以彼此独立地编辑。 拓扑要素类局限在一定的图形范围内,它是一个由完整 拓扑单元组成的一组要素类限定的对象。

Python中操作Layer的方法

下面是Layer的方法集合:

    >>> inshp = '/bk/gdata/world_borders.shp'
    >>> from osgeo import ogr
    >>> datasource = ogr.Open(inshp)
    >>> layer = datasource.GetLayer(0)
    >>> dir(layer)

这里要注意GetLayer的参数是从0开始的。对于Shapefile,它只有一个图层,一般都是填0的,如果不填的话默认也是0。下面是layer的主要方法:

'CommitTransaction', 'CreateFeature', 'CreateField', 'DeleteFeature',
'Dereference', 'GetExtent', 'GetFeature', 'GetFeatureCount',
'GetFeaturesRead', 'GetLayerDefn', 'GetName', 'GetNextFeature', 'GetRefCount',
'GetSpatialFilter', 'GetSpatialRef', 'Reference', 'ResetReading',
'RollbackTransaction', 'SetAttributeFilter', 'SetFeature', 'SetNextByIndex',
'SetSpatialFilter', 'SetSpatialFilterRect', 'StartTransaction', 'SyncToDisk',
'TestCapability'。 

下面是一些简单的例子:

    n = layer.GetFeatureCount()
    print 'feature count:', n
    # 读出上下左右边界
    extent = layer.GetExtent()
    print 'extent:', extent
    print 'ul:', extent[0], extent[3]
    print 'lr:', extent[1], extent[2]

可以看到,Layer核心操作都是针对的是要素的操作(Feature),并且通过GetFeatureCount()和GetFeature()或者 GetNextFeature()可以获取层内所有的要素,通过GetFeaturesRead() 可以知道现在已经读取了多少条Feature了(获取一次值少1,如果要从头开始,用ResetReading()。

返回目录:Python与开源GIS

关注公众号
获取免费资源

随机推荐


Copyright © Since 2014. 开源地理空间基金会中文分会 吉ICP备05002032号

Powered by TorCMS

OSGeo 中国中心 邮件列表

问题讨论 : 要订阅或者退订列表,请点击 订阅

发言 : 请写信给: osgeo-china@lists.osgeo.org