【发布时间】:2019-12-07 18:56:08
【问题描述】:
我有一个二维地理坐标数组,像这样
coords = np.array(
[[[54.496163, 21.770491],
[54.495438, 21.755107],
[54.494713, 21.739723],
[54.493988, 21.724339],
[54.493263, 21.708955]],
[[54.504881, 21.769271],
[54.504157, 21.753884],
[54.503432, 21.738497],
[54.502707, 21.72311 ],
[54.501983, 21.707723]],
[[54.5136, 21.768052],
[54.512875, 21.752661],
[54.512151, 21.737271],
[54.511426, 21.72188 ],
[54.510702, 21.70649 ]],
[[54.522318, 21.766832],
[54.521594, 21.751439],
[54.52087, 21.736045],
[54.520145, 21.720651],
[54.519421, 21.705257]],
[[54.531037, 21.765613],
[54.530312, 21.750216],
[54.529588, 21.734819],
[54.528864, 21.719421],
[54.52814, 21.704024]]]
)
在空间中它定义了一个多边形
我想找到某个点在coords中最近点的索引,例如pt = [54.5, 21.7]
coords 在这里可能看起来像一个平行四边形,但实际上它是一个形状为(1200, 1500, 2) 的多边形。出于显而易见的原因,我在这里显示coords[0:5,0:5]。
多边形的真实形状可以在question找到。
现在我正在计算整个 coords 数组相对于点 pt 的欧几里得距离,以找到最近的点 [r1,c1]
flidx = ((coords - pt) ** 2).sum(2).argmin()
r1 = int(flidx / coords.shape[1])
c1 = flidx % coords.shape[1]
但这需要太多时间。
我正在考虑在多边形中实现二进制搜索,我可以将它分成 4 个部分,检查点在哪一部分中,然后循环直到我有一个相对较小的点数组,例如 16 x 16 .然后应用欧式距离法。
问题是我不知道如何检查一个点是否在多边形内。一个矩形会相当简单,但这不是一个。
对于此方法或任何其他查找最近点的方法的任何帮助将不胜感激。
谢谢
【问题讨论】: