Построение маршрутов общественного транспорта является одной из наиболее востребованных задач в геоинформационных веб-приложениях. HERE Maps API предоставляет инструменты для расчёта маршрутов с использованием автобусов, метро, трамваев, поездов пригородного сообщения, паромов и других видов общественного транспорта. Полученные данные позволяют отображать пользователю подробную последовательность пересадок, остановок, время отправления и прибытия, длительность поездки и дополнительные сведения о маршруте.
В экосистеме HERE основную роль играет сервис Routing API. При построении маршрутов общественного транспорта запрос отправляется на сервер маршрутизации, который анализирует транспортную сеть выбранного региона и возвращает оптимальный маршрут.
Основные этапы работы:
Схема взаимодействия выглядит следующим образом:
Пользователь
↓
JavaScript-приложение
↓
HERE Routing API
↓
Расчёт маршрута
↓
JSON-ответ
↓
Отображение на карте
Для работы с маршрутизацией необходимо подключить стандартные библиотеки HERE Maps.
<script src="https://js.api.here.com/v3/3.1/mapsjs-core.js"></script>
<script src="https://js.api.here.com/v3/3.1/mapsjs-service.js"></script>
<script src="https://js.api.here.com/v3/3.1/mapsjs-ui.js"></script>
<script src="https://js.api.here.com/v3/3.1/mapsjs-mapevents.js"></script>
Инициализация платформы:
const platform = new H.service.Platform({
apikey: 'YOUR_API_KEY'
});
Создание карты:
const defaultLayers = platform.createDefaultLayers();
const map = new H.Map(
document.getElementById('map'),
defaultLayers.vector.normal.map,
{
zoom: 12,
center: {
lat: 52.5200,
lng: 13.4050
}
}
);
Добавление элементов управления:
const beh * avior = new H.mapevents.Behavior(
new H.mapevents.MapEvents(map)
);
const ui = H.ui.UI.createDefault(map, defaultLayers);
Для построения маршрутов используется объект маршрутизатора.
const router = platform.getRoutingService(null, 8);
Версия 8 Routing API поддерживает современные возможности маршрутизации, включая общественный транспорт.
Маршрут между двумя точками строится через передачу координат отправления и назначения.
Пример параметров:
const routingParameters = {
transportMode: 'publicTransport',
origin: '52.5200,13.4050',
destination: '52.5170,13.3889',
return: 'polyline,summary,actions,instructions'
};
Основные параметры:
| Параметр | Назначение |
|---|---|
| transportMode | Тип транспорта |
| origin | Точка отправления |
| destination | Точка назначения |
| return | Состав возвращаемых данных |
Выполнение запроса:
router.calculateRoute(
routingParameters,
onSuccess,
onError
);
Функция обработки успешного ответа:
function onSuccess(result) {
console.log(result);
}
Обработка ошибки:
function onError(error) {
console.error(error);
}
Ответ содержит массив маршрутов.
Пример доступа:
const route = result.routes[0];
Каждый маршрут включает:
route.sections
Секции соответствуют отдельным этапам путешествия:
Например:
route.sections.forEach(section => {
console.log(section.transport.mode);
});
Возможный результат:
pedestrian
bus
pedestrian
subway
pedestrian
Каждая секция содержит подробную информацию.
Пример:
const section = route.sections[0];
console.log(section.departure.place.location);
console.log(section.arrival.place.location);
Продолжительность:
console.log(section.summary.duration);
Расстояние:
console.log(section.summary.length);
Время отправления:
console.log(section.departure.time);
Время прибытия:
console.log(section.arrival.time);
Тип транспортного средства можно получить следующим образом:
console.log(section.transport.mode);
Возможные значения:
bus
subway
train
lightRail
tram
ferry
regionalTrain
pedestrian
Проверка:
if (section.transport.mode === 'subway') {
console.log('Поездка на метро');
}
Для транспортных сегментов доступна информация о линии.
console.log(section.transport.name);
Пример:
U2
Bus 100
Tram M4
Дополнительные данные:
console.log(section.transport.category);
Иногда доступны:
console.log(section.transport.headsign);
Направление движения:
Alexanderplatz
Routing API возвращает геометрию маршрута в виде полилинии.
Получение координат:
const linestring =
H.geo.LineString.fromFlexiblePolyline(
section.polyline
);
Создание объекта маршрута:
const routeLine = new H.map.Polyline(
linestring,
{
style: {
lineWidth: 5
}
}
);
Добавление на карту:
map.addObject(routeLine);
Обычно маршрут состоит из нескольких участков.
Отрисовка полного пути:
route.sections.forEach(section => {
const linestring =
H.geo.LineString.fromFlexiblePolyline(
section.polyline
);
const polyline =
new H.map.Polyline(linestring);
map.addObject(polyline);
});
Для улучшения восприятия рекомендуется выделять разные виды транспорта цветами.
function getColor(mode) {
switch(mode) {
case 'subway':
return '#ff0000';
case 'bus':
return '#0077ff';
case 'tram':
return '#00aa00';
case 'train':
return '#ff8800';
default:
return '#555555';
}
}
Использование:
const polyline =
new H.map.Polyline(linestring, {
style: {
strokeColor:
getColor(section.transport.mode),
lineWidth: 6
}
});
Остановки содержатся в информации о секции.
Создание маркера:
const marker =
new H.map.Marker({
lat: section.departure.place.location.lat,
lng: section.departure.place.location.lng
});
map.addObject(marker);
Для конечной остановки:
const arrivalMarker =
new H.map.Marker({
lat: section.arrival.place.location.lat,
lng: section.arrival.place.location.lng
});
map.addObject(arrivalMarker);
Сведения о пересадках удобно выводить отдельно.
Пример формирования списка:
route.sections.forEach(section => {
console.log(
section.transport.mode
);
console.log(
section.departure.place.name
);
console.log(
section.arrival.place.name
);
});
Результат:
Автобус 100
От: Hauptbahnhof
До: Alexanderplatz
Метро U2
От: Alexanderplatz
До: Potsdamer Platz
Общее время маршрута:
const duration =
route.sections.reduce(
(total, section) =>
total + section.summary.duration,
0
);
Перевод в минуты:
const minutes =
Math.round(duration / 60);
Вывод:
console.log(minutes);
Маршруты общественного транспорта учитывают реальные расписания.
В ответе доступны:
section.departure.time
section.arrival.time
Например:
2025-05-14T09:42:00+02:00
Преобразование:
const departure =
new Date(
section.departure.time
);
console.log(
departure.toLocaleTimeString()
);
В запрос можно передать дату и время.
const routingParameters = {
transportMode: 'publicTransport',
origin: '52.5200,13.4050',
destination: '52.5170,13.3889',
departureTime:
'2026-08-01T08:00:00',
return:
'polyline,summary,actions'
};
Расчёт будет выполнен с учётом расписания на указанный момент.
Иногда требуется прибыть к определённому времени.
const routingParameters = {
transportMode: 'publicTransport',
origin: '52.5200,13.4050',
destination: '52.5170,13.3889',
arrivalTime:
'2026-08-01T09:00:00'
};
Алгоритм автоматически подберёт время отправления.
Для некоторых сценариев необходимо минимизировать число пересадок.
В зависимости от региона и доступных транспортных данных могут использоваться дополнительные параметры оптимизации маршрута.
Полученный маршрут можно дополнительно фильтровать:
const transfers =
route.sections.filter(
section =>
section.transport.mode !==
'pedestrian'
).length - 1;
Проверка:
if (transfers <= 1) {
console.log(
'Не более одной пересадки'
);
}
Каждая секция может содержать действия.
Получение инструкций:
section.actions.forEach(action => {
console.log(
action.instruction
);
});
Пример:
Пройдите 120 метров
Поверните направо
Сядьте на автобус 100
Выйдите на остановке Alexanderplatz
После построения маршрута карта должна показывать весь путь.
const group =
new H.map.Group();
Добавление объектов:
group.addObject(routeLine);
Масштабирование:
map.getViewModel().setLookAtData({
bounds:
group.getBoundingBox()
});
Для выбора наиболее удобного варианта можно получать несколько маршрутов.
const routingParameters = {
transportMode: 'publicTransport',
alternatives: 3,
origin: '52.5200,13.4050',
destination: '52.5170,13.3889'
};
Обработка:
result.routes.forEach(route => {
console.log(
route.sections
);
});
Каждый маршрут может отличаться:
Общественный транспорт часто включает пешеходные сегменты.
Пример структуры:
Пешком
↓
Автобус
↓
Пешком
↓
Метро
↓
Пешком
Для каждого сегмента доступны собственные координаты, инструкции и временные характеристики.
Такой подход позволяет строить полноценные мультимодальные маршруты, в которых учитываются все этапы перемещения между точкой отправления и пунктом назначения.
При работе с большим количеством маршрутов рекомендуется:
router в единственном
экземпляре;H.map.Group;Сервисы построения маршрутов по городу:
Внутренние порталы компаний могут показывать:
Используются для построения маршрутов между достопримечательностями с учётом метро, автобусов и трамваев.
Муниципальные сервисы позволяют анализировать транспортную доступность районов и визуализировать существующую транспортную инфраструктуру.
Функциональность общественного транспорта часто объединяется с автомобильной навигацией, веломаршрутами и пешеходными маршрутами, образуя единую мультимодальную транспортную платформу на базе HERE Maps API.