Формула Хаверсина для расстояния менее 5 метров

Я пытаюсь использовать формулу haversin, чтобы предотвратить обновление таблицы mysql. Я реализую приложение, основанное на краудсорсинге, где данные mac, route, lat, long записываются устройствами passangers im bus и отправляются на сервер.

Моя таблица базы данных имеет MAC-адрес как UNIQUE KEY. Поэтому, чтобы избежать того, что другой пассажир на той же шине хранит свои данные в таблице, я бы отфильтровал эти запросы, используя Haversin formula, но я попробовал это с буксировочной точкой, которая находится примерно в 20 метрах друг от друга, но я получаю число 4803.800129810092

//calculate the distance between the request's sender and all other request in the ArrayList. 

  private double haversineDistance(LatLong x, LatLong y) {  
        final int R = 6371; // Radious of the earth
    double xLat = x.getLatitude();
    double xLon = x.getLongitude();
    double yLat = y.getLongitude();
    double yLon = y.getLongitude();
    ;
    double latDistance = toRad(yLat - xLat);
    double lonDistance = toRad(yLon - xLon);
    double a = Math.sin(latDistance / 2) * Math.sin(latDistance / 2)
            + Math.cos(toRad(xLat)) * Math.cos(toRad(yLat))
            * Math.sin(lonDistance / 2) * Math.sin(lonDistance / 2);
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    double distance = R * c;

      System.out.println("The distance between two lat and long is:" + distance);

        return distance;

    }

person MrPencil    schedule 04.05.2015    source источник
comment
Как отметил @rpax, вы получаете долготу и сохраняете ее в широте.   -  person gfelisberto    schedule 04.05.2015
comment
gfelisberto: хорошо, в какой единице рассчитывается результат? Как я могу получить его в метрах?   -  person MrPencil    schedule 04.05.2015
comment
Единицы результата - это единицы, в которых вы указываете R, в настоящий момент км. Хаверсин - излишний способ определить, находятся ли две точки в пределах 5 метров.   -  person Pete Kirkham    schedule 04.05.2015
comment
Для этого существует много кода: - stackoverflow.com/questions/3694380/   -  person David George    schedule 05.05.2015


Ответы (1)


Хаверсин для этого - излишество. Пифагор адекватен.

Ниже приведена функция javascript для возврата расстояний в метрах. Я уверен, что вы можете конвертировать в Java '

function Pyth(lat1,lat2,lng1,lng2){
x = toRad(lng2-lng1) ;
y = toRad(lat2-lat1);
R = 6371000; // gives d in metres
d = sqrt(x*x + y*y) * R;
return d;
}
person david strachan    schedule 05.05.2015
comment
С формулой Хавсена я получаю значение 4-15 метров, когда я выбираю два близких исправления, но с Pythagoras я получаю значение типа 1.1979775925924383E7, 1.1979777593853703E7, 1.1979940093453636E7, что означают эти значения? Я получаю эти значения, когда тоже выбираю дальние точки? - person MrPencil; 05.05.2015
comment
Для расстояний менее 10 метров важен пятый десятичный знак координат широты и долготы. См. . - person david strachan; 05.05.2015
comment
Означает ли это, что я должен указать только 5-й знак после запятой в результате d функции pyth(), или я должен передать функции 5-й знак после запятой долготы и широты? - person MrPencil; 05.05.2015
comment
@MrPencil см. Исправленную формулу с + вместо -. Пятый десятичный знак обозначает географические координаты. Вы можете округлить d до того, что, по вашему мнению, требуется. - person david strachan; 14.05.2015