Как да изчислим разстоянието с помощта на координати от LocationManager

Използвам LocationManager, за да получа стойностите на Latitude и Longitude на даден потребител. Тези стойности се актуализират редовно в база данни.

Сега искам да разбера разстоянието между двама потребители въз основа на съхранените стойности за географска ширина и дължина. Искам да покажа съобщение, когато разстоянието между двама потребители е по-малко от (да речем 100 метра). Може ли някой да ме напътства с урок или примерен код за това как да го постигна.


person Rahul Kalidindi    schedule 28.12.2010    source източник


Отговори (2)


Можете да разгледате класа Местоположение. Можете да зададете географската дължина и ширина и има distanceTo метод, който можете да използвате

person ccheneson    schedule 28.12.2010
comment
Благодаря за отговора... Намерих и функция тук (android.voxisland.com/code_examples /)... Ще използвам и двете и ще разбера кой от тях може да даде по-добра точност. - person Rahul Kalidindi; 28.12.2010

Ou pode utilizar este metodo que eu desenvolvi... Или можете да използвате този метод, който разработих...

public static Double distance(latitudeA, latitudeB, longitudeA, longitudeB) {
        double radius = 3958.75;
        double dlat = ToRadians(Double.parseDouble(String.valueOf(latitudeB))
                - Double.parseDouble(String.valueOf(latitudeA)));
        double dlon = ToRadians(Double.parseDouble(String.valueOf(longitudeB))
                - Double.parseDouble(String.valueOf(longitudeA)));
        double a = Math.sin(dlat / 2)
                * Math.sin(dlat / 2)
                + Math.cos(ToRadians(Double.parseDouble(String.valueOf(latitudeA))))
                * Math.cos(ToRadians(Double.parseDouble(String.valueOf(latitudeB)))) * Math.sin(dlon / 2)
                * Math.sin(dlon / 2);
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
        Double d = radius * c;
        double meterConversion = 1609.00;
        return d * meterConversion;
    }

    private static double ToRadians(double degrees) {
        double radians = degrees * 3.1415926535897932385 / 180;
        return radians;
    }
person Bolivar Amâncio Neto    schedule 13.03.2013
comment
Math.toRadians(градуси) може да бъде по-точен. Не съм сигурен - person Joakim Sandqvist; 23.05.2014