OGR और पायथन का उपयोग करके बहुभुज के सभी कोने प्राप्त करें


18

मुझे पायथन ओजीआर एपीआई के साथ थोड़ी परेशानी हो रही है। मैं जो करने की कोशिश कर रहा हूं उसे एक बहुभुज के बाहरी रिंग के प्रत्येक शीर्ष के सभी निर्देशांक मिलते हैं।

अभी तक मेरे पास इतना ही है:

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) कोई भी विचार क्या है?
नाथन डब्ल्यू

बिल्कुल नहीं, यह निर्देशांक का एक ट्रिपल है, अगर थोड़ा छोटा है;) - आपका इनपुट डेटा और प्रोजेक्शन कैसा दिखता है? जैसे क्या ogrinfo -alकहता है?
relet

मुझे ऐसा लग रहा है कि यह फ्लोट को युगल या इसी तरह की व्याख्या कर रहा है।
MerseyViking

5
उस पंक्ति को पढ़ना चाहिए: lon, lat, z = ring.GetPoint(p)जो मेरे लिए काम करती है।
MerseyViking

धन्यवाद MerseyViking, कि यह किया था .. विश्वास नहीं होता कि मैं उस पर देखा।
नाथन डब्ल्यू


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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.