В ранних версиях JavaScript SDK платформы HERE Technologies
архитектура была построена вокруг монолитного пространства имён
H.*, где почти вся функциональность размещалась в
глобальном объекте. Такой подход характерен для HERE Maps API for
JavaScript версии 2.x и ранних 3.x.
Ключевая проблема этой модели заключалась в слабой модульности: подключение даже небольшой части функциональности автоматически тянуло за собой значительный объём зависимостей. Современная версия SDK перешла к модульной системе, где компоненты загружаются точечно.
Ранее создание экземпляра платформы выполнялось через глобальный конструктор:
var platform = new H.service.Platform({
apikey: 'API_KEY'
});
Проблема заключалась в том, что объект
H.service.Platform одновременно отвечал за:
Такое объединение приводило к жёсткой связности компонентов.
В актуальных версиях API разделение ответственности стало явным:
import { initializePlatform } from '@here/maps-api-for-javascript';
const platform = initializePlatform({
apikey: 'API_KEY'
});
Функциональность создания слоёв и сервисов вынесена в отдельные фабрики, что снижает зависимость кода от внутренней структуры SDK.
Один из наиболее часто используемых устаревших методов:
const layers = platform.createDefaultLayers();
Этот метод автоматически создавал набор растровых слоёв (normal, satellite, terrain), скрывая внутреннюю конфигурацию.
Недостатки:
Современные версии переходят к явному определению слоёв:
Пример:
const style = await fetch('map-style.json').then(r => r.json());
const layer = platform.getOMVService().createLayer(style);
Ранее маркеры создавались через:
const marker = new H.map.Marker({ lat: 52.5, lng: 13.4 });
map.addObject(marker);
Ограничения:
Дополнительные методы вроде setIcon() и
setData() часто использовались для обходных решений.
Современные подходы включают:
H.map.DomMarker (в старых 3.x версиях),Пример более гибкого подхода:
const icon = new H.map.Icon(svgMarkup);
const marker = new H.map.Marker(position, { icon });
В актуальных реализациях предпочтение отдается WebGL-рендерингу и кастомным слоям, а не классическим маркерам.
Ранее использовалась система событий через
H.util.EventTarget:
map.addEventListener('tap', function (evt) {
console.log(evt.target);
});
Проблемы:
Современные SDK используют унифицированную событийную модель с поддержкой:
В новых версиях часто применяется адаптер событий:
map.addEventListener('pointermove', handler);
с унифицированной структурой PointerEvent.
Ранее геокодирование вызывалось через:
platform.getGeocodingService().geocode(params, callback);
Недостатки:
Новые версии используют Promise-based подход:
const result = await geocode({ q: 'Berlin' });
или прямые REST-вызовы через HTTP клиент.
platform.getRoutingService().calculateRoute(params, onResult, onError);
Проблемы:
Современные SDK разделяют маршрутизацию на:
И используют структурированные запросы:
const route = await routing.calculate({
transportMode: 'car',
origin: '52.5,13.4',
destination: '52.6,13.5'
});
Растровая модель отображения карт (PNG/JPEG
тайлы) считалась стандартом в ранних версиях SDK.
Недостатки:
Современные решения ориентированы на:
Преимущества:
Ранее использовались встроенные UI-виджеты:
H.ui.UI,H.ui.ZoomControl,H.ui.Scalebar.Проблемы:
UI-слой теперь часто реализуется отдельно:
Ранее использовался универсальный метод получения всех объектов:
const objects = map.getObjects();
Недостатки:
Вместо глобального доступа используются:
Layer),ObjectCollection),<script src="https://js.api.here.com/v3/3.0/mapsjs-core.js"></script>
Проблемы:
import { Map } from '@here/maps-api-for-javascript';
Преимущества:
В процессе эволюции API значительная часть устаревших методов была заменена концепциями:
В экосистеме HERE Technologies это привело к переходу от монолитного JavaScript SDK к набору специализированных сервисов и библиотек, ориентированных на высокую производительность и гибкость интеграции.