Избегание платных дорог и автомагистралей

В API маршрутизации Google Maps JavaScript API основная логика построения маршрутов основана на сервисе DirectionsService, который формирует путь между точками с учётом заданных ограничений. Управление исключением платных дорог и автомагистралей реализуется через параметры запроса DirectionsRequest, позволяющие влиять на алгоритм выбора маршрута без необходимости вручную модифицировать геометрию дороги.


Параметры исключения маршрутов

В объекте запроса маршрута используются два ключевых булевых параметра:

  • avoidTolls — исключает платные дороги
  • avoidHighways — исключает автомагистрали

Оба параметра применяются на этапе расчёта маршрута и учитываются серверной частью маршрутизатора до формирования результата.

const request = {
  origin: "Karaganda, Kazakhstan",
  destination: "Almaty, Kazakhstan",
  travelMode: google.maps.TravelMode.DRIVING,
  avoidTolls: true,
  avoidHighways: true
};

Инициализация DirectionsService и DirectionsRenderer

Базовая структура работы с маршрутами строится вокруг двух компонентов:

  • DirectionsService — вычисление маршрута
  • DirectionsRenderer — визуализация результата на карте
const directionsService = new google.maps.DirectionsService();
const directionsRenderer = new google.maps.DirectionsRenderer();

const map = new google.maps.Map(document.getElementById("map"), {
  center: { lat: 49.806, lng: 73.085 }, // Караганда
  zoom: 7
});

directionsRenderer.setMap(map);

Построение маршрута с ограничениями

Запрос маршрута выполняется методом route, который принимает конфигурацию и callback-функцию обработки результата.

directionsService.route(request, (result, status) => {
  if (status === google.maps.DirectionsStatus.OK) {
    directionsRenderer.setDirections(result);
  }
});

При успешном ответе маршрут отображается на карте с учётом исключённых типов дорог.


Поведение параметра avoidTolls

avoidTolls: true влияет на выбор маршрута следующим образом:

  • исключаются участки дорог с платным проездом
  • при наличии альтернативы маршрут перестраивается через бесплатные дороги
  • при отсутствии альтернативы API может вернуть маршрут с минимальным использованием платных участков или проигнорировать ограничение в отдельных регионах

Важно учитывать, что платные дороги определяются не локальной логикой, а глобальной картографической базой Google.


Поведение параметра avoidHighways

avoidHighways: true исключает автомагистрали (highways / motorways):

  • маршрутизация смещается на региональные и городские дороги
  • увеличивается количество поворотов и пересечений
  • время в пути может существенно возрасти

Пример запроса:

const request = {
  origin: "Karaganda",
  destination: "Astana",
  travelMode: google.maps.TravelMode.DRIVING,
  avoidHighways: true
};

Комбинирование ограничений

Оба параметра могут использоваться одновременно:

const request = {
  origin: "Karaganda",
  destination: "Shymkent",
  travelMode: google.maps.TravelMode.DRIVING,
  avoidTolls: true,
  avoidHighways: true
};

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

  • увеличению времени расчёта маршрута
  • появлению более длинных альтернативных путей
  • снижению количества доступных вариантов

Альтернативные маршруты

Для анализа нескольких вариантов маршрута используется параметр provideRouteAlternatives:

const request = {
  origin: "Karaganda",
  destination: "Almaty",
  travelMode: google.maps.TravelMode.DRIVING,
  avoidTolls: true,
  provideRouteAlternatives: true
};

Каждый вариант маршрута возвращается в массиве routes, который можно визуализировать отдельно или выбрать оптимальный.


Отображение нескольких маршрутов

При наличии альтернатив требуется ручная обработка результата:

directionsService.route(request, (result, status) => {
  if (status === google.maps.DirectionsStatus.OK) {
    result.routes.forEach((route, index) => {
      console.log("Маршрут", index, route.summary);
    });

    directionsRenderer.setDirections(result);
  }
});

Для визуального разделения маршрутов используется несколько экземпляров DirectionsRenderer или кастомная отрисовка через Polyline.


Динамическое переключение ограничений

Часто параметры избегания дорог изменяются динамически в зависимости от пользовательского выбора или бизнес-логики.

function updateRoute(avoidTolls, avoidHighways) {
  const request = {
    origin: "Karaganda",
    destination: "Almaty",
    travelMode: google.maps.TravelMode.DRIVING,
    avoidTolls,
    avoidHighways
  };

  directionsService.route(request, (result, status) => {
    if (status === google.maps.DirectionsStatus.OK) {
      directionsRenderer.setDirections(result);
    }
  });
}

Ограничения и особенности работы алгоритма

При использовании параметров исключения маршрутов необходимо учитывать поведенческие особенности API:

  • параметры не гарантируют абсолютного исключения всех типов дорог
  • в некоторых регионах данные о платных участках могут быть неполными
  • при отсутствии альтернатив маршрут может включать нежелательные сегменты
  • влияние параметров зависит от текущей плотности дорожной сети

Работа с Travel Mode и влиянием на маршрутизацию

Параметры избегания дорог действуют только в контексте DRIVING. Для других режимов:

  • WALKING — автомагистрали и платные дороги не применяются
  • BICYCLING — исключаются скоростные трассы автоматически
  • TRANSIT — управление платными дорогами не применяется
travelMode: google.maps.TravelMode.DRIVING

Производительность при сложной маршрутизации

Использование ограничений увеличивает вычислительную сложность запроса:

  • увеличивается количество проверяемых графов дорог
  • возрастает вероятность возврата альтернативных маршрутов
  • может увеличиться задержка ответа сервера маршрутизации

Оптимизация достигается за счёт:

  • ограничения числа альтернатив (provideRouteAlternatives)
  • кэширования последних запросов
  • повторного использования DirectionsRenderer

Визуальная обработка исключённых маршрутов

Для UX часто требуется отображать сравнение маршрутов с и без ограничений:

const requestA = { ...baseRequest, avoidTolls: true };
const requestB = { ...baseRequest, avoidTolls: false };

Результаты могут быть наложены на одну карту с различными стилями линий:

  • основной маршрут — насыщенная линия
  • альтернативный маршрут — полупрозрачная линия
  • исключённые сегменты — не отображаются

Географические и региональные различия

Поведение параметров зависит от региона:

  • плотность платных дорог различается по странам
  • автомагистрали могут классифицироваться по-разному
  • в некоторых странах отсутствует строгая сегментация highway/toll

Это приводит к вариативности маршрутов даже при одинаковых параметрах запроса.