В 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 — визуализация результата на
карте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: true влияет на выбор маршрута следующим
образом:
Важно учитывать, что платные дороги определяются не локальной логикой, а глобальной картографической базой Google.
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:
Параметры избегания дорог действуют только в контексте
DRIVING. Для других режимов:
WALKING — автомагистрали и платные дороги не
применяютсяBICYCLING — исключаются скоростные трассы
автоматическиTRANSIT — управление платными дорогами не
применяетсяtravelMode: google.maps.TravelMode.DRIVING
Использование ограничений увеличивает вычислительную сложность запроса:
Оптимизация достигается за счёт:
provideRouteAlternatives)DirectionsRendererДля UX часто требуется отображать сравнение маршрутов с и без ограничений:
const requestA = { ...baseRequest, avoidTolls: true };
const requestB = { ...baseRequest, avoidTolls: false };
Результаты могут быть наложены на одну карту с различными стилями линий:
Поведение параметров зависит от региона:
Это приводит к вариативности маршрутов даже при одинаковых параметрах запроса.