2012-07-27 150 views
10

寫一個GPS記錄應用程序〜Android的GPS定位速度不可靠

我發現通過LocationsgetSpeed()方法,通過LocationManager報道返回的值是大量不可靠的。我正在使用LocationManager.GPS_PROVIDER,過濾通過onLocationChanged提供的位置以獲得最佳準確性。即使在一位數的精度水平上,返回的速度通常也很高。當手機處於靜止狀態時,我們正在談論高達200 mp/h(是的,我知道它以米/秒記錄)。

我在兩個不同型號的Android手機上測試相同的代碼庫,運行兩個不同的操作系統版本,並看到相同的問題,所以我期望這是一個代碼問題。

我錯過了什麼?我嘗試過在一段時間內平均地點,但無濟於事。我是否必須根據行駛距離/時間計算出我自己的速度值?這會令人失望。

正如你所看到的,我沒有做什麼特別的東西 - 對精度的過濾不大,甚至在此之後雙方AverageSpeed_bestLocation.getSpeed()是定期unfeasibly高,即使在定位精度好。

public void onLocationChanged(Location location) { 
    if (location.getAccuracy() < 25f) { 
     _recentLocations.add(location); 

     if (_bestLocation == null || location.getAccuracy() <= _bestLocation.getAccuracy()) 
      _bestLocation = location; 
    } 

    if ((_bestLocation != null && _bestLocation.getAccuracy() < 10f && _recentLocations.size() >= 10) 
      || _recentLocations.size() >= 25) 
    { 
     int Count = 0; 
      float TotalSpeed = 0f; 
      float AverageSpeed = 0f; 
      for (int i = 0; i<_recentLocations.size(); i++) { 
       if (_recentLocations.get(i).hasSpeed()) { 
        Count++; 
        TotalSpeed += _recentLocations.get(i).getSpeed(); 
       } 
      } 

     if (Count > 0) 
       AverageSpeed = TotalSpeed/Count; 
     } 
} 
+0

您在不同的地方*嘗試這個*呢?在某些地方,無論如何你都無法獲得GPS定位。 – Piskvor 2012-07-27 10:26:27

+0

我應該指定,我得到非常可以接受的精確修正 - 通常是5 - 10米。地方是儘可能變化 - 從辦公室到客戶網站和家庭等 – 2012-07-27 10:30:34

+0

@DanWray海,你有沒有解決這個問題,現在我正在努力相同,你能幫助我嗎? – 2014-08-04 09:35:16

回答

22

我已經在GPS硬件上工作了7年多了。精確度讀數也不是100%準確的。 製造商國家準確性以及用於測量它的系統。 CEP,RMS,2DRMS和R95是一些系統。 閱讀這篇文章的更多信息:http://en.wikipedia.org/wiki/Circular_error_probable

準確度數字不包括異常值。例如,如果規定精度爲5米,那麼在良好信號條件下讀取的最大誤差爲5米,95%的時間。對剩下的5%的數據沒有什麼可說的。對這些異常值的保護是特殊的醬料,它使得基於位置的應用程序與其他應用程序脫穎而出。

有些事情你可以做的是:

  1. 篩選出出奇高的速度。利用高度作爲在飛機上的提示。
  2. 關聯來自運動傳感器的信息,看看他們是否同意GPS的 。運動傳感器簽名在穩態 和運動中會有很大不同。
  3. GSM/3G小區的典型規模在城市 區域不到一公里,在人口稀少的地區有5-10公里。如果 車輛正在高速行駛一段時間,並且信息塔 的信息仍然相同,則您知道有問題。
  4. GPS定點高速讀取南北片刻和南下 ?如果是,那很可能是GPS錯誤。
  5. 檢查GPS通信中使用的衛星數量。 12個出色,9個健康,5個或更少,4個最低緯度,lon +海拔高度 計算,3個最低緯度,lon計算。小於3不是有效的讀數。如果樓梯數量很多,你可以對數據的有效性更有信心。
+3

有幫助。我也一直在使用GPS應用程序,我通常使用的第一個指標是衛星數。在Android的情況下,我忽略了可以通過getExtras()方法獲得衛星數量,並且依賴於以米爲單位報告的準確度,以保證我的置信水平。我會考慮您的意見並嘗試改進我的代碼,謝謝。 – 2012-07-27 11:51:30

+2

非常真實。 Android文檔還提供了有關位置提供程序如何工作以及如何過濾未覆蓋的位置的非常好的說明。 http://developer.android.com/guide/topics/location/strategies.html – 2012-12-03 09:32:33

+0

寫得好點..(Y) – Farhan 2013-04-03 17:51:25

1

GPS設備的位置的里程計,基於所述接收器 多遠自從上次測量移動。它的速度計算不是 ,但與車輛的速度計 (車輪尺寸,變速箱/傳動比)相同。取而代之的是,GPS的位置精度以及其計算出的速度的準確度取決於當時的衛星信號質量是 。速度 計算將在更高速度時更準確,當位置誤差與位置變化的比率較低時。

來自維基百科。

也許你應該試試這個地方,你有良好的信號強度。

+0

瞭解,並感謝您的評論。我已經寫了這個相同的應用程序在Blackberry手機上運行,​​在WinMo和WP7上也有類似的功能,而且我從來沒有在速度和GPS準確性方面遇到過這樣的問題。從代碼中可以看出,我不會接受精度<25m的位置,通常會看到精度<10m,特別是當電話在外面並且移動時(即,當我需要速度時)。在這個準確度水平上,我期望看到的速度值至少在正確的數量級上。 – 2012-07-27 10:36:27

+0

我沒有意識到手機之間的差異,但當我嘗試不同的位置時,我在iPhone上遇到了同樣的問題。 GPS精度在幾米之內的地方,我們在速度上有非常好的準確度,但在準確度爲50米的地方,我們的速度精度非常差。而且就像引言所解釋的那樣,它完全基於位置估計,速度通過之前的位置估計和當前位置估計以及時間差來計算。 – codetiger 2012-07-27 10:51:32

+0

然而,它在室外露天場所非常好。 – codetiger 2012-07-27 10:52:41

1

我遇到了同樣的問題。我認爲GPS信號取決於一個位置,一些位置可能會給出一個精確的位置輸出,否則就是一個「不太可靠」的結果。就我而言,我距離我的實際位置約200米。你呢?

要添加,GPS_PROVIDER在我的區域不起作用。 NETWORK_PROVIDER的確如此,並且它能夠給出200米遠的結果。

+0

我很幸運能夠使用GPS_PROVIDER,但即使使用NETWORK_PROVIDER,我也能看到比200m更精確的修正。你有沒有嘗試過一段時間看你的聽衆,並尋找更好的準確性?有點類似於我上面的代碼。當然,網絡/無線網絡的覆蓋範圍在世界不同地區會有很大的差異,所以你的經驗可能會與我的差異很大。 – 2012-07-27 11:04:17

+0

是的,我試過得到最好的提供者,最好的準確性和最好的標準,但是當我使用GPS_PROVIDER時,它不返回任何位置結果。 – JetPro 2012-07-29 08:16:17

0

這似乎表明,大多數人都假設來自GPS的速度信息是基於比較與時差有關的位置。這種方法對於確定速度不是很好,而且在較低的行駛速度下更差。

GPS接收機可以根據衛星測量的多普勒頻移輸出速度測量結果。與基於位置/時間計算的速度測量相比,基於多普勒的速度測量精度要好得多。

Google on gps speed doppler and you can find find a lot to read。

一個環節是在這裏: http://nujournal.net/HighAccuracySpeed.pdf

/城市Holmdahl