我需要您的帮助来找到解决我的问题的简单算法: 我正在编写一个将几条路线合并为一条的函数。
1)每条路线都有一个定义它的点的列表(每个点包含两个字段:纬度和经度,但我创建了距离计算函数都没关系)。
2)我通过创建包含所有点的新列表来连接路线。
3)我有所有路由的列表,并且我的函数从该列表中接收需要连接的索引列表。
4)给定的连接路线彼此相邻(我的图纸将帮助我更好地解释它)
5)给定的路线(构成返回路线的路段)是按顺序排列的,我唯一的问题是如何处理每个路段的内部顺序并高效地进行处理(例如第一段可以是图形中的B-> A,也可以是A-> B)
6)我无法比较两个起点或终点,因为它们可能有一点偏移(可以用它来创建路线),因此我尝试检查哪两个起点更近。 (在图形段AB和BC中应该连接,但是两个B点略有不同。但是它们始终离点A(B1),(B2)C的组合最接近)
这是我到目前为止所拥有的:
private Route CombineRoutes(List<int> indexes)
{
List<PointLatLng> pointsList = new List<PointLatLng>();
int n_points,n_routes = indexes.Count;
if (n_routes == 1)
return new Route(routeList[indexes[0]].Points, "");
for (int i = 0; i < n_routes; i++)
{
//At this point there are at least 2 segments to be connected
n_points = routeList[indexes[i]].Points.Count;
if ((i==0 && DistBetweenPoints(routeList[indexes[0]].Points.Last(), routeList[indexes[1]].Points.First()) < DistBetweenPoints(routeList[indexes[0]].Points.First(), routeList[indexes[1]].Points.Last())) || DistBetweenPoints(pointsList.Last(), routeList[indexes[i]].Points[0]) < DistBetweenPoints(pointsList.Last(), routeList[indexes[i]].Points.Last())) //I tried to define the conditions in which the route can be added in the current direction
{
pointsList.AddRange(routeList[indexes[i]].Points);
}
else
{
for (int j = n_points - 1; j >= 0; j--)
{
pointsList.Add(routeList[indexes[i]].Points[j]);
}
}
}
return new Route(pointsList,"");
}
我认为更多的代码(如使用的类和函数)将是太多的信息。 即使是伪代码也没问题,我只是在寻找一种有效的算法。