2014-05-16 92 views
1

我將GPS點與索引一起存儲 - 所以在這個問題中引用這些點時,它會看起來像這樣的GPS [0],GPS [1],其中GPS是GPS位置並且[n]是GPS位置陣列中的索引。沿着道路動態排序GPS點

這裏是我會如何被存儲的位置(在這個例子中該陣列只包含11個地點):

GPS [0] =道路的起點 - 總是在第一索引

GPS [ - 9]點以捕獲不是所有的[1:道路10] =端 - - 總是在最後一個索引

GPS [1 9] =道路的開始和結束

注之間的點在例如同一時間,例如GPS [1]和GPS [2]可能在星期一被捕獲,並且GPS [ 3]可能在週三被捕獲,GPS [4-9]可能在一個月後被捕獲。如果他們沒有被捕獲......他們被忽略。

此外,GPS位置可能會被「無序」捕獲......我所說的「無序」意思是,這些點是沿着道路捕獲的,但不一定與您遇到的順序相同當你從頭到尾走在路上。

這使我在我的算法問題:

(注「地圖API」是任何軟件/服務具有映射API)我要尋找的C#示例代碼

//--- 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) 

該交易與地圖API的功能

另一注...這不需要任何用戶界面顯示...

我可以用緯度/經度......然而,GPS合作我使用的座標並不重要...... 重要的是MAP MAP API函數可以沿着道路行進並確定點是否接近當前點。

感謝

+0

'GPS'的類型是什麼?它是一個Vector2數組嗎?一個Vector3數組?一個'octopus'類型的數組?它是什麼樣的「點」?緯度/經度? (X,Y)?您可以根據距離原點對您的GPS陣列進行排序。請參閱此問題以計算距離:http://stackoverflow.com/questions/6366408/calculating-distance-between-two-latitude-and-longitude-geocoordinates – arao6

+0

查看編輯的問題 – user3174075

+0

查看Google Maps API:https:// developers.google.com/maps/documentation/directions/您可以爲'GPS'數組中的點設置'航點'。您可以使用返回的多段線循環遍歷點,每遍迭代傳播X距離,然後檢查是否存在'GeoCoordinate.GetDistanceTo()'<50。如果它<50,則可以將該點添加到'sequencedIndicies'。如果您使用該數組作爲新的航點,Google將返回具有正確點數的排序數組。 – arao6

回答

1

使用谷歌地圖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> 
+0

這些點是沿280號公路附近桑尼維爾,加州 – user3174075

+0

偉大的工作!對不起,我無法發佈任何代碼;我在外面呆了幾天。感謝... – arao6

+0

...花了一些時間......但終於弄明白了。 – user3174075