2016-08-03 18 views
2

私はここで少し苦労しています。位置情報の更新を取得するためにFused APIを使用しています。私の意図は、ユーザーが歩いているときにMapにパスを描くことです。ここでAndroid融合位置情報APIがonLocationChangedで不正確な位置を返す

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); 
     } 
    } 

を受け取る方法に従って、

@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; 
    } 

が、私はものを開始します。

私は次のようにすることを実現していますは、onLocationChangedはlat-lngの場所を与えます同じ場所で装置が安定していても、過去の場所からの差/距離は何度も約5〜90メートルです。何か不足していますか?屋内ではかなり一般的であるとき

ところで、ここで私は

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

このすべてを屋内でテストしていますか?もしそうなら、それは多くの周りにジャンプするのは正常です。精度の値をチェックすれば、それは非常に高く、位置の不確実性が非常に高いことがわかります。 – alzee

+0

マニフェストにはどのような権限がありますか? –

+0

がuser3137702 @はい、私は室内でテストをしています...ここ –

答えて

1

不正確(および漂流/ジャンプ/移動)を使用し2 LAT-lngsからの距離を返すメソッドだ修正をGPS。空をはっきりと見なければ、正確なGPSの修正は不可能です。 Locationオブジェクトには、floatを返すgetAccuracy()メソッドがあります。この値は、位置補正の精度(メートル単位)で、信頼度68%(1標準偏差)で、円の半径を表します。

屋内では、正確な値は20,30、おそらくは50mで表示されますが、緯度は&で、その距離内では長い間ジャンプします。屋外では、精度値は10メートル以下、しばしば5メートル以下に下がり、あなたの位置はずっと低い頻度で飛びます。

tl; dr:GPSは屋内で正確な結果を提供しません。

関連する問題