рассчитать евклидово расстояние с помощью координат карт Google

1

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

Например:

Скажем, у меня есть два очка Нью-Йорк (43.2994285, -74.2179326) и Стокгольм (59.3293235, 18.0685808), и я хочу рассчитать евклидово расстояние для этих двух точек:

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

результат явно ошибочен.

Тогда я понял, что начальная координата не является (0,0), как в декартовой системе координат. На самом деле, это было 51 ° 28 '38 "N, 0 ° 00' 00" з.д. (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
    Почему вы думаете, что ответ неправильный? Вы рассчитываете в градусах.
  • 0
    Но фактическое расстояние по этому сайту: freemaptools.com/how-far-is-it-between.htm от Нью-Йорка до Стокгольма составляет 6326,564 км.
Показать ещё 5 комментариев
Теги:
google-maps
latitude-longitude
gis
coordinate-transformation

1 ответ

2

Вам нужно использовать формулу Хаверсина, чтобы вычислить расстояние между большими точками между двумя точками - то есть самое короткое расстояние над земной поверхностью - см. Описание http://www.movable-type.co.uk/scripts/latlong.html

Альтернативно (цитата отсюда), если вам нужно использовать евклидову дистанцию

Если две точки находятся рядом друг с другом, например, в одном городе, оценка большого круга с прямой в пространстве широты долготы приведет к минимальной ошибке и будет намного быстрее вычисляться. Незначительным осложнением является тот факт, что длина градуса долготы зависит от широты: градус долготы охватывает экватора на 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
    Не слишком ли это сложно? Я знаю эту формулу, но есть ли другой простой способ, и я хочу рассчитать ее по евклидовой формуле.
  • 1
    нет, это путь Евклидово расстояние даст вам расстояние, когда вы сможете прорезать землю, вместо кратчайшего расстояния над поверхностью земли
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню