2012-06-22 38 views
0

我正在聽我的手機GPS和後經度和緯度到我的web服務evey時間onLocationChanged被調用。我的問題是,在大約2%的帖子中,它顯示了非常不準確的結果(幾英里外)。在我發佈之前,我應該檢查我的location對象的準確性嗎?或者你有其他建議嗎?謝謝!Gps緯度和長度隨機顯示非常不準確的結果

public void onLocationChanged(Location location) { 
    locationManager.removeUpdates(networkLocationListener); 

    textView.setText(textView.getText().toString() + "New GPS location: " 
      + String.format("%9.6f", location.getLatitude()) + ", " 
      + String.format("%9.6f", location.getLongitude()) + "\n"); 

    //float accuracy = location.getAccuracy(); check this value? 

    postLocationToWebservice(location); 
} 

回答

1

這是當一個非常普遍的問題得到最後更新的GPS位置使用Android的定位服務。您可以引入幾個檢查,以確保只有準確的位置纔會發佈到您的Web服務。

1.比較所有位置服務的準確性。

2.定義精度的最小限制和最大時間限制(因爲有些時候獲得的位置是準確的,但是它是舊的)。

檢查此代碼段並進行必要的更改以實現您的目標。請確保您創建了一個 日誌構建,以檢查算法的準確性。

List<String> matchingProviders = myLocation.lm.getAllProviders(); 
    for (String provider: matchingProviders) 
    { 
     Location location = myLocation.lm.getLastKnownLocation(provider); 
     if (location != null) { 
      float accuracy = location.getAccuracy(); 
      long time = location.getTime(); 

      if ((time > minTime && accuracy < bestAccuracy)) { 
       bestResult = location; 
       bestAccuracy = accuracy; 
       bestTime = time; 
      } 
      else if (time < minTime && bestAccuracy == Float.MAX_VALUE && time > bestTime) { 
       bestResult = location; 
       bestTime = time; 
      } 
     } 
    } 
+0

看起來像我需要的東西,謝謝 – Johan

+0

後續問題:你能給我一個關於如何發佈時間的例子嗎?謝謝 – Johan

0

這可能是可能的,更新的位置被報道的NETWORK_PROVIDER代替GPS_PROVIDER

可以隨時通過

 mLocationMgr.getLastKnownLocation(LocationManager.GPS_PROVIDER);