Dapatkan semua simpul poligon menggunakan OGR dan Python


18

Saya mengalami sedikit masalah dengan API Python OGR. Apa yang saya coba lakukan adalah mendapatkan semua koordinat dari setiap simpul cincin luar poligon.

Inilah yang saya miliki sejauh ini:

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()

Saya telah mendengar bahwa Anda dapat formelewati wilayah tersebut tetapi itu hanya mengembalikan cincin dalam poligon, bukan simpul.

Siapa pun dapat membantu.

Jawaban:


15

Tergantung sedikit pada format file dan geometri Anda, tetapi pada prinsipnya kelanjutannya bisa seperti ini.

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

Ini adalah salah satu output: (1.8565347032449642e-313, 7.1913896573768921e-305, 6.3952653423603306e-305) Ada yang tahu ada apa dengan itu?
Nathan W

Tidak persis, itu adalah tiga koordinat, jika agak kecil;) - seperti apa data input dan proyeksi Anda? mis. Apa ogrinfo -alkatanya?
Relet

Bagi saya itu seperti menafsirkan floats sebagai ganda atau serupa.
MerseyViking

5
Baris itu seharusnya berbunyi: lon, lat, z = ring.GetPoint(p)Yang mana cocok untuk saya.
MerseyViking

Terima kasih MerseyViking, itu berhasil..tidak percaya saya telah melihat itu.
Nathan W


5

Saya hanya mengalami masalah yang sama. Saya akhirnya menggunakan fungsi ExportToJson di ogr dan kemudian membaca string Json ke dalam kamus. Menggunakan data saya dan notasi dari pertanyaan awal, ini terlihat seperti:

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

Jika Anda hanya melihat shapefile, Anda juga bisa menggunakan 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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.