Python与开源GIS:使用OGR获取要素信息

Python与开源GIS:使用OGR获取要素信息


发布日期: 1970-01-01 更新日期: 2019-10-28 编辑:xuzhiping 浏览次数: 8094

标签:

摘要: Python与开源GIS教程的内容,开发了单独的内容,请打开 https://www.osgeo.cn/pygis/ 查看。 本页面的内容不再更新。 获取要素(Feature)信息 如果只从计算机角度来看,有人认为要素就是一些几何形状,这种观...

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



获取要素(Feature)信息

如果只从计算机角度来看,有人认为要素就是一些几何形状,这种观点是欠妥的。几何形状,具体包括点、线、多边形、弧段、向量、控制点等等非常多种,其实是要素的模型抽 象。 在Shapefile中,要素模型由点、线、面三种类型构成。要素类都带有属性信息,一个要素一般对应属性表中的一行。

获取图层中的要素

下面看一下如何获取图层中的要素(feature)。

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

另外还有按顺序读取feature,循环遍历所有的feature:

    >>> feat = layer.GetNextFeature()
    >>> while feat:
    >         feat = layer.GetNextFeature()
    >>> layer.ResetReading()

GetNextFeature()用来获取下一下要素,ResetReading()则 是进行重置,以便再次获取。

获取要素的属性

下面是一个简单的例子:

    >>> feat = layer.GetFeature(0)
    >>> feat.keys()
    ['CAT', 'FIPS_CNTRY', 'CNTRY_NAME', 'AREA', 'POP_CNTRY']
    >>> fid = feat.GetField('AREA')
    >>> print(fid)
    193.0

下面是对所有的属性值进行遍历:

    >>> for i in range(feature.GetFieldCount()):
    >     print feature.GetField(i)
    1.0
    AA
    Aruba
    193.0
    71218.0

这会列出这个要素的所有属性值。 如果要看整个表的结构,各个字段的名称等等信息,可以在layer的附加信息里看。

    >>> layerdef = layer.GetLayerDefn()
    >>> for i in range(layerdef.GetFieldCount()):
    >         defn = layerdef.GetFieldDefn(i)
    >     print(defn.GetName(),defn.GetWidth(),defn.GetType(),defn.GetPrecision())
    ('CAT', 16, 2, 0)
    ('FIPS_CNTRY', 80, 4, 0)
    ('CNTRY_NAME', 80, 4, 0)
    ('AREA', 15, 2, 2)
    ('POP_CNTRY', 15, 2, 2)

要素的形状(Geometry)

    >>> geom = feature.GetGeometryRef()
    >>> geom.GetGeometryName()
    'POLYGON'
    >>> geom.GetGeometryCount()
    1
    >>> geom.GetPointCount()
    0
    >>> geom.GetX()
    0.0
    >>> geom.GetY()
    0.0
    >>> print(geom) # 会打印出所有的点
    POLYGON ((-69.882232999999999 12.41111,-69.946944999999999 12.436666,
    ...
    12.411664999999999,-69.882232999999999 12.41111))
    >>> print(geom.ExportToWkt())
    POLYGON ((-69.882232999999999 12.41111,-69.946944999999999 12.436666,
    ...
    12.411664999999999,-69.882232999999999 12.41111))
    >>> polygon = geom.GetGeometryRef(0)
    >>> polygon.GetGeometryName()
    'LINEARRING'
    >>> polygon.GetGeometryCount()
    0
    >>> polygon.GetPointCount()
    19
    >>> polygon.GetX(0)
    -69.882232999999999
    >>> polygon.GetY(0)
    12.411110000000001
    >>> polygon.GetZ(0)
    0.0
    >>> print(polygon.ExportToWkt())
    LINEARRING (-69.882232999999999 12.41111,-69.946944999999999 12.436666,
    ...
    12.411664999999999,-69.882232999999999 12.41111)

返回目录:Python与开源GIS

关注公众号
获取免费资源

随机推荐


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

Powered by TorCMS

OSGeo 中国中心 邮件列表

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

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