geograficos - ¿Cómo puedo calcular la distancia entre dos puntos gps en Java?
distancia entre dos puntos java netbeans (6)
La distancia entre dos puntos (y muchas otras cosas útiles) se puede encontrar en: http://www.movable-type.co.uk/scripts/latlong.html
Utilicé este código pero no funciona:
Necesita la distancia entre dos coordenadas gps como 41.1212, 11.2323 en kilómetros (Java)
double d2r = (180 / Math.PI);
double distance = 0;
try{
double dlong = (endpoint.getLon() - startpoint.getLon()) * d2r;
double dlat = (endpoint.getLat() - startpoint.getLat()) * d2r;
double a =
Math.pow(Math.sin(dlat / 2.0), 2)
+ Math.cos(startpoint.getLat() * d2r)
* Math.cos(endpoint.getLat() * 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;
} catch(Exception e){
e.printStackTrace();
}
La distancia se puede calcular con la biblioteca de geometría Esri: geodesicDistanceOnWGS84 .
Supongo que JTS también tiene un método para calcular la distancia.
La longitud y la latitud se dan en grados (0-360). Si quieres convertir grados a radianes (0-2π) necesitas dividir por 360 y multiplicar por 2π, (o de manera equivalente, multiplicar por π / 180 ). Sin embargo, en tu código, multiplicas por 180 / π .
Es decir, cambio
double d2r = (180 / Math.PI);
dentro
double d2r = Math.PI / 180;
La solución de http://www.androidsnippets.com/distance-between-two-gps-coordinates-in-meter .
Solo funciona si los puntos están lo suficientemente cerca como para que pueda omitir que la Tierra no tenga una forma regular.
private double gps2m(float lat_a, float lng_a, float lat_b, float lng_b) { float pk = (float) (180/3.14169); float a1 = lat_a / pk; float a2 = lng_a / pk; float b1 = lat_b / pk; float b2 = lng_b / pk; float t1 = FloatMath.cos(a1)*FloatMath.cos(a2)*FloatMath.cos(b1)*FloatMath.cos(b2); float t2 = FloatMath.cos(a1)*FloatMath.sin(a2)*FloatMath.cos(b1)*FloatMath.sin(b2); float t3 = FloatMath.sin(a1)*FloatMath.sin(b1); double tt = Math.acos(t1 + t2 + t3); return 6366000*tt; } //
http://www.androidsnippets.com/distance-between-two-gps-coordinates-in-meter muestra que d2r doble (180 / Math.PI);
Coordinate lat = new GPSCoordinate(41, .1212);
Coordinate lng = new GPSCoordinate(11, .2323);
Point point = new Point(lat, lng);
lat = new DegreeCoordinate(51.4613418);
lng = new DegreeCoordinate(-0.3035466);
Point point2 = new Point(lat, lng);
System.out.println("Distance is " + EarthCalc.getDistance(point2, point) / 1000 + " km");
La distancia es de 1448.7325760822912 km.
Escribí esa biblioteca para uno mi proyecto.