使用" distanceBetween"跟踪距离是错的,让我疯了

时间:2012-02-14 12:06:20

标签: android gps tracking distance

跟踪驱动距离时遇到问题。 我在本文中尝试过:Source-Code is completely also there

驱动距离的总和不是我车内显示的实际驾驶距离。 在2-3公里之后,我在车上的显示距离与200-800米的应用程序之间存在差异。在这短距离:o) 我也认识到的是距离,例如在驾驶曲线时,正在递减。 我还为侦听器尝试了几个minTime和minDistance值,但没有成功。

我做错了什么? 当我使用“MyTracks”应用程序时,驱动距离实际上非常精确且正确。 我只需要一种方法来从开始到结束总结完全驱动的方式,而不是在谷歌地图中显示它。这真的很复杂吗?

亲切的问候 弗兰克

好的,代码中有趣的部分:

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

哦,当我把它写下来时,似乎距离是在起点和当前点之间计算的。不是最后两次测量与所有值之和,不是吗?

1 个答案:

答案 0 :(得分:0)

根据您指定的标准,您可能会进入预防位置。增加功率要求。另外,请注意要返回的提供程序的名称。如果您想要准确性,那么您将需要GPS提供商。

有关详细信息,请参阅以下链接: I keep getting an inaccurate location in Android