1

Я использую API Google Maps v3 в своем проекте java. Мне нужно найти евклидову расстояние между двумя точками. Но когда я использую обычную формулу для вычисления евклидова расстояния результат как-то неправильно:вычислить эвклидовое расстояние с координатами карт Google

Например:

Пусть у меня есть две точки Нью-Йорк (43,2994285, -74,2179326) и Стокгольм (59,3293235 , 18.0685808) и я хочу рассчитать евклидово расстояние для этих двух точек:

двойное расстояние = Math.Sqrt (Math.pow (43.2994285 - 59.3293235, 2) + Math.pow (-74.2179326 - 18.0685808, 2)); distance = 93.66834091217483

результат явно не прав.

Тогда я понял, что начальная координата не является (0,0), как в декартовой системе координат. На самом деле составляет 51 ° 28 '38 "N, 0 ° 00' 00" W (WGS 84). Точка референции Greenwich(51.4825766, -0.0076589).

Поэтому процедура для вычисления новых координат, как это:

Нью-Йорк (| 51,4825766 - 43,2994285 |, | -0.0076589- (-74,2179326) |) = Нью-Йорк (8,1831481, 74,2102737)

Стокгольм (| 51.4825766 - 59.3293235 |, | -0.0076589 - 18.0685808 |) = Стокгольм (7.8467469, 18.0762397)

А затем примените формулу для евклидова расстояния. Мой вопрос - это правильный подход, и есть ли другой способ сделать это?

+1

Почему, на ваш взгляд, ответ неправильный? Вы рассчитываете в градусах. – stark

+0

Но фактическое расстояние согласно этому сайту: http://www.freemaptools.com/how-far-is-it-between.htm от Нью-Йорка до Стокгольма 6326.564 км. – myanmar

+1

Эвклидовое расстояние работает только на плоскости – stark

ответ

2

Вы должны использовать формулу Haversine вычислить great-circle distance между двумя точками - то есть кратчайшее расстояние по поверхности Земли - см здесь описание http://www.movable-type.co.uk/scripts/latlong.html

В качестве альтернативы (цитата из here), если вам нужно использовать евклидово расстояние

Если две точки находятся рядом друг с другом, например, в том же городе, оценивая большой круг с прямой линией в широты долготы места будет производить минимальную ошибку, и будет много быстрее вычислить. Незначительным осложнением является тот факт, что длина степени долготы зависит от широты: степень долгота охватывает 111 км на экваторе, но половина этого на 60 ° северной широты. Регулировка для этого легко: умножьте долготу на косинус широты. Тогда вы можете просто взять евклидово расстояние между двумя точками, и умножить на длину степени:

distance(lat, lng, lat0, lng0): 
    deglen := 110.25 
    x := lat - lat0 
    y := (lng - lng0)*cos(lat0) 
    return deglen*sqrt(x*x + y*y) 

и скорость, что до дальнейшего вы можете приблизиться к COS вычисления с использованием полинома приближение.

+0

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

+1

нет, это способ. Расстояние эвклидов дало бы вам расстояние, когда вы могли бы прорезать землю, а не кратчайшее расстояние над земной поверхностью. –

+0

Могу ли я каким-то образом изменить две координаты (Нью-Йорк, Стокгольм) и используя координату Гринвича, вычислить новые координаты для Нью-Йорка и Стокгольм, на которых мы можем использовать формулу Евклида. – myanmar

Смежные вопросы