В маршрутизации Google Maps Platform промежуточные точки (waypoints)
используются для построения маршрутов, проходящих через заранее заданные
координаты или адреса между начальной и конечной точкой. Механизм
реализован через сервис Google Directions API, доступный в JavaScript
API как DirectionsService.
Промежуточные точки влияют на геометрию маршрута, но не изменяют его смысловую структуру: маршрут всегда начинается в origin и заканчивается в destination, а waypoints располагаются между ними в заданном или оптимизированном порядке.
Каждая промежуточная точка задаётся объектом следующего вида:
{
location: "Almaty, Kazakhstan" | LatLng,
stopover: true
}
Поля:
location — адрес, название места или объект
координат LatLng
stopover — логический флаг:
true — маршрут обязан остановиться в точкеfalse — точка используется как проходная без
формирования отдельного сегмента остановкиОсновная структура запроса выполняется через
DirectionsService.route():
const directionsService = new google.maps.DirectionsService();
const request = {
origin: "Karaganda, Kazakhstan",
destination: "Astana, Kazakhstan",
waypoints: [
{
location: "Temirtau, Kazakhstan",
stopover: true
},
{
location: "Balkhash, Kazakhstan",
stopover: true
}
],
travelMode: google.maps.TravelMode.DRIVING
};
directionsService.route(request, (result, status) => {
if (status === "OK") {
console.log(result);
}
});
Каждая промежуточная точка добавляет отдельный сегмент
(leg) в итоговый маршрут.
При наличии промежуточных точек маршрут разбивается на сегменты:
Каждый сегмент содержит собственные метрики:
distance)duration)polyline)steps)Эти данные доступны в объекте
DirectionsResult.routes[0].legs.
При большом количестве точек критично учитывать порядок их прохождения. API поддерживает автоматическую оптимизацию:
const request = {
origin: "Karaganda",
destination: "Astana",
waypoints: [
{ location: "Balkhash", stopover: true },
{ location: "Karazhal", stopover: true },
{ location: "Satpayev", stopover: true }
],
optimizeWaypoints: true,
travelMode: google.maps.TravelMode.DRIVING
};
Параметр optimizeWaypoints: true позволяет сервису
перестроить порядок точек для минимизации общего расстояния или времени
маршрута.
Результат оптимизации возвращается в поле:
result.routes[0].waypoint_order
Массив содержит индексы исходных точек в новом порядке.
Система накладывает ограничения на количество waypoint:
Также существуют функциональные ограничения:
stopover: false) не всегда учитываются
в визуализации маршрутаФлаг stopover влияет на сегментацию маршрута:
true — создаётся отдельный legfalse — точка «проецируется» на ближайший сегмент
маршрутаПример:
waypoints: [
{ location: "Point A", stopover: false },
{ location: "Point B", stopover: true }
]
Первая точка не формирует остановку, но влияет на геометрию маршрута.
Результат запроса содержит структурированную модель:
const route = result.routes[0];
route.legs.forEach((leg, index) => {
console.log("Сегмент:", index);
console.log("Дистанция:", leg.distance.text);
console.log("Время:", leg.duration.text);
});
Каждый leg соответствует промежуточной точке или
конечному пункту.
Полная последовательность координат маршрута доступна через:
route.overview_polyline
В реальных сценариях waypoints часто формируются динамически:
function buildWaypoints(points) {
return points.map(p => ({
location: new google.maps.LatLng(p.lat, p.lng),
stopover: true
}));
}
Это используется при:
При интеграции с google.maps.Map промежуточные точки
часто визуализируются маркерами:
const marker = new google.maps.Marker({
position: { lat: 49.806, lng: 73.085 },
map: map,
title: "Waypoint"
});
Маркерная визуализация обычно синхронизируется с маршрутом через события изменения данных.
При изменении waypoint требуется повторный запрос к
DirectionsService. API не поддерживает частичное обновление
маршрута.
Типовой цикл обновления:
route()Буферизация точек маршрута
Используется для предотвращения частых запросов:
let timeout;
function updateRoute(points) {
clearTimeout(timeout);
timeout = setTimeout(() => {
calculateRoute(points);
}, 300);
}
Кэширование маршрутов
Сохраняются комбинации origin + destination + waypoints для повторного использования без запроса к API.
В интерфейсах маршрутизации промежуточные точки часто связаны с:
Places Autocomplete)Изменение порядка точек напрямую влияет на
waypoint_order и итоговую геометрию маршрута.
Рост числа waypoint приводит к:
Практически целесообразно ограничивать количество точек и группировать близкие координаты в один сегмент.