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



我在 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:UsersSanjaDesktopDesktopGeofGeof 
IVBPPpodacikatastar.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()

但是,这些距离是以纬度/纬度坐标计算的,即它们不代表地球上的真实距离。但是,如果图层中的对象不跨越地球的大面积区域,则纬度/纬度坐标系中距离最大的对很可能对应于具有最大"真实"距离的对。

最新更新