2013-08-22 68 views
0

我正在尋找一個很好的算法來尋找最近的位置列表,考慮到我們從GPS設備接收到的數據的質量。附近GPS位置的算法

的問題是如下:

  1. 我點A的位置。 A= (LNG, LAT, ALT, HorizontalAccuracy, VerticalAccuracy)
    • Horizo​​ntalAccuracy和VerticalAccuracy它在米potencial錯誤
  2. 我有別人B = [B1, ... Bn]每個Bx的列表(LNG, LAT, ALT, HorizontalAccuracy, VerticalAccuracy)
  3. 我想找到點最近的Bx到A列表,以便根據距離Bx和A列表。
  4. 該列表的順序應該考慮到我們擁有的數據的準確性。精度問題始於點之間的距離短於精度時開始。通過距離

    distance = sqrt((lng_a - lng_b)^2 + ... + (alt_a - alt_b)^2) 
    

    ,然後只排序:

+0

任何排序算法都可以使用!使用由標準庫提供的那個。 – hivert

+1

@hivert首先如何獲得距離?第二,如何對考慮到職位錯誤的價值進行排序。沒有理由,我認爲你誤解了問題。 – Luman75

+0

可能是因爲你誤解了它! – hivert

回答

1

只需使用Euclidean distance

+0

當然這是更容易的部分,但是精度的錯誤呢。我需要考慮它們以適當處理相對較近的物體 – Luman75

+0

請不要使用Eucledian距離公式來計算球體上各點之間的距離。 –

1

精度:你可以設置一個過濾器(即:決定你將使用哪些位置以及哪些位置將被省略)。在CLLocation中,您仍然可以獲得中心點,因此距離公式中的精度因子沒有多大用處。

如果你嘗試用精度比他們中心之間的距離來計算惡化,這將是更大的方法問題一個數學問題 2個geolocations之間來計算距離。

距離:您總是可以使用CLLocationdistanceFromLocation:方法。不要使用Eucledian formala來計算地理位置之間的距離。

排序:這裏不多說了。排序算法有其優點和缺點。我會先嚐試實施native sorting possibilities之一,如果它們看起來太慢,可以稍後進行優化。

1

首先,橫向精度只是一個估計值,所以不要太依賴它。 但是我會刪除超過精度閾值的位置。

然後,如果你有小於10,000點按距離排序。
如果您有更多,則首先使用空間索引,如Quadtree,通過避免計算到所有位置的距離來加速,但只有附近的位置。

距離計算:
這取決於您的位置是否遍佈整個世界,或僅在100km以內。 如果在全世界範圍內使用內置的distanceTo(),如果在100km以內,並且您的 有很多點或者需要快速計算,則使用基於EquiRectangular投影的距離公式,它只使用一個cos()運算。您可以省略sqrt(),因爲您可能可以按距離的sqr進行排序。