我尝试计算从多边形内的点到该多边形在正 Y 方向和负 Y 方向上的 Y 距离。 到目前为止,我使用 shapely 创建多边形,但我不受此限制。
可能存在这样的情况,多个边缘位于该点上方(我的图像中的情况 2)。那我想要最小的距离。
我想到的一个解决方案是生成一个包含从 0 到 100 的 Y 坐标的数组,并以小步长迭代地将这些坐标添加到我的点的 Y 坐标上,并检查每次迭代(如果该点仍在内部)多边形。不过,我希望有一种更优雅的方法来做到这一点。
我知道,shapely提供了计算从点到多边形(poly.exterior.distance(point))的最小距离的可能性,但我不明白这对我有什么帮助,因为这不在Y中-方向。
谢谢您的帮助!
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])