沿道路动态排序GPS点

时间:2014-05-16 14:15:20

标签: c# map gps sequencing

我正在存储GPS点和索引 - 所以在这个问题中引用这些点它看起来像GPS [0],GPS [1],其中GPS是GPS位置,[n]是GPS位置数组中的索引。

以下是我将如何存储位置(在此示例中,数组仅包含11个位置):

GPS [0] =道路起点 - 始终在第一个索引

GPS [10] =路的尽头 - 总是在最后一个索引

GPS [1 - 9] =在道路的起点和终点之间的点数

注意:并非所有[1-9]点同时被捕获,例如GPS [1]和星期一可以捕获GPS [2]并且星期三可以捕获GPS [3]和GPS [4] - 9]可能会在一个月后被捕获。如果他们没有被捕获......他们会被忽略。

此外,可以捕获GPS位置"不按顺序" ...我的意思是"不按顺序"是的,这些点是沿着道路捕获的,但不一定按照从头到尾沿着这条路行驶时遇到的顺序。

这引出了我的算法问题:

(注意' MAP API'是任何具有映射API的软件/服务)

//--- is there a MAP API that does this?
Set CurrentPoint = MAP.api.FindPoint( GPSArray[0] )

//--- is there a MAP API that does this?
Set EndPoint = MAP.api.FindPoint( GPSArray[10] )

List<int> sequencedIndicies = new List<int>;   

while ( CurrentPoint != EndPoint )
{

    // Is there a MAP API that will travel down the road from the current point
    // X feet and set the current point to that location ?

    CurrentPoint = MAP.api.TravelThisManyFeetDownRoad( CurrentPoint, 100 )

    // loop through my points and check them against the current road point
    for( int i= 1; i<10; i++ )
    {
        // Is there a MAP API function will take a point, a "current" point 
        // and tell if the point is within X feet of the current point
        //
        // ( alternatively I could use Haversine function if map api does not exist ) 
        //
        if( MAP.api.IsNear( CurrentPoint, GPSArray[i],  50 ) )  <--- need this too
        {
            sequencedIndicies.Add( i );
            break;
        }
    }
}

// move the GPS points to the new sequenced order
ReindexGPSArray( GPSArray, sequenceIndicies )

我正在寻找处理MAP api功能的C#示例代码

另一个注意事项......这不需要任何用户界面显示...

我可以使用Lat / Lon ......然而,我使用哪种GPS坐标并不重要...... 重要的是可以在道路上行驶的MAP api功能 并确定一个点是否接近当前点。

由于

1 个答案:

答案 0 :(得分:2)

使用谷歌地图API ..我想出来了:

以下是代码:

 http://maps.googleapis.com/maps/api/directions/xml?origin=37.332829,-122.053389&destination=37.320885,-121.995869&waypoints=optimize:true|37.326531,-122.006750|37.334222,-122.037787|37.333721,-122.021086&sensor=false

以下是响应点的顺序:

 <waypoint_index>1</waypoint_index>
 <waypoint_index>2</waypoint_index>
 <waypoint_index>0</waypoint_index>