algorithm - широте - прямоугольная система координат в пространстве формула расстояния между двумя точками
Рассчитать расстояние между двумя точками долготы широты?(Формула Хаверсина) (20)
Как рассчитать расстояние между двумя точками, заданными широтой и долготой?
Для уточнения, я хотел бы расстояние в километрах; точки используют систему WGS84, и я хотел бы понять относительную точность доступных подходов.
Haversine определенно является хорошей формулой, вероятно, в большинстве случаев, другие ответы уже включают его, поэтому я не собираюсь занимать пространство. Но важно отметить, что независимо от того, какая формула используется (да, не только одна). Из-за огромного диапазона возможной точности, а также требуемого времени вычисления. Выбор формулы требует немного больше мысли, чем простой простой ответ.
Это сообщение от человека в НАСА, самое лучшее, что я нашел при обсуждении вариантов
Например, если вы просто сортируете строки по расстоянию в радиусе 100 миль. Формула плоской земли будет намного быстрее, чем хаверсин.
Обратите внимание, что есть только один косинус и один квадратный корень. Vs 9 из них по формуле Хаверсина.
Python implimentation Origin - это центр смежных Соединенных Штатов.
Чтобы получить ответ в килограммах, просто установите мили = ложь.
В Mysql используйте следующую функцию, передавая параметры, используя POINT(LONG,LAT)
В других ответах реализация в r отсутствует.
Вычисление расстояния между двумя точками довольно просто с функцией distm из пакета geosphere :
Поскольку земля не является абсолютно сферической, формула Винценти для эллипсоидов , вероятно, является лучшим способом расчета расстояний. Таким образом, в пакете geosphere вы используете:
Конечно, вам необязательно использовать пакет geosphere , вы также можете рассчитать расстояние в базе R с помощью функции:
Вот принятая реализация ответа, перенесенная на Java, в случае, если кому-то это нужно.
Вот простая функция javascript, которая может быть полезна из этой link .. как-то связано, но мы используем плагин google earth javascript вместо карт
Единицы tho находятся не на расстоянии, а в соотношении относительно ваших координат. Существуют и другие вычисления, которые вы можете заменить ссылкой на функцию getApproximateDistanceUnits link
Затем я использую эту функцию, чтобы определить, находится ли долгота широты в радиусе
точка может быть определена как
то вы можете сделать свое дело, чтобы увидеть, находится ли точка в пределах области с радиусом:
Вот реализация Java формулы Хаверсина.
Обратите внимание, что здесь мы округляем ответ до ближайшего километра.
Вот реализация VB.NET, эта реализация даст вам результат в KM или Miles на основе значения Enum, которое вы передаете.
Все вышеприведенные ответы предполагают, что земля является сферой. Тем не менее, более точное приближение будет иметь вид сплющенного сфероида.
Вы можете использовать построение в CLLocationDistance, чтобы вычислить это:
В вашем случае, если вам нужны километры, просто разделите их на 1000.
Мне не нравится добавить еще один ответ, но API карт Google v.3 имеет сферическую геометрию (и многое другое). После преобразования WGS84 в десятичные градусы вы можете сделать это:
Ни слова о том, насколько точны расчеты Google или даже какая модель используется (хотя она и говорит «сферическая», а не «геоида». Кстати, расстояние «прямой линии», очевидно, будет отличаться от расстояния, если вы путешествуете по поверхность земли, которая, по-видимому, кажется очевидной.
Мне нужно было рассчитать много расстояний между очками для моего проекта, поэтому я пошел дальше и попытался оптимизировать код, который я нашел здесь. В среднем в разных браузерах моя новая реализация выполняется в 2 раза быстрее, чем самый предыдущий ответ.
Вы можете играть с моим jsPerf и видеть результаты здесь .
Недавно мне нужно было сделать то же самое в python, так что вот реализация python :
И ради полноты: Haversine на wiki.
Чтобы рассчитать расстояние между двумя точками на сфере, вам нужно выполнить вычисление Великого круга .
Существует несколько библиотек C / C ++, которые помогут с проекцией карты в MapTools если вам нужно перепроверить свои расстояния до плоской поверхности. Для этого вам понадобится проекционная строка различных систем координат.
Вы также можете найти MapWindow полезным инструментом для визуализации точек. Кроме того, как его открытый источник, это полезное руководство по использованию библиотеки proj.dll, которая, как представляется, является основной библиотекой проекций с открытым исходным кодом.
Эта link может быть полезна для вас, поскольку она подробно описывает формулу Хаверсина для расчета расстояния.
Этот скрипт [в Javascript] вычисляет расстояния между двумя точками между двумя точками - то есть самое короткое расстояние над земной поверхностью - с использованием формулы «Хаверсина».
Это скорее зависит от того, насколько вы точны, и на какой основе определяются лат и долго. Очень, очень приблизительно вы делаете небольшой сферический тригг, но исправляя тот факт, что земля не является сферой, формулы усложняют.
Этот скрипт [в PHP] вычисляет расстояния между двумя точками.
Я сократил вычисление, упростив формулу.
вот пример в postgres sql (в км, для миль, замените 1.609344 на 0.8684)