从点到多边形的 Y 距离

问题描述 投票:0回答:1

我尝试计算从多边形内的点到该多边形在正 Y 方向和负 Y 方向上的 Y 距离。 到目前为止,我使用 shapely 创建多边形,但我不受此限制。

可能存在这样的情况,多个边缘位于该点上方(我的图像中的情况 2)。那我想要最小的距离。

The point can be below and above of only one edge each (case 1) or multiple edges (case 2) or a mixture of both.

我想到的一个解决方案是生成一个包含从 0 到 100 的 Y 坐标的数组,并以小步长迭代地将这些坐标添加到我的点的 Y 坐标上,并检查每次迭代(如果该点仍在内部)多边形。不过,我希望有一种更优雅的方法来做到这一点。

我知道,shapely提供了计算从点到多边形(poly.exterior.distance(point))的最小距离的可能性,但我不明白这对我有什么帮助,因为这不在Y中-方向。

谢谢您的帮助!

python polygon distance point shapely
1个回答
0
投票

IIUC,这是计算从点到最近边缘(垂直)的距离的一种方法:

from shapely import MultiLineString

def dis_to(p, poly):
    lines = LineString(
        [
            (p.x, poly.bounds[1::2][0]),
            (p.x, poly.bounds[1::2][1]),
        ]
    ).intersection(poly)

    lines = (
        lines if type(lines) == MultiLineString else MultiLineString([lines])
    )
    out_line = [
        gs
        for gs in lines.geoms
        if gs.bounds[1::2] == min(gs.bounds[1::2] for gs in lines.geoms)
    ][0]
    
    return out_line, [
        round(p.distance(_p), 2)
        for _p in out_line.boundary.geoms
    ]

l1, dist1 = dis_to(p1, poly1)
l2, dist2 = dis_to(p2, poly2)

输出:

>>> l1, dist1
# (<LINESTRING (4.5 1.417, 4.5 7)>, [2.58, 3.0])

>>> l2, dist2
# (<LINESTRING (5.5 1.3, 5.5 6.75)>, [3.7, 1.75])

© www.soinside.com 2019 - 2024. All rights reserved.