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リージョンのすぐ上でできるが、ノードではなくポリゴンのリングのみを返すと聞いたことがあります。

誰でも助けることができます。

回答:


15

ファイル形式とジオメトリに少し依存しますが、原則として継続は次のようになります。

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

これは、出力の1つです。
ネイサンW

正確ではありませんが、少し小さい場合は座標のトリプルです;)-入力データと投影はどのように見えますか?例:何ogrinfo -alと言う?
relet

それはフロートをダブルまたは類似のものとして解釈しているように見えます。
MerseyViking

5
その行は次のlon, lat, z = ring.GetPoint(p)ようになっているはずです。
MerseyViking

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

シェープファイルだけを見ている場合は、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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.