Яндекс.Карты API. Ищем расстояние от МКАД до указанной точки.
17.04.2014
Думаю, что жители подмосковья часто сталкивались с ситуацией, когда за курьерскую доставку отдельно просят денюшку за каждый километр от мкада. Недавно встала задача хоть немного автоматизировать подсчёт расстояния "от мкада" до указанной точки. Причём не по прямой, а по маршруту следования машины. По дорогам то бишь.
Благодаря широким возможностям Yandex.maps API это сделать достаточно просто.
Итак, задача. Показать карту, дать возможность пользователю кликнуть по какому-либо месту на карте, посчитать расстояние от мкада до этой точки.
Главная проблема тут - найти ближайшую точку мкада. Автоматизировать это можно достаточно приблизительно, но нам и не нужна точность до метра.
Сегодня: рисуем Яндекс.карту; учимся рисовать на ней полигоны и метки; ищем ближайшие точки из списка объектов; составляем маршрут и считаем дистанцию между двумя точками.
Ссылки на примеры и доки в конце статьи.
Алгоритм
1. Надо понять что такое мкад.
2. По клику определяем ближайщую точку мкада к кликнутому адресу.
3. Составляем маршрут между этими двумя точками
4. Спрашиваем длину этого маршрута.
Что такое МКАД
Решение в Песочнице даёт нам понять, что по определению Яндекса, МКАД - это фигура-полигон, составленная по точкам-координатам. Мутить с лишним json не хотелось, поэтому массив координат просто был вынесен в отдельную переменную mkad_coords в начале файла.
Строим полигон по этим координатам.
Получаем отрисованный мкад!
Ищем ближайшую точку мкада
По событию клика на карте отрисовываем на этом месте метку. Для расчётов она нам не нужна, но мы же для людей делаем =)
Пытаемся найти ближайщую точку. Курим документацию. Понимаем, что полигон - это такая одна большая точка, и найти среди координат полигона ближайшую у нас не получится.
Возвращаемся на первый шаг, вместо полигона добавляем тучу меток, среди которых и будем искать. Делаем их невидимыми, поверх этого безобразия отрисовываем таки для красоты полигон.
Вот что получится если добавить все метки видимыми. Но делать так не надо, это приводит к большим тормозам из-за количества объектов. =)
Вот теперь можно найти ближайшую точку мкада.
Маршрут
Теперь у нас есть две точки - куда кликнули и ближайшая точка мкада. Просим яндекс составить нам маршрут, по которому будем определять расстояние.
Этот метод, конечно же, очень приблизителен. Ближайшая точка мкада - это же не обязательно точка съезда. Это можно увидеть если потыкать по карте при включённой отрисовке маршрута.
20946