Double Possible:
De travail avec la latitude/longitude valeurs en JavaDupliquer:
- De travail avec la latitude/longitude valeurs en Java
- Comment puis-je calculer la distance entre les deux latitude longitude des points?
J'ai besoin de calculer la distance entre deux points donnés par deux coordonnées. Le projet sur lequel je travaille est un Java-projet, donc Java-code sera grande, mais le pseudo-code peut également être donné, alors je peux implémenter moi-même :)
Comme vous le savez probablement, il existe trois façons de représenter les coordonnées:
- Diplômes:Minutes:Secondes (49°30'00"N., 123°30'00"W)
- En degrés Minutes Décimales (49°30.0', -123°30.0'), (49d30.0m,-123d30.0')
- Degrés décimaux (49.5000°,-123.5000°), avec généralement de 4 à 6 nombres décimaux.
C'est la troisième voie, mes coordonnées sont données dans le, donc le code pour ces valeurs seront privilégiées :)
Réponses
Trop de publicités?Basé sur une autre question sur stackoverflow , j'ai obtenu ce code .. Cela calcule le résultat en mètres, pas en miles :)
public static float distFrom(float lat1, float lng1, float lat2, float lng2) {
double earthRadius = 6371; //kilometers
double dLat = Math.toRadians(lat2-lat1);
double dLng = Math.toRadians(lng2-lng1);
double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
Math.sin(dLng/2) * Math.sin(dLng/2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
float dist = (float) (earthRadius * c);
return dist;
}
RacZo
Points
5731
Vous pouvez utiliser la bibliothèque de géodésie Java pour GPS , elle utilise les formules de Vincenty qui tiennent compte de la courbure de la surface de la terre.
La mise en œuvre se déroule comme ceci:
import org.gavaghan.geodesy.*;
...
GeodeticCalculator geoCalc = new GeodeticCalculator();
Ellipsoid reference = Ellipsoid.WGS84;
GlobalPosition pointA = new GlobalPosition(latitude, longitude, 0.0); // Point A
GlobalPosition userPos = new GlobalPosition(userLat, userLon, 0.0); // Point B
double distance = geoCalc.calculateGeodeticCurve(reference, userPos, pointA).getEllipsoidalDistance(); // Distance between Point A and Point B
La distance résultante est en mètres.
jessn
Points
1
En C ++, cela se fait comme ceci:
#define LOCAL_PI 3.1415926535897932385
double ToRadians(double degrees)
{
double radians = degrees * LOCAL_PI / 180;
return radians;
}
double DirectDistance(double lat1, double lng1, double lat2, double lng2)
{
double earthRadius = 3958.75;
double dLat = ToRadians(lat2-lat1);
double dLng = ToRadians(lng2-lng1);
double a = sin(dLat/2) * sin(dLat/2) +
cos(ToRadians(lat1)) * cos(ToRadians(lat2)) *
sin(dLng/2) * sin(dLng/2);
double c = 2 * atan2(sqrt(a), sqrt(1-a));
double dist = earthRadius * c;
double meterConversion = 1609.00;
return dist * meterConversion;
}