【发布时间】:2019-02-01 14:02:40
【问题描述】:
目标:给定一个坐标 X,为坐标 X 找到“n”个最近的线多边形,而不仅仅是“n”个最近的点。示例:https://i.imgur.com/qyxV2MF.png
我有一组空间线多边形,可以有超过 2 个坐标。它们的坐标存储在 (scipy)KDtree 中以启用 NN 搜索。
首先,我会查询“i”个最近的坐标,然后查找对应的线-多边形->“i”坐标不一定会产生“i”线。
为了实现“n”最近的行,我需要增加“i”。我的问题是“i”可能是不可预测的,因为每个线多边形之间的坐标数都不同。例如,一个线多边形可以用 2 个坐标表示,但另一个可以用 10 个坐标表示。大多数时候,我只需要距离 X 点最近的 2 个相邻线多边形。
在示例图像中,我需要 A 行和 B 行作为结果。即使 "i" = 3,也只会找到线 A,因为 A1、A2、A3 是 X 的最近邻居。
问题:有没有办法将一个形状的坐标组合在一起,然后进行NN搜索以获得“n”个独特的形状? (除了暴力破解“i”以确保“n”个独特的形状)
当前的解决方法伪代码:
found = []
while True:
if first_loop:
result = look up N nearest coords
else:
result = look up Nth nearest coord
look up shapes using result and append to found
perform de-duplication of found
if len(found) >= required:
return found
else:
N = N+1 # to check the Nth neighbor next iteration
【问题讨论】:
-
将您的组转换为“平均/中点”有意义吗?因此,您可以将问题转化为点 NN,匹配 k 个最近点,然后将这些匹配扩展为原始组。
-
嗨 randomir,我也想过使用单个坐标来表示每个形状。但是,我的地理空间形状的大小也有所不同,因此对最近邻居使用质心可能不会给出期望的结果(每个查询我最多只需要 4 个)。想象一个星形道路网络,我在中心,有 5 条道路(形状)分支出来。从技术上讲,我和5条路之间的距离是一样的。但如果我们使用质心作为参考,道路长度就会很重要。
标签: python algorithm data-structures nearest-neighbor kdtree