Переход между картографическими библиотеками требует переосмысления базовой архитектуры отображения карт, поскольку различия затрагивают не только API, но и саму модель данных, подход к слоям, обработку событий и взаимодействие с геосервисами. В экосистеме веб-картографии часто сравниваются HERE Maps API, Google Maps Platform, Leaflet и Mapbox GL JS, и именно различия между ними определяют стратегию миграции.
Основное отличие заключается в уровне абстракции:
HERE Maps API реализует гибридный подход: сочетание векторных тайлов, WebGL-рендеринга и сервисного слоя (геокодирование, маршрутизация, изохроны). Это делает миграцию с Leaflet более радикальной, а с Mapbox GL JS — более концептуальной, чем технической.
В Leaflet карта создаётся через объект L.map, а слои
добавляются отдельно:
const map = L.map('map').setView([52.5, 13.4], 10);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(map);
В HERE Maps API используется объектная модель платформы:
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.5, lng: 13.4 },
zoom: 10,
pixelRatio: window.devicePixelRatio
}
);
const beh * avior = new H.mapevents.Behavior(new H.mapevents.MapEvents(map));
Ключевое отличие заключается в обязательном слое поведения
(H.mapevents.Behavior), который заменяет привычную систему
взаимодействий Leaflet и частично перекрывает event-handling Google
Maps.
Leaflet оперирует тайловыми URL-шаблонами и CSS-подобной логикой отображения. Mapbox GL JS и HERE используют векторные стили.
В HERE стили задаются через предустановленные слои:
defaultLayers.vector.normal.map
defaultLayers.raster.satellite.map
В отличие от Mapbox GL JS, где стиль описывается JSON-конфигурацией, HERE предоставляет готовые стилевые наборы, ограничивая, но упрощая контроль:
map.setBaseLayer(defaultLayers.vector.hybrid.map);
При миграции с Mapbox GL JS важно учитывать отсутствие прямого аналога полной кастомизации слоя через style specification. Вместо этого применяется комбинация базовых слоёв и тематических параметров платформы.
В Leaflet маркеры создаются напрямую:
L.marker([52.5, 13.4]).addTo(map);
В HERE Maps API используется объект H.map.Marker:
const marker = new H.map.Marker({ lat: 52.5, lng: 13.4 });
map.addObject(marker);
Особенность заключается в том, что все объекты наследуются от
базового H.map.Object, что позволяет унифицировать работу с
геометриями:
В Google Maps Platform аналогичная модель реализована через классы
google.maps.Marker, но отличается системой событий и
жизненного цикла объектов.
В Leaflet геокодирование не встроено и подключается через сторонние сервисы.
В Google Maps используется:
geocoder.geocode({ address: 'Berlin' })
В HERE применяется сервисный слой:
const geocoder = platform.getSearchService();
geocoder.geocode(
{ q: 'Berlin' },
result => console.log(result),
error => console.error(error)
);
Миграция с Google Maps требует замены структуры запросов:
address → q, изменение формата ответа и
обработчиков результатов.
В HERE маршрутизация отделена от UI-карты:
const router = platform.getRoutingService(null, 8);
router.calculateRoute(
{
transportMode: 'car',
origin: '52.5,13.4',
destination: '52.51,13.45',
return: 'polyline'
},
result => console.log(result),
error => console.error(error)
);
В Google Maps:
directionsService.route({
origin: ...,
destination: ...,
travelMode: 'DRIVING'
});
Ключевая разница заключается в том, что HERE возвращает более низкоуровневую структуру маршрута, требующую ручного декодирования полилиний и явного управления отображением.
При переходе с Google Maps Platform основная трансформация касается:
google.maps.* на H.*addListener →
map.addEventListener)Пример трансформации маркера:
// Google Maps
const marker = new google.maps.Marker({
position: { lat: 52.5, lng: 13.4 },
map
});
// HERE Maps
const marker = new H.map.Marker({ lat: 52.5, lng: 13.4 });
map.addObject(marker);
Существенное отличие заключается в отсутствии привязки объекта к карте при создании — добавление выполняется отдельно.
При переходе с Leaflet изменяется фундаментальная модель слоёв.
Leaflet:
HERE:
Пример замены слоя:
// Leaflet
L.tileLayer(url).addTo(map);
// HERE
map.setBaseLayer(defaultLayers.vector.normal.map);
Основная сложность миграции заключается в отказе от URL-шаблонов тайлов и переходе к предопределённым слоям платформы.
При переходе с Mapbox GL JS сохраняется концепция векторного рендера, но меняется модель стилизации и API управления сценой.
Mapbox:
map.setStyle('mapbox://styles/mapbox/streets-v11');
HERE:
map.setBaseLayer(defaultLayers.vector.normal.map);
Mapbox предоставляет полноценный стиль JSON, тогда как HERE использует преднастроенные стилевые конфигурации, что ограничивает перенос кастомных визуальных решений.
Полилинии в Mapbox:
map.addSource(...)
map.addLayer(...)
В HERE:
const line = new H.map.Polyline(points);
map.addObject(line);
Таким образом, переход требует отказа от декларативного style-spec в пользу объектной графовой модели.
Leaflet использует:
map.on('click', handler);
HERE:
map.addEventListener('tap', event => {
console.log(event.target);
});
Различие заключается в унификации событий через
MapEvents, который вводит дополнительный слой абстракции
между DOM и картой.
{lat, lng}, а не массивы)H.mapevents.BehaviorРазличия в архитектуре приводят к необходимости пересборки логики взаимодействия с картой, а не только замены синтаксиса API.