多边形集中多边形之间的最大距离

Max distance between polygons in a polygon set

我在 GIS 中设置了一个包含很多多边形的多边形。我的任务是找到两个之间距离最大的多边形 [两个多边形 farthest/farthermost,我的英语很有趣 :( ]

到目前为止,这是我的代码,但我停止了,因为输出给我的最大值不正确。请帮忙。这是我的代码:

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

但是,这些距离是在 lat/lon 坐标中计算的,即它们不代表地球上的真实距离。然而,如果图层中的对象没有跨越地球的大片区域,那么 lat/lon 坐标系中距离最大的对很可能对应于 "true" 距离最大的对.