沿正确的方向连接路段

时间:2019-06-17 14:41:48

标签: c#

我需要您的帮助来找到解决我的问题的简单算法: 我正在编写一个将几条路线合并为一条的函数。

1)每条路线都有一个定义它的点的列表(每个点包含两个字段:纬度和经度,但我创建了距离计算函数都没关系)。

2)我通过创建包含所有点的新列表来连接路线。

3)我有所有路由的列表,并且我的函数从该列表中接收需要连接的索引列表。

4)给定的连接路线彼此相邻(我的图纸将帮助我更好地解释它)

5)给定的路线(构成返回路线的路段)是按顺序排列的,我唯一的问题是如何处理每个路段的内部顺序并高效地进行处理(例如第一段可以是图形中的B-> A,也可以是A-> B)

6)我无法比较两个起点或终点,因为它们可能有一点偏移(可以用它来创建路线),因此我尝试检查哪两个起点更近。 (在图形段AB和BC中应该连接,但是两个B点略有不同。但是它们始终离点A(B1),(B2)C的组合最接近)

7)输出路径可以是从A到D或从D到A。 drawing of the problem

这是我到目前为止所拥有的:

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,"");
}

我认为更多的代码(如使用的类和函数)将是太多的信息。 即使是伪代码也没问题,我只是在寻找一种有效的算法。

0 个答案:

没有答案