Как я могу рассчитать расстояние между двумя точками GPS в Java? - PullRequest
23 голосов
/ 15 сентября 2010

Я использовал этот код, но он не работает:

Требуется расстояние между двумя 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();
}

Ответы [ 6 ]

21 голосов
/ 15 сентября 2010

Долгота и широта указаны в градусах (0-360). Если вы хотите преобразовать градусы в радианы (0-2 & pi;), вам нужно разделить на 360 и умножить на 2 & pi ;, (или, эквивалентно, умножить на & pi; / 180 ). Однако в вашем коде вы умножаете на 180 / & pi; .

То есть изменить

double d2r = (180 / Math.PI);

в

double d2r = Math.PI / 180;
9 голосов
/ 19 августа 2012

посмотрите 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 км

Я написал эту библиотеку для одного моего проекта.

8 голосов
/ 22 июля 2011

Решение от 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 в метрах .

2 голосов
/ 30 декабря 2011

Расстояние между двумя точками (и множество других полезных вещей) можно найти по адресу: http://www.movable -type.co.uk / scripts / latlong.html

1 голос
/ 26 апреля 2011

http://www.androidsnippets.com/distance-between-two-gps-coordinates-in-meter показывает, что double d2r = (180 / Math.PI);

0 голосов
/ 17 декабря 2016

Расстояние можно рассчитать с помощью библиотеки Esri Geometry: geodesicDistanceOnWGS84 .

Я бы предположил, что JTS также имеет метод для вычисления расстояния.

...