Яндекс.Карты API. Ищем расстояние от МКАД до указанной точки.


Думаю, что жители подмосковья часто сталкивались с ситуацией, когда за курьерскую доставку отдельно просят денюшку за каждый километр от мкада. Недавно встала задача хоть немного автоматизировать подсчёт расстояния "от мкада" до указанной точки. Причём не по прямой, а по маршруту следования машины. По дорогам то бишь.

90381e2e316545c148b7913d830490fa.png

Благодаря широким возможностям Yandex.maps API это сделать достаточно просто.

Итак, задача. Показать карту, дать возможность пользователю кликнуть по какому-либо месту на карте, посчитать расстояние от мкада до этой точки.
Главная проблема тут - найти ближайшую точку мкада. Автоматизировать это можно достаточно приблизительно, но нам и не нужна точность до метра.

Сегодня: рисуем Яндекс.карту; учимся рисовать на ней полигоны и метки; ищем ближайшие точки из списка объектов; составляем маршрут и считаем дистанцию между двумя точками.

Ссылки на примеры и доки в конце статьи.

Алгоритм
1. Надо понять что такое мкад.
2. По клику определяем ближайщую точку мкада к кликнутому адресу.
3. Составляем маршрут между этими двумя точками
4. Спрашиваем длину этого маршрута.

Что такое МКАД
Решение в Песочнице даёт нам понять, что по определению Яндекса, МКАД - это фигура-полигон, составленная по точкам-координатам. Мутить с лишним json не хотелось, поэтому массив координат просто был вынесен в отдельную переменную mkad_coords в начале файла.
Строим полигон по этим координатам.

b1e695f43a2751f42b7ac385f231cb8d.png

Получаем отрисованный мкад!

070429ac00ed94bd400c41641163ce87.png

Ищем ближайшую точку мкада
По событию клика на карте отрисовываем на этом месте метку. Для расчётов она нам не нужна, но мы же для людей делаем =)
f726ae2e45857989c3aaf90c83763af8.png

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

09e393c8017104751ec71f6d91568cec.png

Вот что получится если добавить все метки видимыми. Но делать так не надо, это приводит к большим тормозам из-за количества объектов. =)

00a80499ea2b77f1cc227bc1cafe1b26.png

Вот теперь можно найти ближайшую точку мкада.
4f81b7aab5aeab2bc197a1c3198aa2de.png


Маршрут
Теперь у нас есть две точки - куда кликнули и ближайшая точка мкада. Просим яндекс составить нам маршрут, по которому будем определять расстояние.

d07b1fe25bdf4f0d992522668a2f81cb.png


Этот метод, конечно же, очень приблизителен. Ближайшая точка мкада - это же не обязательно точка съезда. Это можно увидеть если потыкать по карте при включённой отрисовке маршрута.


Скачать пример из статьи
МКАД в Песочнице Яндекс.Карт
Статья на Хабре на старой версии API


Просмотров: 20946