2011-11-12 5 views
2

suite de deux lignes calculer la latitude et lngDistance entre deux geopints

double geoLat = location.getLatitude(); // 37.422006 
double geoLng = location.getLongitude(); // -122.084095 

Dans une boucle i calculer la matrice de distance entre les points géographiques. latitude [i] et la longitude [i] se présente comme réponse JSON de google map api

distance[i]=GetLatAndLng.gps2m(geoLat, geoLng,latitude[i] ,longitude[i]); 

Cette méthode est gps2m.

public static double gps2m(double lat1, double lng1, double lat2, double lng2) { 
double l1 = Math.toRadians(lat1); 
    double l2 = Math.toRadians(lat2); 
    double g1 = Math.toRadians(lng1); 
    double g2 = Math.toRadians(lng2); 

    double dist = Math.acos(Math.sin(l1) * Math.sin(l2) + Math.cos(l1) * Math.cos(l2) * Math.cos(g1 - g2)); 
    if(dist < 0) { 
     dist = dist + Math.PI; 
    } 
    return Math.round(dist * 6378100);//in meters 

} 
} 

Dans le tableau à distance i m obtenir la valeur comme 1.1967617E7 Je veux distance en mètres

ce qui va mal et comment obtenir la distance en mètres.

Aide !!

+0

Quel est le problème avec 1.1967617E7 en tant que valeur pour le nombre de mètres? – AbdullahC

+0

il est trop grand .. même j'utilise la méthode distanceBetween et ai même résultat. –

Répondre

5

Vous pouvez utiliser la classe Location. Vous pouvez calculer la distance de deux façons:

location.distanceTo(anotherLocation); 

ou

Location.distanceBetween(double startLatitude, double startLongitude, double endLatitude, double endLongitude, float[] results); 

Jetez un oeil à la Location documentation pour plus de détails.

+1

quelle est l'unité de startLatitude, longi .. etc. –

+0

La même chose que dans votre exemple. –

+0

Les valeurs que vous obtenez à partir de location.getLatitude(); –

4

Voici mon code:

int EARTH_RADIUS_KM = 6371; 
double lat1,lon1,lat2,lon2,lat1Rad,lat2Rad,deltaLonRad,dist,nDist; 
lat1 = latitude of location 1 

lon1 = longitude of location 1 

lat2 = latitude of location 2 

lon2 = longitude of location 2 

lat1Rad = Math.toRadians(lat1); 

lat2Rad = Math.toRadians(lat2); 

deltaLonRad = Math.toRadians(lon2 - lon1); 

dist = Math.acos(Math.sin(lat1Rad) * Math.sin(lat2Rad) + Math.cos(lat1Rad) * Math.cos(lat2Rad) * Math.cos(deltaLonRad)) * EARTH_RADIUS_KM; 

nDist = Math.round(dist*0.62); 

String strDistance = Double.toString(nDist)+" Miles"; 

Le dist que vous obtenez est en double et KM, vous pourriez vouloir arrondir la valeur que vous obtenez, faire en utilisant Math.round(dist*0.62);

* 0.62 est de convertir KM en miles.

+0

+1 merci votre méthode donne des résultats précis pour une courte distance utile !! –