给定一组有序点,以及由有序lat组成的路径,靠近这些点的lon点(在lat / lon坐标中),我想将这些点与路径相关联,理想情况下具有良好的算法复杂度( n * log(n))或更好,但也许这可能不太现实。
下图更好地说明了我的问题。蓝线是提供的有序路径,红点的顺序与蓝线的顺序相同。绿色路径是我想要的结果,它将红点和蓝线合并为一个新的有序路径。
必须为红色点与蓝色路径的距离设置一些阈值,让我们假设红点距离蓝色路径最多50米。
所以,这绝对是我在Stack Overflow上提出的最具数学性和不寻常的问题。任何想法都会很好地解决这个问题。我打算用它来合并GTFS形状数据和描述停止时间的行程数据,并将其构建到开源项目Depart App中。
感谢您的帮助!
答案 0 :(得分:2)
在我看来,你有两组点,纬度/经度点和红点。其中一个纬度/经度点是您的起点。现在将所有其他点视为一组,使用(近似?)最近邻居算法来查找下一个点。现在重复一遍唯一的麻烦是,最近邻算法往往是O(n),这就是你想做的事O(n ^ 2)。
答案 1 :(得分:2)
基于此处提供的其他建议,我认为我发现了一种有效运行的O(n)算法。
这个想法是首先选择第一个红点作为起点(或者可以选择第一个蓝点)。然后比较从该点到下一个红点的距离和下一个蓝点,选择更近的点。重复,直到两个列表都耗尽。这似乎在Translink数据集上非常有效。如果我对这个想法进行调整,我会给出更新。
答案 2 :(得分:1)
对于每个红点迭代蓝色段并找到最佳段。 “最佳”究竟是什么取决于任务,但看起来一个好的衡量标准是“道路变得多长”。如果A是红点而BC是一个段,那么最好的段将最小化:f(A,BC)=(| BA | + | AC | - | BC |)。
找到最佳片段后,应将其替换为BA和AC。以同样的方式处理其他点。
如果没有优化,这将给出O(N ^ 2)。
如果点的分布或多或少均匀分布,并且分段长度明显小于整个数字的大小,则某些空间分区可能会有所帮助。
答案 3 :(得分:1)
也许您可以使用自定义sweep line algorithm,这可以降低查找最近线段的复杂性。