В экосистеме HERE Maps визуальное представление карты отделено от геометрии и данных, что позволяет гибко управлять отображением слоёв через декларативные стилевые описания. YAML используется как человекочитаемый формат описания стиля, который затем интерпретируется рендерером карты и преобразуется в набор инструкций для отрисовки тайлов.
Ключевая идея YAML-стилизации заключается в описании не отдельных объектов карты, а правил отображения классов объектов на основе их атрибутов, масштаба и контекста отображения.
Система стилизации в HERE Maps строится на нескольких уровнях абстракции:
1. Источник данных
2. Стилевой слой
3. Рендеринг
YAML-стиль в HERE Maps организуется как дерево конфигурации, включающее глобальные параметры, источники данных и набор слоёв.
style:
version: 2
name: base-map-style
sources:
omv:
type: MVT
url: https://vector.hereapi.com/v2/vectortiles/base/mc/{z}/{x}/{y}/omv
layers: []
Глобальная секция определяет базовое поведение стиля:
global:
fonts:
regular: "Roboto"
colors:
water: "#a0c8f0"
road: "#ffffff"
Источники определяют, откуда поступают географические данные. В HERE Maps чаще всего используется формат MVT (Mapbox Vector Tile).
sources:
base:
type: MVT
url: https://vector.hereapi.com/v2/vectortiles/base/mc/{z}/{x}/{y}/omv
Ключевые особенности:
{z}/{x}/{y}Каждый слой представляет собой набор правил отрисовки объектов определённого типа.
layers:
- id: water
source: base
source-layer: water
type: polygon
Polygon
Line
Symbol
Фильтры позволяют определять, какие объекты попадут под действие стилевого правила.
layers:
- id: major-roads
type: line
filter:
kind: road
class: primary
Фильтры опираются на:
Пример масштабной зависимости:
filter:
minZoom: 10
maxZoom: 18
Каждый слой содержит набор свойств, определяющих визуализацию геометрии.
paint:
fill-color: "#dceefc"
line-color: "#2a5c82"
paint:
line-width: 2
line-opacity: 0.8
paint:
line-width:
stops:
- zoom: 5
value: 0.5
- zoom: 15
value: 3
YAML поддерживает выражения, позволяющие вычислять стили на основе атрибутов объекта.
paint:
fill-color:
case:
- condition: { kind: park }
value: "#b6e3a8"
- condition: { kind: industrial }
value: "#d0d0d0"
- value: "#cccccc"
paint:
line-width:
interpolate:
- zoom: 8
value: 1
- zoom: 14
value: 5
Текстовые слои являются отдельной категорией стилизации и требуют отдельной конфигурации.
layers:
- id: road-labels
type: symbol
layout:
text-field: "{name}"
text-font: "Roboto Regular"
text-size: 12
layout:
text-anchor: center
text-offset: [0, 1]
text-allow-overlap: false
Порядок слоёв в YAML определяет визуальную композицию карты.
layers:
- id: background
- id: landuse
- id: roads
- id: labels
Приоритет слоёв влияет на перекрытие объектов и читаемость карты.
YAML позволяет создавать несколько тематических представлений одной и той же карты.
theme: light
colors:
background: "#ffffff"
text: "#000000"
theme: dark
colors:
background: "#1a1a1a"
text: "#e6e6e6"
Темы реализуются через переопределение глобальных переменных без изменения логики слоёв.
YAML-стиль подключается к JavaScript API через конфигурацию карты.
const platform = new H.service.Platform({
apikey: "API_KEY"
});
const map = new H.Map(document.getElementById("map"), null, {
center: { lat: 52.52, lng: 13.405 },
zoom: 12
});
const provider = platform.getOMVService().createProvider({
layer: "base"
});
const layer = new H.map.layer.TileLayer(provider);
map.addLayer(layer);
Стиль YAML применяется на уровне провайдера данных, влияя на визуализацию всех тайлов.
Стиль напрямую влияет на производительность отрисовки.
В процессе обработки стилевых файлов возникают специфические ограничения:
Некорректные фильтры или неверные типы значений приводят к игнорированию слоя без явного сообщения об ошибке.
Масштаб является ключевым параметром поведения стиля.
minzoom: 5
maxzoom: 20
Применение масштабных ограничений:
Сложные карты строятся как композиция множества независимых YAML-блоков:
Каждый блок может быть переиспользован и модифицирован независимо, что упрощает поддержку больших картографических проектов.