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

Есть ли у API Яндекс, Google или других карт БЕСПЛАТНАЯ возможность НЕОГРАНИЧЕННО рассчитывать расстояние между точками?

Здравствуйте.
Вынашиваю идею проекта - каталога объектов, где акцент будет сделан на расположение объектов на карте.
Очень полезным функционалом была бы возможность сортировки объектов по удаленности от указанного адреса.

Вопрос: можно ли с помощью API Яндекс или Google (если нет, то других) карт БЕСПЛАТНО рассчитывать расстояние между координатами в больших количествах?
То есть, пользователь указал местоположение и от этой точки нашлось расстояние до 10 ближайших объектов, после чего они отобразились в списке, отсортированные по мере удаленности. По мере прокрутки списка подгружаются еще по 10 объектов и рассчитывается расстояние.

Нашел в интернете, что такая возможность есть в API Яндекса и Google, однако непонятно, в каких объемах можно использовать этот функционал.

Заранее благодарен.
  • Вопрос задан
  • 2187 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 2
sayber
@sayber
Да, я программирую на PHP и еще асинхронно!
Возможно есть у OSM.

Я писал свой алгоритм расчета маршрутов для карт google.
Т.е. на карту можно поставить сколько хочешь точек и по ним будет прорисован маршрут.
Данное решение оказалось на 8% точнее нежели предлагает google (пути и время короче на 8%, т.к. учитываются особенности местности и др. факторы).
Ответ написан
forgotten
@forgotten
Руководитель разработки API Яндекс.Карт
Бесплатно рассчитывать неограниченное количество маршрутов не даёт никто (у Яндекса ограничение 25К/сутки). Можно поднять свой сервер OSM, но сервера нынче тоже не бесплатные.

Единственное, что могу предложить — считать расстояния по прямой, а не по дорогам.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
G0rDi
@G0rDi
Портировал как то на JS чей то алгоритм, в расчет идет кривизна шарика, координаты можно использовать прям из карта Гугла или Яши. Результат возвращает в метрах
function calculateTheDistance (shir_A, dolg_A, shir_B, dolg_B) {
			lat1 = shir_A * Math.PI / 180;
			lat2 = shir_B * Math.PI / 180;
			long1 = dolg_A * Math.PI / 180;
			long2 = dolg_B * Math.PI / 180;
			cl1 = Math.cos(lat1);
			cl2 = Math.cos(lat2);
			sl1 = Math.sin(lat1);
			sl2 = Math.sin(lat2);
			delta = long2 - long1;
			cdelta = Math.cos(delta);
			sdelta = Math.sin(delta);
			y = Math.sqrt(Math.pow(cl2 * sdelta, 2) + Math.pow(cl1 * sl2 - sl1 * cl2 * cdelta, 2));
			x = sl1 * sl2 + cl1 * cl2 * cdelta;
			ad = Math.atan2(y, x);
			dist = ad * 6372795;
			return dist;
		}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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