Расстояние между двумя широтами - PullRequest
6 голосов
/ 04 апреля 2011

Можно ли сравнивать расстояния классическим способом (расстояние между 2 точками: d = sqrt(pow(lat2-lat1, 2) + pow(lon2-lon1, 2))), используя широту и долготу, возвращаемые из Google Apis, без преобразования в метры или sth?Мне это нужно просто для сравнения, чтобы найти ближайшую точку из ряда точек к контрольной точке.Например:

Допустим, у нас есть две (широта, долгота) точки: (40.2535425,22.88245345) и (40.2565795,22.8884539), и мы хотим найти ведьму, ближайшую к (40.2335425,22.83245345).Можно ли применять вышеуказанный код для определения расстояний?Или нам нужно найти расстояние, скажем, в метрах (используя формулу haversine или что-то еще), сначала для каждой точки от контрольной точки, а затем сравнить значения?

Я задаю этот вопрос, потому что я незнать, что именно значения, возвращаемые Google API, как лат, долг!Я имею в виду, они не в градусах, не так ли?

Спасибо ...

Ответы [ 2 ]

2 голосов
/ 04 апреля 2011

Нет, потому что линии долготы сходятся к полюсам.Если ваши точки относительно близко друг к другу, вы можете приблизить расстояние таким образом:

d = sqrt(pow(lat2-lat1, 2) + cos(lat1)*pow(lon2-lon1, 2))

Если вам нужна большая точность на больших расстояниях, есть несколько причудливых формул для вычисления расстояний большого круга , но я считаю, что проще конвертировать в трехмерные координаты на единичной окружности, а затем сделать простое пифагорейское расстояние, за которым следует 2 sin -1 ( d / 2) для преобразования обратноугол (хотя я могу понять, что некоторые могут найти , а не найти это проще: -).

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

Вы также можете использовать computeDistanceBetween () из новой библиотеки геометрии, которая, я думаю, возвращает расстояние в метрах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...