รับจุดยอดทั้งหมดของรูปหลายเหลี่ยมโดยใช้ 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.8565347032449642e-313, 7.1913896573768921e-305, 6.3952653423603306e-305) คุณมีความคิดยังไงกับเรื่องนี้?
Nathan W

ไม่ว่าจะเป็นพิกัดสามเท่าถ้าเล็กไปหน่อย) ข้อมูลอินพุตและการฉายภาพของคุณเป็นอย่างไร เช่นogrinfo -alพูดอะไร
relet

ดูเหมือนว่าฉันจะตีความว่ามันลอยเป็นสองเท่าหรือคล้ายกัน
MerseyViking

5
บรรทัดนั้นควรอ่าน: lon, lat, z = ring.GetPoint(p)ซึ่งเหมาะกับฉัน
MerseyViking

ขอบคุณ MerseyViking นั่นมัน .. ไม่เชื่อเลยว่าฉันจะดูมัน
นาธาน W


5

ฉันเพิ่งพบปัญหาเดียวกัน ฉันสิ้นสุดการใช้ฟังก์ชัน ExportToJson ใน ogr แล้วอ่านสตริง 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.