2012-02-14 7 views
0

私は駆動距離のトラッキングに問題があります。 私はこの記事のように試しました:Source-Code is completely also there"distanceBetween"との距離が間違っていて、ナッツを動かす

駆動距離のSUMは私の車に表示される実際の駆動距離ではありません。 2〜3 ​​km後、私の車に表示される距離とアプリの距離が200〜800メートルの差があります。この短い距離で:o) 私が認識したことは、距離、駆動曲線は減少しています。 リスナーに対してminTimeとminDistanceの値をいくつか試しましたが、成功しませんでした。

私は間違っていますか? 私は "MyTracks"アプリを使用すると、駆動距離は本当に、本当に細かく正確にcaculatedされています。 Googleマップに表示することなく、完全に駆動される方法を最初から最後まで合計する方法が必要です。これは本当にとても複雑ですか?

種類は フランク

OKに関しては、コードの興味深い部分:

public void startListening(final Activity activity) 
    { 
      if (locationManager == null) 
      { 
        locationManager = (LocationManager) activity.getSystemService(Context.LOCATION_SERVICE); 
      } 

      final Criteria criteria = new Criteria(); 
      criteria.setAccuracy(Criteria.ACCURACY_FINE); 
      criteria.setAltitudeRequired(false); 
      criteria.setBearingRequired(false); 
      criteria.setCostAllowed(true); 
      criteria.setPowerRequirement(Criteria.POWER_LOW); 

      final String bestProvider = locationManager.getBestProvider(criteria, true); 

      if (bestProvider != null && bestProvider.length() > 0) 
      { 
        locationManager.requestLocationUpdates(bestProvider, GPSManager.gpsMinTime, 
            GPSManager.gpsMinDistance, locationListener); 
      } 
      else 
      { 
        final List<String> providers = locationManager.getProviders(true); 

        for (final String provider : providers) 
        { 
          locationManager.requestLocationUpdates(provider, GPSManager.gpsMinTime, 
              GPSManager.gpsMinDistance, locationListener); 
        } 
      } 
    } 

と:

private double calcGeoDistance(final double lat1, final double lon1, final double lat2, final double lon2) 
    { 
      double distance = 0.0; 

      try 
      { 
        final float[] results = new float[3]; 

        Location.distanceBetween(lat1, lon1, lat2, lon2, results); 

        distance = results[0]; 
      } 
      catch (final Exception ex) 
      { 
        distance = 0.0; 
      } 

      return distance; 
    } 

と:

private void updateMeasurement(){ 
      double distance = calcGeoDistance(startLat,startLon,currentLat,currentLon) * multipliers[unitindex]; 
      String distanceText = "" + RoundDecimal(distance,2) + " " + unitstrings[unitindex]; 

      ((TextView)findViewById(R.id.distance)).setText(distanceText); 
    } 

と:

public double RoundDecimal(double value, int decimalPlace) 
    { 
      BigDecimal bd = new BigDecimal(value); 

      bd = bd.setScale(decimalPlace, 6); 

      return bd.doubleValue(); 
    } 

ああ、私はこれを書いているように、開始点と現在の点の間に距離があると思われます。最後の2つの測定の間に、すべての値の合計があります。

+0

あなたのコードの関連部分を投稿してください。あなたが提供したリンクでは不十分です。 LATとLONGを正しい方法で使用してもよろしいですか? distanceBetween大きな円ルートの近似を使用して直線と比較すると、距離が大きくなるにつれ誤差が大きくなります(大きな円を駆動しない限り)。あなたのエラーは10%のオーダであるので、コーディングエラーが示唆されます。 – Simon

+0

OK、自分でそれを考え出しました。 計算は開始点に関して行っていました。 前の測定値に変更し、値を合計しました。 今すぐ実行されているようです。 明日の午前中に仕事に行く予定です:) – venni

答えて

0

指定した条件では、あなたは居心地の悪い場所になる可能性があります。電力要件を増やす。また、返されるプロバイダの名前にも注意してください。正確さが必要な場合は、GPSプロバイダーが必要です。

は、より多くの情報については、以下のリンクを参照してください: I keep getting an inaccurate location in Android

関連する問題