Отслеживание расстояния с помощью «distanceBetween» неверно и сводит меня с ума - PullRequest
0 голосов
/ 14 февраля 2012

У меня проблемы с отслеживанием пройденного расстояния. Я попробовал это, как в этой статье: Исходный код полностью там

СУММА пройденного расстояния - это не реальное пройденное расстояние, которое отображается в моей машине. Через 2-3 км у меня разница между отображаемым расстоянием в моей машине и приложением 200-800 метров. На этом коротком расстоянии: о) Я также понял, что расстояние, например, в то время как кривые вождения, уменьшается. Я также пробовал несколько значений minTime и minDistance для слушателя, но безуспешно.

Что я делаю не так? Когда я пользуюсь приложением «MyTracks», пройденное расстояние вычисляется очень, очень хорошо и правильно. Мне нужен только способ суммировать полностью пройденный путь от начала до конца, не отображая его на картах Google. Неужели это так сложно?

С уважением Frank

ОК, интересная часть кода:

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 голосов
/ 14 февраля 2012

С указанными вами критериями вы, вероятно, получите неточные местоположения.Увеличьте энергопотребление.Также обратите внимание на имя возвращаемого провайдера.Если вам нужна точность, вам понадобится поставщик GPS.

Для получения дополнительной информации см. Следующую ссылку: Я продолжаю получать неточное местоположение в Android

...