HERE Technologies предоставляет через HERE Maps API набор инструментов для построения тематических карт (thematic maps), позволяющих визуализировать пространственные данные с привязкой к географии и смысловым слоям. Тематические карты используются для отображения плотности явлений, категориальных распределений, агрегированных показателей и пользовательских данных поверх базовой картографической подложки.
Тематическая карта в HERE Maps строится на принципе многослойной композиции:
Ключевой объект — H.map.Layer, который может содержать
кастомную отрисовку или подключение тайлового сервиса.
Инициализация карты в JavaScript API HERE:
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: 50.4501, lng: 30.5234 },
zoom: 10,
pixelRatio: window.devicePixelRatio || 1
}
);
const beh * avior = new H.mapevents.Behavior(new H.mapevents.MapEvents(map));
const ui = H.ui.UI.createDefault(map, defaultLayers);
На этом этапе карта готова к наложению тематических данных.
Наиболее распространённый формат — GeoJSON. Он позволяет описывать геометрии и свойства объектов.
const geojson = {
type: "FeatureCollection",
features: [
{
type: "Feature",
geometry: {
type: "Point",
coordinates: [30.5234, 50.4501]
},
properties: {
value: 120
}
}
]
};
В HERE Maps GeoJSON обычно преобразуется в
H.map.Object:
const reader = new H.data.geojson.Reader();
reader.parseData(geojson);
map.addLayer(reader.getLayer());
Хороплет — тематическая визуализация, где области окрашиваются в зависимости от значения.
function getColor(value) {
if (value > 100) return '#800026';
if (value > 50) return '#BD0026';
if (value > 20) return '#E31A1C';
if (value > 10) return '#FC4E2A';
return '#FD8D3C';
}
Применение стиля к полигонам:
const style = new H.map.SpatialStyle({
fillColor: getColor(feature.properties.value),
strokeColor: '#ffffff',
lineWidth: 1
});
Каждый полигон получает динамическое оформление в зависимости от данных.
Тепловая карта используется для отображения плотности точек.
Каждая точка имеет вес:
const points = [
{ lat: 50.45, lng: 30.52, weight: 0.8 },
{ lat: 50.46, lng: 30.51, weight: 0.3 }
];
В основе лежит радиусное распределение влияния:
const heatmapProvider = new H.data.heatmap.Provider({
colors: new H.data.heatmap.defaultColors(),
dataPoints: points
});
const heatmapLayer = new H.map.layer.TileLayer(heatmapProvider);
map.addLayer(heatmapLayer);
Категориальные карты отображают дискретные типы объектов:
const categoryStyle = {
restaurant: '#ff5722',
hospital: '#2196f3',
school: '#4caf50'
};
function styleFeature(feature) {
return new H.map.SpatialStyle({
fillColor: categoryStyle[feature.properties.type] || '#999999',
strokeColor: '#333'
});
}
Тайловый подход применяется при больших объёмах данных.
const tileProvider = new H.map.provider.ImageTileProvider({
min: 5,
max: 20,
getURL: (col, row, level) =>
`https://example.com/tiles/${level}/${col}/${row}.png`
});
const tileLayer = new H.map.layer.TileLayer(tileProvider);
map.addLayer(tileLayer);
Векторные тайлы позволяют динамически изменять внешний вид:
const style = {
layers: {
roads: {
draw: {
lines: {
color: '#ff0000',
width: 2
}
}
}
}
};
Тематические карты часто требуют реального времени.
setInterval(async () => {
const response = await fetch('/api/data');
const data = await response.json();
heatmapProvider.setDataPoints(data);
}, 5000);
Особенность HERE Maps API — минимизация перерисовки, обновляются только изменённые слои.
При большом количестве объектов используется кластеризация.
const clusteringProvider = new H.clustering.Provider(dataPoints, {
clusteringOptions: {
eps: 32,
minWeight: 2
}
});
const clusteringLayer = new H.map.layer.ObjectLayer(clusteringProvider);
map.addLayer(clusteringLayer);
Кластеры агрегируют точки и отображают суммарные значения.
События позволяют привязать поведение к объектам карты:
map.addEventListener('tap', function (evt) {
const target = evt.target;
if (target instanceof H.map.Polygon) {
console.log(target.getData());
}
});
Интерактивность критична для аналитических сценариев:
При работе с тематическими слоями важно учитывать:
Рекомендованная стратегия:
Сложные карты строятся через наложение:
Порядок слоёв влияет на восприятие:
map.getLayers().addAll([
baseLayer,
choroplethLayer,
heatmapLayer,
markerLayer
]);
Каждый слой имеет собственную прозрачность и приоритет отрисовки.
HERE Maps поддерживает централизованные темы отображения:
const customTheme = new H.map.Style(
'https://example.com/style.json'
);
const layer = platform.getVectorLayer({
style: customTheme
});
Темы позволяют унифицировать визуальный язык картографических продуктов.