Устаревшие методы и альтернативы

В ранних версиях 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-ключом,
  • создание тайловых слоёв,
  • доступ к геокодированию,
  • маршрутизацию.

Такое объединение приводило к жёсткой связности компонентов.

Современная альтернатива

В актуальных версиях API разделение ответственности стало явным:

import { initializePlatform } from '@here/maps-api-for-javascript';

const platform = initializePlatform({
  apikey: 'API_KEY'
});

Функциональность создания слоёв и сервисов вынесена в отдельные фабрики, что снижает зависимость кода от внутренней структуры SDK.


Устаревшие тайловые слои

createDefaultLayers

Один из наиболее часто используемых устаревших методов:

const layers = platform.createDefaultLayers();

Этот метод автоматически создавал набор растровых слоёв (normal, satellite, terrain), скрывая внутреннюю конфигурацию.

Недостатки:

  • невозможность точного контроля источника тайлов,
  • ограниченная поддержка векторных данных,
  • привязка к фиксированным стилям.

Современный подход

Современные версии переходят к явному определению слоёв:

  • использование векторных тайлов,
  • настройка стилей через JSON,
  • загрузка слоёв по требованию.

Пример:

const style = await fetch('map-style.json').then(r => r.json());
const layer = platform.getOMVService().createLayer(style);

Устаревшие маркеры H.map.Marker

Старый API

Ранее маркеры создавались через:

const marker = new H.map.Marker({ lat: 52.5, lng: 13.4 });
map.addObject(marker);

Ограничения:

  • статическое изображение,
  • отсутствие DOM-управления,
  • сложная кастомизация поведения.

Дополнительные методы вроде setIcon() и setData() часто использовались для обходных решений.

Альтернативы

Современные подходы включают:

  • H.map.DomMarker (в старых 3.x версиях),
  • кастомные WebGL-слои,
  • HTML-based overlays через внешние рендереры.

Пример более гибкого подхода:

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 используют унифицированную событийную модель с поддержкой:

  • делегирования,
  • нормализованных координат,
  • интеграции с UI-фреймворками.

В новых версиях часто применяется адаптер событий:

map.addEventListener('pointermove', handler);

с унифицированной структурой PointerEvent.


Устаревшие сервисы геокодирования

Старый REST wrapper

Ранее геокодирование вызывалось через:

platform.getGeocodingService().geocode(params, callback);

Недостатки:

  • callback-based API,
  • отсутствие Promise,
  • жёсткая привязка к сервису Platform.

Современная альтернатива

Новые версии используют Promise-based подход:

const result = await geocode({ q: 'Berlin' });

или прямые REST-вызовы через HTTP клиент.


Устаревшие маршрутизаторы

Старый API

platform.getRoutingService().calculateRoute(params, onResult, onError);

Проблемы:

  • callback hell,
  • сложная структура параметров,
  • отсутствие расширяемости.

Новый подход

Современные SDK разделяют маршрутизацию на:

  • автомобильную,
  • пешеходную,
  • грузовую.

И используют структурированные запросы:

const route = await routing.calculate({
  transportMode: 'car',
  origin: '52.5,13.4',
  destination: '52.6,13.5'
});

Устаревшие растровые тайлы

Растровая модель отображения карт (PNG/JPEG тайлы) считалась стандартом в ранних версиях SDK.

Недостатки:

  • невозможность динамического изменения стилей,
  • высокая нагрузка на сеть,
  • ограниченная интерактивность.

Альтернативы растровым слоям

Современные решения ориентированы на:

  • векторные тайлы (OMV),
  • WebGL-рендеринг,
  • динамические стили.

Преимущества:

  • изменение стиля без перезагрузки тайлов,
  • масштабируемость,
  • высокая производительность на больших масштабах.

Устаревшие UI-компоненты

Панели управления картой

Ранее использовались встроенные UI-виджеты:

  • H.ui.UI,
  • H.ui.ZoomControl,
  • H.ui.Scalebar.

Проблемы:

  • ограниченная кастомизация,
  • жёсткая привязка к стилю HERE,
  • сложная интеграция с современными SPA.

Современная замена

UI-слой теперь часто реализуется отдельно:

  • через React/Vue компоненты,
  • кастомные контролы поверх canvas/WebGL,
  • headless map core без UI.

Устаревшие методы работы с объектами карты

map.getObjects()

Ранее использовался универсальный метод получения всех объектов:

const objects = map.getObjects();

Недостатки:

  • отсутствие фильтрации по типу,
  • высокая стоимость при большом количестве объектов.

Современные альтернативы

Вместо глобального доступа используются:

  • слои (Layer),
  • коллекции объектов (ObjectCollection),
  • пространственные индексы.

Устаревшие подходы к загрузке SDK

Script-based подключение

<script src="https://js.api.here.com/v3/3.0/mapsjs-core.js"></script>

Проблемы:

  • глобальные переменные,
  • отсутствие tree-shaking,
  • невозможность оптимизации сборщиками.

Современный модульный импорт

import { Map } from '@here/maps-api-for-javascript';

Преимущества:

  • поддержка bundler’ов,
  • lazy loading,
  • уменьшение размера финального бандла.

Альтернативные экосистемы и миграционные стратегии

В процессе эволюции API значительная часть устаревших методов была заменена концепциями:

  • декларативных слоёв вместо императивного управления,
  • WebGL-рендеринга вместо DOM-объектов,
  • Promise/async API вместо callback-архитектуры,
  • модульной загрузки вместо глобального namespace.

В экосистеме HERE Technologies это привело к переходу от монолитного JavaScript SDK к набору специализированных сервисов и библиотек, ориентированных на высокую производительность и гибкость интеграции.