[英]Max distance between polygons in a polygon set
我在GIS中設置了一個包含很多多邊形的多邊形。 我的任務是找到兩個相互之間具有最大距離的多邊形[兩個最遠/最遠的多邊形,我的英語很有趣:(]
到目前為止,這是我的代碼,但是我停止了,因為輸出為我提供了不正確的最大值。 請幫助。 這是我的代碼:
# -*- coding: utf-8 -*-
from shapely.wkb import loads
from osgeo import ogr
datoteka=ogr.Open("sth.shp")
sloj=datoteka.GetLayerByName("katastar")
udaljenosti=[]
for i in sloj:
cestica1=loads(i.GetGeometryRef().ExportToWkb())
for j in sloj:
cestica2=loads(j.GetGeometryRef().ExportToWkb())
udaljenosti.append(cestica1.distance(cestica2))
max_udaljenost=max(udaljenosti)
print max_udaljenost
datoteka.Destroy()
我知道代碼中有很多不必要的內容,但是當我解決此最大距離時,我會解決該問題。
如何遍歷sloj
很有可能是一個問題。 問題是,如果您編寫如下代碼:
#!/usr/bin/env python
from shapely.wkb import loads
from osgeo import ogr
datoteka = ogr.Open("custom.shp")
sloj = datoteka.GetLayer()
N = sloj.GetFeatureCount()
print(N)
for p in sloj:
cnt = 0
for q in sloj:
cnt += 1
print(cnt)
那么這將不打印N
次數N
,而是僅數N
隨后N-1
原因是sloj
用作迭代器,因此當進入外循環時,它將消耗第一個元素,而內循環將消耗所有剩余的N-1
元素。 因此,外循環在下一次迭代時終止,因為沒有要迭代的內容。
為了在您的代碼中反映出這一點,您可以例如執行以下操作(如果對象的數量不太大):
# -*- coding: utf-8 -*-
from shapely.wkb import loads
from osgeo import ogr
datoteka=ogr.Open("C:\Users\Sanja\Desktop\Desktop\Geof\Geof
IV\BPP\podaci\katastar.shp")
sloj=datoteka.GetLayerByName("katastar")
L = [p.GetGeometryRef().ExportToWkb() for p in sloj]
N, max_dist = len(L), -1
for i in range(N):
cestica1 = L[i]
for j in range(i+1, N):
cestica2 = L[j]
max_dist = max(max_dist, cestica1.distance(cestica2))
print(max_dist)
datoteka.Destroy()
但是,這些距離是在緯度/經度坐標中計算的,即它們並不代表地球上的真實距離。 但是,如果圖層中的對象不在全球范圍內,那么緯度/經度坐標系中距離最大的對很可能對應於“真實”距離最大的對。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.