web-dev-qa-db-fra.com

Calculer la distance entre deux emplacements géographiques

s'il vous plaît faire la lumière sur cette situation

À l'heure actuelle, j'ai deux tableaux ayant la latitude et la longitude des lieux proches et également l'emplacement des utilisateurs (latiude et longiude). Je veux maintenant calculer la distance entre l'emplacement de l'utilisateur et les lieux proches et les afficher dans Listview.

Je sais qu’il existe une méthode de calcul de la distance

public static void distanceBetween (double startLatitude, double startLongitude, double endLatitude, double endLongitude, float[] results);

Maintenant, quel est le problème est de savoir comment passer ces deux tableaux ayant une latitude et une latitude proches dans cette méthode et obtenir le tableau de distances.

58
john smith

http://developer.Android.com/reference/Android/location/Location.html

Regardez dans distance ou distanceBetween. Vous pouvez créer un objet Location à partir d'une latitude et d'une longitude:

Location locationA = new Location("point A");

locationA.setLatitude(latA);
locationA.setLongitude(lngA);

Location locationB = new Location("point B");

locationB.setLatitude(latB);
locationB.setLongitude(lngB);

float distance = locationA.distanceTo(locationB);

ou

private double meterDistanceBetweenPoints(float lat_a, float lng_a, float lat_b, float lng_b) {
    float pk = (float) (180.f/Math.PI);

    float a1 = lat_a / pk;
    float a2 = lng_a / pk;
    float b1 = lat_b / pk;
    float b2 = lng_b / pk;

    double t1 = Math.cos(a1) * Math.cos(a2) * Math.cos(b1) * Math.cos(b2);
    double t2 = Math.cos(a1) * Math.sin(a2) * Math.cos(b1) * Math.sin(b2);
    double t3 = Math.sin(a1) * Math.sin(b1);
    double tt = Math.acos(t1 + t2 + t3);

    return 6366000 * tt;
}
156
Karthi

Essayez ce code. nous avons ici deux valeurs de longitude et de latitude et la fonction selected_location.distanceTo (near_locations) renvoie la distance entre ces lieux en mètres 

Location selected_location=new Location("locationA");
            selected_location.setLatitude(17.372102);
            selected_location.setLongitude(78.484196);
Location near_locations=new Location("locationB");
            near_locations.setLatitude(17.375775);
            near_locations.setLongitude(78.469218);
double distance=selected_location.distanceTo(near_locations);

ici "distance" est la distance entre locationA et locationB (en mètres)

13
sandeepmaaram
    private static Double _MilesToKilometers = 1.609344;
    private static Double _MilesToNautical = 0.8684;


    /// <summary>
    /// Calculates the distance between two points of latitude and longitude.
    /// Great Link - http://www.movable-type.co.uk/scripts/latlong.html
    /// </summary>
    /// <param name="coordinate1">First coordinate.</param>
    /// <param name="coordinate2">Second coordinate.</param>
    /// <param name="unitsOfLength">Sets the return value unit of length.</param>
    public static Double Distance(Coordinate coordinate1, Coordinate coordinate2, UnitsOfLength unitsOfLength)
    {

        double theta = coordinate1.getLongitude() - coordinate2.getLongitude();
        double distance = Math.sin(ToRadian(coordinate1.getLatitude())) * Math.sin(ToRadian(coordinate2.getLatitude())) +
                       Math.cos(ToRadian(coordinate1.getLatitude())) * Math.cos(ToRadian(coordinate2.getLatitude())) *
                       Math.cos(ToRadian(theta));

        distance = Math.acos(distance);
        distance = ToDegree(distance);
        distance = distance * 60 * 1.1515;

        if (unitsOfLength == UnitsOfLength.Kilometer)
            distance = distance * _MilesToKilometers;
        else if (unitsOfLength == UnitsOfLength.NauticalMiles)
            distance = distance * _MilesToNautical;

        return (distance);

    }
3
user2871325

Il n’existe qu’un emplacement utilisateur, vous pouvez donc parcourir la liste des lieux à proximité pouvant appeler la fonction distanceTo() pour obtenir la distance. Vous pouvez la stocker dans un tableau si vous le souhaitez. 

D'après ce que j'ai compris, distanceBetween() est destiné aux endroits éloignés, le résultat est un ellipsoïde WGS84. 

3
Reno

distanceTo vous donnera la distance en mètres entre les deux emplacements donnés ej target.distanceTo (destination).

distanceEntre vous donne également la distance, mais la distance sera stockée dans un tableau de float (résultats [0]). la doc dit Si les résultats ont une longueur de 2 ou plus, le relèvement initial est stocké dans les résultats [1]. Si les résultats ont une longueur supérieure ou égale à 3, le relèvement final est stocké dans les résultats [2] 

espérons que cela aide

j'ai utilisé distanceTo pour obtenir la distance du point A au point B, je pense que c'est la voie à suivre.

1
eOnOe
public double distance(Double latitude, Double longitude, double e, double f) {
        double d2r = Math.PI / 180;

        double dlong = (longitude - f) * d2r;
        double dlat = (latitude - e) * d2r;
        double a = Math.pow(Math.sin(dlat / 2.0), 2) + Math.cos(e * d2r)
                * Math.cos(latitude * d2r) * Math.pow(Math.sin(dlong / 2.0), 2)
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
        double d = 6367 * c;
                return d;

    }
0
Vinay