Расстояние между двумя точками широты и долготы

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

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

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

Спасибо...


person Vassilis    schedule 04.04.2011    source источник
comment
google 'большое расстояние' - вы должны иметь возможность передавать эти значения широты и долготы в стандартизованные функции для получения расстояний по поверхности земли.   -  person Randy    schedule 04.04.2011
comment
Возле полюсов забавно действует долгота. На широте +/- 90 градусов долгота равна 0 расстоянию. Поэтому я полагаю, что пифагорейский путь не везде будет работать.   -  person cHao    schedule 04.04.2011
comment
Если вы сразу после ближайшего, не делайте вычисления квадратным корнем. Если a ‹b, то a a‹ b b (при условии, что вы сохраняете все положительно). Сохраняйте корень до тех пор, пока вам действительно не понадобится значение расстояния.   -  person Pete Stensønes    schedule 04.04.2011


Ответы (2)


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

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

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

person Marcelo Cantos    schedule 04.04.2011
comment
Существует формула JavaScript для вычисления расстояния по большому кругу: stackoverflow.com/a/27943/368691. - person Gajus; 30.04.2013
comment
Можно ли как-нибудь преобразовать d в метры / мили? Я спрашиваю, потому что меня смущает тот факт, что, поскольку существует 180 градусов широты, но 360 долготы, я думаю, что d может быть полезен только для сравнения расстояний, но не для вычисления абсолютных расстояний ... Но я бы ОЧЕНЬ был счастлив, если d можно как-то преобразить :) - person ZioBit; 26.10.2015

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

person Argiropoulos Stavros    schedule 05.04.2011