使用OGR和Python获取多边形的所有顶点


18

我在使用Python OGR API时遇到了一些麻烦。我想做的是获取多边形外环每个顶点的所有坐标。

这是我到目前为止所拥有的:

import osgeo.ogr
import glob

path = "/home/woo/maps/"
out = path + 'output.txt'

file = open(out,'w')
for filename in glob.glob(path + "*.shp"):
    ds = osgeo.ogr.Open(filename)
    layer1 = ds.GetLayer(0)
    print layer1.GetExtent()    
    for feat in layer1:
        geom = feat.GetGeometryRef()
        ring = geom.GetGeometryRef(0)
        points = ring.GetPointCount()
        #Not sure what to do here


file.close()

我听说您可以for在该区域上,但是仅返回多边形中的环,而不返回节点。

任何人都可以提供帮助。

Answers:


15

这在某种程度上取决于您的文件格式和几何形状,但是原则上延续可以像这样。

  for p in xrange(points):
        lon, lat, z = ring.GetPoint(p)

这是输出之一:(1.8565347032449642e-313,7.1913896573768921e-305,6.3952653423603306e-305)知道这是怎么回事吗?
内森·W

不完全是,如果是很小的话,它是坐标的三倍;)-输入数据和投影是什么样的?例如,怎么ogrinfo -al说?
转租

在我看来,这就像将浮点数解释为双精度或类似。
MerseyViking 2011年

5
该行应为:lon, lat, z = ring.GetPoint(p)哪个对我有用。
MerseyViking 2011年

谢谢MerseyViking,这样做了。。
内森·W


5

我只是遇到了同样的问题。我结束了在ogr中使用ExportToJson函数,然后将Json字符串读入字典。使用我的数据和原始问题的表示法,这看起来像:

import json
...
ring_dict = json.loads(ring.ExportToJson())
ring_dict

{'coordinates': [[-4.94237, 55.725449],
  [-4.941922, 55.725585],
  [-4.9420024, 55.7252119],
  [-4.9422001, 55.7250997],
  [-4.9423197, 55.7251789],
  [-4.9425472, 55.7253089],
  [-4.94237, 55.725449]],
 'type': 'LineString'}

4

如果只查看shapefile,也可以使用pyshp

import shapefile
sf = shapefile.Reader("shapefiles/blockgroups")
shapes = sf.shapes()
for shape in shapes:
  for vertex in shape.points:
    #do something with the vertex
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.