2016-08-03 56 views
2

我在這裏苦苦掙扎,我使用Fused API獲取位置更新。我的目的是在用戶走路時在地圖上繪製路徑。Android Fused Location API在onLocationChanged中給出的位置不準確

我已經實施瞭如下:

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.map_layout, container, false); 

     // some other initialization 
     //.... 
     // 
     if (mGoogleApiClient == null) { 
      mGoogleApiClient = new GoogleApiClient.Builder(mContext) 
        .addConnectionCallbacks(this) 
        .addOnConnectionFailedListener(this) 
        .addApi(LocationServices.API) 
        .build(); 
     } 

     return view; 
    } 

然後我開始的東西通過以下方法

private void startReceivingLocationUpdates() { 
     if (checkGPSPermission() && mGoogleApiClient.isConnected() && !isReceivingLocationUpdates) { 
      LocationRequest locationRequest = new LocationRequest(); 
      locationRequest.setInterval(5000); 
      locationRequest.setFastestInterval(5000); 
      locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
      LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, 
        locationRequest, this); 
      isReceivingLocationUpdates = true; 
     } 
    } 

&在這裏,我收到位置更新

@Override 
    public void onLocationChanged(Location location) { 
     if(getDistanceBetweenTwoLacation(mCoordinates.get(mCoordinates.size() - 1), location) > 3d) { 
      for(int i= 0; i < mCoordinates.size(); i++) { 
       Location locationTemp = mCoordinates.get(i); 
       Log.d(TAG, "i => " + i + " Lat => " + String.valueOf(locationTemp.getLatitude()) + " Lng => " + String.valueOf(locationTemp.getLongitude())); 
      } 
      if(mCoordinates.size() > 0) 
       Log.d(TAG, "lat difference is => " + getDistanceBetweenTwoLacation(mCoordinates.get(mCoordinates.size() - 1), location)); 
      mCoordinates.add(location); 
     } 
    } 

現在的問題是,onLocationChanged給lat-lng誰的位置即使設備在同一地點穩定,與過去地點的差異/距離也大約是5-90米。我錯過了什麼嗎?

順便說一句,這裏的返回從兩個緯度和經度,我使用

private double getDistanceBetweenTwoLacation(Location origin, Location destination) { 
     return origin.distanceTo(destination); 
    } 
+0

你在室內做所有這些測試嗎?如果是這樣,它是很常見的跳躍很多。檢查準確度值,你會發現它很高,表明很多位置的不確定性。 – alzee

+0

你在清單中有什麼權限? –

+0

@ user3137702是的,我在做室內測試... –

回答

1
不準確

的距離的方法(和移動/漂流/跳躍)GPS修正時在室內是很常見的。如果沒有清晰的天空視圖,精確的GPS定位是不可能的。在您的Location對象中,有一個getAccuracy()方法返回一個浮點數。該值是以米爲單位的定位精度,具有68%(1標準偏差)的置信度,並表示圓的半徑。

在室內時,您可能會看到準確度值爲20,30,甚至可能是50米,而緯度&在該距離內跳遠。一旦到戶外,準確度值應該降到10米以下,通常在5米以下,而且你的位置會跳得少得多。

tl; dr:GPS在室內沒有給出準確的結果。

相關問題