Программа для расчета расстояний между точками

Положим, вы знаете широту и долготу 2-х точек на Земле. Кратчайшее расстояние между этими точками – это протяженность длины дуги окружности. В данном случае мы подразумеваем, что Земля имеет круглую форму и напоминает сферу. Поэтому мы с полной уверенностью можем назвать Землю сфероидом.
Если вы хотите рассчитать расстояние между двумя имеющимися координатами, правило для расчета расстояний на плоскости, которое известно нам из школьной программы, тут не поможет. Здесь вы должны воспользоваться формулой расчета длины дуги.

Вы не хотите тратить время на поиск формулы и расчеты? Не печальтесь! Наш онлайн-калькулятор по расчету расстояния между двумя координатами будет для вас хорошим подспорьем. Все, что вам нужно – это знать ширину и долготу. Наша система сделает все за вас!

Точность вычисления будет близка к максимуму.

Источник: allcalc.ru

Расстояние между двумя координатами

Известны географические координаты двух точек на Земле. Кратчайшим расстоянием между ними является длина дуги круга, проведенного на сфере по этим двум точкам. Здесь я придерживаюсь убеждения, что Земля не плоская, а круглая, а точнее, имеет форму, приближенную к сфере, то есть, Земля — сфероид.

А.5.9 Евклидово расстояние между точками (длина отрезка)


Формула для расчета расстояний на плоскости, известная всем из курса школьной геометрии, тут не подойдет, нужна формула расчета длины дуги. Это так называемая «модифицированная формула гаверсинусов».
Здесь http://en.wikipedia.org/wiki/Great_circle_distance все описано достаточно подробно.
Поскольку в расчете участвует радиус, а у Земли, как у не совсем правильной сферы, он разный, скажем на северном полюсе (6356.752 км) и на экваторе (6378.137 км), то в расчете берется среднее значение (6371.008 км), что должно давать, по утверждению той же Википедии, ошибку около 0.5%. Значения радиусов соответствуют WGS 84.

Читайте также:
Программа которая удаляет файлы по расписанию

В калькуляторе ниже значения координат по умолчанию соответствуют Москве и Санкт-Петербургу.

Источник: planetcalc.ru

Какие существуют бесплатные сервисы для расчета расстояний между координатами на карте?

Существуют ли какие-то сервисы/движки, позволяющие произвести расчет расстояний между координатами с использованием, например, api? Не osrm/YOURS/openrouterservice (требующие использования собственных ресурсов) и не коммерческие. Приблизительно несколько млн. точек. Точность расчета не принципиальна.

  • Вопрос задан более двух лет назад
  • 856 просмотров

2 комментария

Средний 2 комментария

Zoominger

Точность расчета не принципиальна.

Рандомных значений тогда напихайте, лол.

freeExec

Расстояние между точками

Рональд Макдональд, но справедливости ради, в некоторых задачах нужны просто относительные расстояния — кто ближе дальше, а не абсолютное в метрах. В пределах города можно вообще забить на сферу и считать градусы как в декартовой системе.

Решения вопроса 1

trapwalker

Программист, энтузиаст

Зачем вам сторонние сервисы? Если на входе координаты, то можно использовать локально либу https://gdal.org/
Если точки уже в постгресе, то поставьте postgis и там все необходимые функции прямо в базе. Хоть на лету считайте, хоть агрегируйте.
Могу написать вам лично такой веб-сервис незадорого=)

Ответ написан более двух лет назад
Нравится 3 1 комментарий
большое спасибо
Ответы на вопрос 4

freeExec

Участник OpenStreetMap

Математика бесплатна. Формула расчёта длины на сфере (вам же точность не важна) выведена ещё тысячу лет назад.

Ответ написан более двух лет назад
Нравится 6 3 комментария

trapwalker

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

Hx6MNPp.png

Сергей Паньков, если точность не нужна, то библиотека заменяется функцией из пары строк
источник

Читайте также:
Как написать свою программу с интерфейсом

А вот когда нужно не просто расстояние, а по дорогам, да учесть водные преграды, да еще карту высот, задержки на границах и пробки. вот тогда «ой».

trapwalker

Stalker_RED, если нужно по дорогам, то project-osrm.org
Высоты тоже можно оттрассировать по локальной карте высот. Карту тянуть тайлами. ну да, согласен, тут много всего разворачивать и поддерживать. Проще как сервис подключить.

2ord

SQL СУБД с поддержкой OpenGIS имеют функцию ST_Distance()
Ответ написан более двух лет назад
Нравится 2 1 комментарий
29а класс средней школы №7
честно стырил код:

// Радиус земли define(‘EARTH_RADIUS’, 6372795); /* * Расстояние между двумя точками * $φA, $λA — широта, долгота 1-й точки, * $φB, $λB — широта, долгота 2-й точки * Написано по мотивам http://gis-lab.info/qa/great-circles.html * Михаил Кобзарев * */ function calculateTheDistance ($φA, $λA, $φB, $λB) < // перевести координаты в радианы $lat1 = $φA * M_PI / 180; $lat2 = $φB * M_PI / 180; $long1 = $λA * M_PI / 180; $long2 = $λB * M_PI / 180; // косинусы и синусы широт и разницы долгот $cl1 = cos($lat1); $cl2 = cos($lat2); $sl1 = sin($lat1); $sl2 = sin($lat2); $delta = $long2 — $long1; $cdelta = cos($delta); $sdelta = sin($delta); // вычисления длины большого круга $y = sqrt(pow($cl2 * $sdelta, 2) + pow($cl1 * $sl2 — $sl1 * $cl2 * $cdelta, 2)); $x = $sl1 * $sl2 + $cl1 * $cl2 * $cdelta; // $ad = atan2($y, $x); $dist = $ad * EARTH_RADIUS; return $dist; >$lat1 = 77.1539; $long1 = -139.398; $lat2 = -77.1804; $long2 = -139.55; echo calculateTheDistance($lat1, $long1, $lat2, $long2) . » метров»; // Вернет «17166029 метров»

Источник: qna.habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru