Отображение маршрутов в веб-картах базируется на взаимодействии клиентского API и серверного сервиса построения маршрутов. В рамках Google маршрутизация реализуется через компонент Directions API, интегрированный в JavaScript-обёртку карты.
Ключевые элементы системы маршрутизации:
Взаимодействие между компонентами строится по схеме:
DirectionsService выполняет запрос к серверной части маршрутизации и возвращает структурированный объект маршрута.
Основной метод:
route(request, callback)Структура запроса включает:
const directionsService = new google.maps.DirectionsService();
const request = {
origin: "Almaty, Kazakhstan",
destination: "Astana, Kazakhstan",
travelMode: google.maps.TravelMode.DRIVING
};
directionsService.route(request, (result, status) => {
if (status === "OK") {
console.log(result);
}
});
DirectionsRenderer отвечает за отображение маршрута на карте, включая:
Инициализация:
const directionsRenderer = new google.maps.DirectionsRenderer();
directionsRenderer.setMap(map);
Связка с результатом:
directionsRenderer.setDirections(result);
Отображение маршрута требует базового объекта карты:
const map = new google.maps.Map(document.getElementById("map"), {
zoom: 7,
center: { lat: 48.0196, lng: 66.9237 }
});
После инициализации карта связывается с DirectionsRenderer:
directionsRenderer.setMap(map);
Параметры могут задаваться:
origin: { lat: 43.2220, lng: 76.8512 },
destination: { lat: 51.1694, lng: 71.4491 }
Поддерживаемые режимы:
travelMode: google.maps.TravelMode.WALKING
Позволяют строить сложные маршруты:
waypoints: [
{ location: "Karaganda", stopover: true },
{ location: "Temirtau", stopover: true }
]
Параметр:
optimizeWaypoints: true
Автоматически перестраивает порядок промежуточных точек для минимизации расстояния.
Ответ DirectionsService содержит:
Массив маршрутов, включая альтернативные пути.
Каждый маршрут включает:
Сегменты маршрута содержат:
Наиболее детализированный уровень:
Внутренне DirectionsRenderer использует Polyline, но возможно ручное управление.
const routePath = result.routes[0].overview_path;
const polyline = new google.maps.Polyline({
path: routePath,
strokeColor: "#3367D6",
strokeOpacity: 1.0,
strokeWeight: 4
});
polyline.setMap(map);
DirectionsRenderer поддерживает стилизацию:
const directionsRenderer = new google.maps.DirectionsRenderer({
polylineOptions: {
strokeColor: "#FF0000",
strokeWeight: 6
},
suppressMarkers: false,
suppressPolylines: false
});
Включение альтернатив:
provideRouteAlternatives: true
В результате возвращается несколько вариантов маршрута с разными характеристиками:
Основные статусы:
if (status !== "OK") {
console.error("Ошибка маршрута:", status);
}
const map = new google.maps.Map(document.getElementById("map"), {
zoom: 6,
center: { lat: 49.8, lng: 73.1 }
});
const directionsService = new google.maps.DirectionsService();
const directionsRenderer = new google.maps.DirectionsRenderer({
polylineOptions: {
strokeColor: "#1A73E8",
strokeWeight: 5
}
});
directionsRenderer.setMap(map);
const request = {
origin: "Karaganda, Kazakhstan",
destination: "Almaty, Kazakhstan",
waypoints: [
{ location: "Balkhash", stopover: true }
],
optimizeWaypoints: true,
travelMode: google.maps.TravelMode.DRIVING
};
directionsService.route(request, (result, status) => {
if (status === "OK") {
directionsRenderer.setDirections(result);
}
});
Каждый шаг маршрута содержит геометрию и инструкции, которые используются для:
const steps = result.routes[0].legs[0].steps;
steps.forEach(step => {
console.log(step.instructions);
});
При изменении параметров маршрута выполняется повторный запрос:
directionsService.route(updatedRequest, callback);
DirectionsRenderer автоматически перерисовывает маршрут при обновлении данных.
При работе с маршрутизацией учитываются:
Рекомендуется минимизировать:
Маршрут в ответе представлен в виде набора точек LatLng. Для упрощённого рендеринга используется:
Такой подход позволяет балансировать между точностью и производительностью визуализации.