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

2024-09-28 21:57:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我在地理信息系统里有一个多边形集,里面有很多多边形。我的任务是找出两个多边形之间的最大距离[两个多边形是最远的/最远的,我的英语很有趣:(]

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

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

我知道我在代码中有很多不必要的东西,但当我修正了这个最大距离时,我会修正这些。在


Tags: 代码infromimport距离for多边形max
1条回答
网友
1楼 · 发布于 2024-09-28 21:57:37

最有可能的问题是如何在层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元素。因此,外循环在下一次迭代时终止,因为没有剩余的内容可以迭代。在

为了在代码中反映这一点,例如,可以执行以下操作(如果对象的数量不是太大):

^{pr2}$

然而,这些距离是在纬度/经度坐标下计算的,即它们不代表地球上的真实距离。然而,如果图层中的对象没有跨越地球的大面积区域,那么在经纬度坐标系中距离最大的一对很可能对应于“真实”距离最大的对。在

相关问题 更多 >