OGR ve Python kullanarak çokgenin tüm köşelerini alın


18

Python OGR API ile biraz sorun yaşıyorum. Yapmaya çalıştığım, bir çokgenin dış halkasının her bir tepe noktasının tüm koordinatlarını elde etmektir.

Şimdiye kadar sahip olduğum şey bu:

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

Ben sadece forbölgenin üzerinde olduğunu duydum ama bu sadece çokgen halkaları döndürür, düğümleri değil.

Herkes yardım edebilir.

Yanıtlar:


15

Biraz dosya formatınıza ve geometrisinize bağlıdır, ancak prensipte devam böyle görünebilir.

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

Bu çıktılardan biri: (1.8565347032449642e-313, 7.1913896573768921e-305, 6.3952653423603306e-305) Bunun ne olduğu hakkında bir fikrin var mı?
Nathan W

Tam olarak değil, eğer biraz küçücükse üçlü koordinatlar;) - giriş verileriniz ve projeksiyonunuz nasıl görünüyor? Örneğin ne ogrinfo -aldiyor?
relet

Bana şamandıraları çiftler ya da benzeri olarak yorumluyor gibi geliyor.
MerseyViking

5
Bu satır şöyle olmalıdır: lon, lat, z = ring.GetPoint(p)Benim için hangisi işe yarıyor.
MerseyViking

Teşekkürler MerseyViking, bunu yaptı ... Buna baktığımıza inanamıyorum.
Nathan W


5

Ben sadece aynı problemle karşılaştım. Ogr ExportToJson işlevini kullanarak ve sonra bir sözlük içine Json dize okuma sona erdi. Verilerimi ve orijinal sorudaki gösterimi kullanarak, şuna benzer:

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

Sadece şekil dosyalarına bakıyorsanız, pyshp'yi de kullanabilirsiniz .

import shapefile
sf = shapefile.Reader("shapefiles/blockgroups")
shapes = sf.shapes()
for shape in shapes:
  for vertex in shape.points:
    #do something with the vertex
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.