摘要: 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