Работа с маршрутизацией в JavaScript SDK от HERE Technologies начинается с корректного подключения карты и создания базовой сцены, на которой будет отображаться геометрия маршрута.
Для отображения карты используется библиотека HERE Maps JS API (3.x).
Подключение осуществляется через CDN или сборщик модулей. Ключевой
объект — H.service.Platform, через который создаются слои
карты, геокодирование и маршрутизация.
<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>
<div id="map" style="width: 100%; height: 600px;"></div>
Создание платформы и базовой карты:
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,
{
center: { lat: 52.5200, lng: 13.4050 },
zoom: 10,
pixelRatio: window.devicePixelRatio
}
);
const beh * avior = new H.mapevents.Behavior(new H.mapevents.MapEvents(map));
const ui = H.ui.UI.createDefault(map, defaultLayers);
На этом этапе создаётся интерактивная карта, готовая к отрисовке маршрутов и объектов.
Маршрут в HERE Maps строится через Routing API, который возвращает структурированный JSON-ответ. Основные компоненты ответа:
Получение маршрута выполняется через
platform.getRoutingService().
Маршрутизация строится на основе двух или более координат. Основной
метод — calculateRoute.
const router = platform.getRoutingService(null, 8);
const routingParameters = {
routingMode: 'fast',
transportMode: 'car',
origin: '52.5160,13.3779',
destination: '52.5206,13.3862',
return: 'polyline,summary,actions'
};
Запрос выполняется асинхронно:
router.calculateRoute(routingParameters, result => {
const route = result.routes[0];
const section = route.sections[0];
const polyline = section.polyline;
});
Маршрут приходит в виде закодированной полилинии. Для преобразования
используется H.geo.LineString.
const lineString = H.geo.LineString.fromFlexiblePolyline(section.polyline);
Полученный LineString содержит массив координат, готовых
для визуализации на карте.
Для визуализации используется объект H.map.Polyline.
const routeLine = new H.map.Polyline(lineString, {
style: {
strokeColor: 'blue',
lineWidth: 5
}
});
map.addObject(routeLine);
После добавления линии карта автоматически отображает маршрут как непрерывную геометрию между точками.
Для повышения читаемости маршрута добавляются маркеры.
const startMarker = new H.map.Marker({ lat: 52.5160, lng: 13.3779 });
const endMarker = new H.map.Marker({ lat: 52.5206, lng: 13.3862 });
map.addObject(startMarker);
map.addObject(endMarker);
Маркерная визуализация позволяет однозначно определить направление движения и границы маршрута.
После отрисовки маршрута выполняется подгонка области видимости карты.
const bounds = routeLine.getBoundingBox();
map.getViewModel().setLookAtData({
bounds: bounds
});
Это обеспечивает отображение всего маршрута без ручного изменения масштаба.
Ответ Routing API содержит список действий, описывающих повороты и изменения направления. Эти данные используются для построения навигационной логики.
section.actions.forEach(action => {
const position = {
lat: action.offset,
lng: action.instruction
};
});
На практике действия привязываются к координатам полилинии через
индекс смещения (offset) и используются для
UI-указаний.
Routing API поддерживает несколько режимов:
car — автомобильный маршрутpedestrian — пеший маршрутbicycle — велосипедныйtruck — грузовойИзменение транспортного режима влияет на:
transportMode: 'truck'
Для грузовых маршрутов дополнительно учитываются ограничения по высоте, весу и типу дорог.
Маршрут может состоять из нескольких секций, если используются промежуточные точки.
waypoints: [
'52.5160,13.3779',
'52.5194,13.4067',
'52.5206,13.3862'
]
Каждая секция содержит собственную полилинию и набор инструкций, которые объединяются в единый маршрут.
Визуальный стиль линии маршрута может быть изменён через параметры
stroke.
style: {
strokeColor: 'rgba(0, 128, 255, 0.7)',
lineWidth: 6,
lineCap: 'round'
}
Дополнительная стилизация позволяет:
Routing API может возвращать несколько вариантов пути.
return: 'polyline,summary,routeLabels'
Каждый маршрут отображается отдельно:
result.routes.forEach(r => {
const section = r.sections[0];
const line = H.geo.LineString.fromFlexiblePolyline(section.polyline);
const polyline = new H.map.Polyline(line, {
style: { strokeColor: 'gray', lineWidth: 4 }
});
map.addObject(polyline);
});
Основной маршрут обычно выделяется контрастным цветом, альтернативные — более нейтральным.
Для интерактивности используется модуль событий
H.mapevents.MapEvents.
Маршрут может реагировать на:
routeLine.addEventListener('tap', event => {
routeLine.setStyle({
strokeColor: 'red'
});
});
Это позволяет реализовать динамическое выделение маршрутов.
При работе с большим количеством маршрутов учитываются следующие аспекты:
LineStringОсобенно важно избегать повторных вызовов API при каждом изменении интерфейса.
Маршрут может использоваться не только для визуализации, но и для пошаговой навигации. Для этого извлекаются:
section.actions.map(a => ({
instruction: a.instruction,
distance: a.length
}));
Эти данные формируют основу навигационного интерфейса.
HERE Routing API использует высокоточное представление координат. При отрисовке важно учитывать:
Чем выше zoom, тем более детализированной выглядит линия маршрута.
Маршрут может быть встроен в кастомные слои карты:
Слой маршрута располагается поверх базовых тайлов и может динамически обновляться при изменении условий.
При взаимодействии с картой маршрут сохраняет свою геометрию, но может быть пересчитан при:
Каждое изменение инициирует новый запрос Routing API и обновление полилинии на карте.