簡體   English   中英

多邊形集中的多邊形之間的最大距離

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM