快速找到离点最近的多边形的方法

Sal*_*aFG 5 python polygon shapely

我有一个Shapely多边形列表和一个像这样的点:

from shapely.geometry import Point, Polygon

polygons = [Polygon(...), Polygon(...), ...]
point = Point(2.5, 5.7)
Run Code Online (Sandbox Code Playgroud)

我想在列表中找到最接近该点的多边形。我已经知道object.distance(other)返回两个几何形状之间的最小距离的函数,我想过计算循环中的所有距离以找到最近的多边形:

polygons = [Polygon(...), Polygon(...), ...]
point = Point(2.5, 5.7)
min_dist = 10000
closest_polygon = None

for polygon in polygons:
    dist = polygon.distance(point)
    if dist < min_dist:
        min_dist = dist
        closest_polygon = polygon
Run Code Online (Sandbox Code Playgroud)

我的问题是:有没有更有效的方法来做到这一点?

Dre*_*rey 2

有一个更短的方法,例如

from shapely.geometry import Point, Polygon
import random
from operator import itemgetter


def random_coords(n):
    return [(random.randint(0, 100), random.randint(0, 100)) for _ in range(n)]


polys = [Polygon(random_coords(3)) for _ in range(4)]
point = Point(random_coords(1))

min_distance, min_poly = min(((poly.distance(point), poly) for poly in polys), key=itemgetter(0))
Run Code Online (Sandbox Code Playgroud)

正如乔治提到的(++太棒了!)甚至更简洁:

min_poly = min(polys, key=point.distance)
Run Code Online (Sandbox Code Playgroud)

但距离计算通常是计算密集型的