Как я могу рассчитать расстояние между двумя точками gps в Java?
Я использовал этот код, но он не работает:
Требуется расстояние между двумя координатами gps, такими как 41.1212, 11.2323 в километрах (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();
}
Ответы
Ответ 1
Долгота и широта даны в градусах (0-360). Если вы хотите преобразовать градусы в радианы (0-2 & pi;), вам нужно разделить на 360 и умножить на 2 & pi; (или, что то же самое, умножить на & pi;/180). Однако в вашем коде вы умножаетесь на 180/& pi;.
То есть измените
double d2r = (180 / Math.PI);
в
double d2r = Math.PI / 180;
Ответ 2
Решение http://www.androidsnippets.com/distance-between-two-gps-coordinates-in-meter.
Работает только в том случае, если точки достаточно близки, чтобы вы могли опустить ту землю, которая не является правильной.
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;
}
//
см. Расстояние между двумя координатами GPS в метре.
Ответ 3
посмотрите Geocalc
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");
Расстояние 1448.7325760822912 км
Я написал эту библиотеку для одного моего проекта.
Ответ 4
http://www.androidsnippets.com/distance-between-two-gps-coordinates-in-meter
показывает, что double d2r = (180/Math.PI);
Ответ 5
Расстояние между двумя точками (и множеством других полезных вещей) можно найти по адресу: http://www.movable-type.co.uk/scripts/latlong.html
Ответ 6
Расстояние можно рассчитать с помощью библиотеки Esri Geometry: geodesicDistanceOnWGS84.
Я бы предположил, что JTS также имеет метод вычисления расстояния.