Стилизация геометрии в HERE Technologies JavaScript API опирается на модель отображения векторных объектов, где каждая геометрия (точка, линия, полигон) отделена от её визуального представления. Такой подход позволяет динамически менять внешний вид объектов без пересоздания самой геометрии, что критично для интерактивных карт, аналитических слоёв и высоконагруженных приложений.
В HERE Maps API геометрические объекты представлены классами:
H.map.MarkerH.map.PolylineH.map.PolygonКаждый объект поддерживает назначение стиля через объект
H.map.Style или через inline-описание параметров.
Ключевая концепция заключается в разделении:
Линии используются для отображения маршрутов, границ и трасс.
Основные параметры стиля:
strokeColor — цвет линииlineWidth — толщинаlineDash — пунктирlineCap — форма концов линииlineJoin — способ соединения сегментовПример создания и стилизации линии:
const lineString = new H.geo.LineString();
lineString.pushPoint({ lat: 52.5, lng: 13.4 });
lineString.pushPoint({ lat: 52.51, lng: 13.41 });
lineString.pushPoint({ lat: 52.52, lng: 13.42 });
const polyline = new H.map.Polyline(lineString, {
style: {
strokeColor: 'rgba(0, 128, 255, 0.7)',
lineWidth: 6,
lineDash: [2, 6],
lineJoin: 'round'
}
});
map.addObject(polyline);
Стили можно изменять во время выполнения:
polyline.setStyle({
strokeColor: '#ff0000',
lineWidth: 8
});
Это позволяет реализовать:
Полигоны применяются для зон, областей, территорий и аналитических слоёв.
Основные параметры:
fillColor — заливкаstrokeColor — обводкаlineWidth — толщина границыlineDash — стиль границыПример:
const polygon = new H.map.Polygon(lineString, {
style: {
fillColor: 'rgba(255, 0, 0, 0.3)',
strokeColor: '#ff0000',
lineWidth: 2
}
});
map.addObject(polygon);
Использование RGBA позволяет управлять визуальной иерархией:
fillColor: 'rgba(0, 200, 0, 0.2)'
Ключевые принципы:
Параметр zIndex определяет приоритет отрисовки:
polyline.setZIndex(2);
polygon.setZIndex(1);
Правила:
Хотя маркеры не являются геометрией в строгом смысле, их стилизация тесно связана с геометрическими объектами.
Варианты:
Пример SVG-маркера:
const icon = new H.map.Icon('<svg>...</svg>');
const marker = new H.map.Marker(
{ lat: 52.5, lng: 13.4 },
{ icon }
);
map.addObject(marker);
Стили могут зависеть от масштаба карты или состояния данных.
Пример логики:
map.addEventListener('mapviewchange', () => {
const zoom = map.getZoom();
polyline.setStyle({
lineWidth: zoom > 10 ? 8 : 3
});
});
Используется для:
Векторная модель поддерживает глобальные стили через темы.
Структура темы включает:
Пример концепции:
const style = new H.map.Style('styles/traffic-theme.yaml');
const provider = map.getBaseLayer().getProvider();
provider.setStyle(style);
Темы позволяют централизованно управлять:
Геометрии могут менять внешний вид в зависимости от атрибутов данных.
Пример логики:
function getColor(speed) {
if (speed > 80) return 'green';
if (speed > 40) return 'orange';
return 'red';
}
polyline.setStyle({
strokeColor: getColor(trafficSpeed)
});
Такой подход применяется в:
Стили часто изменяются по событиям:
Пример:
polyline.addEventListener('pointerenter', () => {
polyline.setStyle({
strokeColor: '#00ffcc',
lineWidth: 10
});
});
polyline.addEventListener('pointerleave', () => {
polyline.setStyle({
strokeColor: '#0080ff',
lineWidth: 6
});
});
Используется для:
Один объект может иметь сложную композицию стилей:
Пример:
const outer = new H.map.Polyline(lineString, {
style: {
strokeColor: '#000',
lineWidth: 10
}
});
const inner = new H.map.Polyline(lineString, {
style: {
strokeColor: '#00f',
lineWidth: 6
}
});
map.addObjects([outer, inner]);
При большом количестве объектов важно учитывать:
setStyle в циклеОптимальные практики:
Некоторые ограничения характерны для векторной модели:
Тем не менее, базового набора параметров достаточно для: