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)

이것은 출력 중 하나입니다.
Nathan W

정확하지는 않지만 약간 작은 좌표의 경우 삼중 좌표입니다.)-입력 데이터와 투영은 어떻게 생겼습니까? 예를 들어 무엇을 ogrinfo -al말합니까?
relet

그것은 수레를 두 배나 비슷한 것으로 해석하는 것처럼 보입니다.
MerseyViking

5
그 줄은 lon, lat, z = ring.GetPoint(p)다음과 같아야합니다 .
MerseyViking

감사합니다 MerseyViking, 그건 .. 내가 그것을 보았다 믿을 수 없습니다.
Nathan 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.