Nhận tất cả các đỉnh của đa giác bằng OGR và Python


18

Tôi gặp một chút rắc rối với API OGR của Python. Những gì tôi đang cố gắng làm là có được tất cả các tọa độ của mỗi đỉnh của vòng ngoài của một đa giác.

Đây là những gì tôi có cho đến nay:

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

Tôi đã nghe nói rằng bạn chỉ có thể forqua khu vực nhưng điều đó chỉ trả về các vòng trong đa giác chứ không phải các nút.

Bất cứ ai cũng có thể giúp đỡ.

Câu trả lời:


15

Nó phụ thuộc một chút vào định dạng tệp và hình học của bạn, nhưng về nguyên tắc, phần tiếp theo có thể trông như thế này.

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

Đây là một trong những kết quả đầu ra: (1.8565347032449642e-313, 7.1913896573768921e-305, 6.3952653423603306e-305) Bạn có ý tưởng gì về điều đó không?
Nathan W

Không chính xác, đó là một bộ ba tọa độ, nếu hơi nhỏ;) - dữ liệu đầu vào và phép chiếu của bạn trông như thế nào? vd: ogrinfo -alnói gì?
relet

Điều đó đối với tôi giống như nó diễn giải nổi là gấp đôi hoặc tương tự.
MerseyViking

5
Dòng đó nên đọc: lon, lat, z = ring.GetPoint(p)Cái nào hiệu quả với tôi.
MerseyViking

Cảm ơn MerseyViking, đã làm điều đó..không thể tin rằng tôi đã xem qua điều đó.
Nathan W


5

Tôi chỉ gặp vấn đề tương tự. Tôi đã kết thúc bằng cách sử dụng hàm ExportToJson trong ogr và sau đó đọc chuỗi Json vào từ điển. Sử dụng dữ liệu của tôi và ký hiệu từ câu hỏi ban đầu, nó trông giống như:

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

Nếu bạn chỉ nhìn vào shapefiles, bạn cũng có thể sử dụng 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.