我正在用 Javascript 编写一个应用程序,它使用谷歌地图并根据最近的腿计算一系列腿之间的完整路线。
假设我在地图上有 4 条腿,每条腿都有起点和终点纬度和经度。用户指定哪两条腿是路线的起点和终点。一条腿的每一端只能连接到另一条腿的起点。然后那条腿的末端连接到另一条腿的起点,依此类推。代码根据它可以找到的最近的腿来确定开始连接的腿。
例如像这样的东西(虚线是腿):
start-----------end <-connector-> start----------end <-connector-> start----------end
我有一个包含所有腿部坐标的数组,我想对这个数组进行排序,以便它遵循正确的连接进程。然后我可以利用数组通过线性循环来生成连接器。
数组看起来像这样:
[
{start_lat: X, start_lng: X, end_lat: X, end_lng: X},
{start_lat: X, start_lng: X, end_lat: X, end_lng: X},
]
那些将是内腿。然后我将外部腿(两条腿是整个路线的起点和终点)存储在变量中:
var start = {end_lat: X, end_lng: X}
var end = {start_lat: X, start_lng: X}
作为一个例子,它可能最终会是这样的:
start -> array[0] -> array[1] -> end
或者它可能最终像:
start -> array[1] -> array[0] -> end
该算法需要根据起始腿 end_lat,end_lng 和结束腿 end_lat,end_lng 对数组进行排序。
最终的结果将是一条用最短路径连接在一起的大路线。
我正在努力想出一种将这些独特因素考虑在内的排序算法的编写方法。
很难用语言表达,我不确定如何帮助使其更清晰,但如果我能想到任何有用的补充,我会编辑这篇文章。谢谢。
编辑:
这是我正在谈论的图片:
黑线是腿,红线是我将腿坐标数组排序为正确顺序后需要生成的连接器。生成连接器不是该算法的一部分,但这只是我尝试完成的一个示例,以便您了解全局。如您所见,腿之间有间隙,坐标都没有重叠。