Задать вопрос

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

Существуют ли какие-то сервисы/движки, позволяющие произвести расчет расстояний между координатами с использованием, например, api? Не osrm/YOURS/openrouterservice (требующие использования собственных ресурсов) и не коммерческие. Приблизительно несколько млн. точек. Точность расчета не принципиальна.
  • Вопрос задан
  • 1466 просмотров
Подписаться 6 Средний 2 комментария
Решения вопроса 1
trapwalker
@trapwalker
Программист, энтузиаст
Зачем вам сторонние сервисы? Если на входе координаты, то можно использовать локально либу https://gdal.org/
Если точки уже в постгресе, то поставьте postgis и там все необходимые функции прямо в базе. Хоть на лету считайте, хоть агрегируйте.
Могу написать вам лично такой веб-сервис незадорого=)
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
freeExec
@freeExec
Участник OpenStreetMap
Математика бесплатна. Формула расчёта длины на сфере (вам же точность не важна) выведена ещё тысячу лет назад.
Ответ написан
2ord
@2ord
SQL СУБД с поддержкой OpenGIS имеют функцию ST_Distance()
Ответ написан
@anton99zel
29а класс средней школы №7
честно стырил код:
// Радиус земли
define('EARTH_RADIUS', 6372795);
 
/*
* Расстояние между двумя точками
* $φA, $λA - широта, долгота 1-й точки,
* $φB, $λB - широта, долгота 2-й точки
* Написано по мотивам http://gis-lab.info/qa/great-circles.html
* Михаил Кобзарев <mikhail@kobzarev.com>
*
*/
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 метров"
Ответ написан
samodum
@samodum
Какой вопрос - такой и ответ
Сервис для вычисления 2+2 не нужен? А то есть у меня
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы