Уровни масштабирования

В веб-картографии уровень масштабирования (zoom level) определяет степень детализации отображаемой карты. В HERE Maps API for JavaScript этот параметр является базовым механизмом управления тем, насколько «близко» отображается карта к поверхности Земли. Масштабирование напрямую связано с тайловой системой, проекцией карты и поведением визуальных слоёв.

HERE Technologies реализует картографическую систему, основанную на стандартной веб-тайловой модели, где каждый уровень zoom соответствует удвоению или уменьшению количества тайлов по осям X и Y.


Диапазон уровней масштабирования

В HERE Maps API каждый экземпляр карты (H.Map) поддерживает ограниченный диапазон zoom-уровней:

  • минимальный zoom (например, 0–1) — отображение всей планеты
  • средний zoom (5–10) — континенты и крупные регионы
  • высокий zoom (15–20+) — улицы, здания, мелкие объекты

Типичный диапазон зависит от используемого слоя (tile layer), но чаще всего:

  • minZoom ≈ 1–2
  • maxZoom ≈ 20–21

Пример задания диапазона:

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.5200, lng: 13.4050 },
    zoom: 10,
    minZoom: 3,
    maxZoom: 18
  }
);

Ограничение zoom используется для контроля нагрузки и предотвращения выхода за пределы доступных тайлов.


Дискретная природа zoom-уровней

Zoom в HERE Maps является дискретным, но поддерживает плавные переходы (fractional zoom). Это означает:

  • целые значения (10, 11, 12) соответствуют базовым уровням тайлов
  • дробные значения (10.5, 10.8) используются для интерполяции и плавного масштабирования

При дробных значениях происходит:

  • масштабирование уже загруженных тайлов
  • подгрузка новых тайлов при переходе через целое значение

Тайловая система и зависимость от zoom

Карты HERE используют схему тайлов 256x256 пикселей (векторные слои могут отличаться внутренним представлением).

Количество тайлов на уровне zoom вычисляется по формуле:

  • по оси X: 2^z
  • по оси Y: 2^z

где z — уровень масштабирования.

Пример:

Zoom Тайлов по X Детализация
0 1 весь мир
1 2 крупные регионы
5 32 страны/области
10 1024 города
15 32768 улицы

Каждое увеличение zoom на 1 удваивает детализацию.


Связь zoom и проекции карты

HERE Maps использует Web Mercator projection (EPSG:3857). В этой проекции:

  • Земля проецируется на квадрат
  • широта ограничена примерно ±85.0511°
  • масштабирование нелинейно и зависит от широты

Фактический масштаб на карте зависит от:

  • zoom level
  • широты центра карты
  • разрешения экрана (device pixel ratio)

Плавное масштабирование и интерполяция

При изменении zoom API выполняет:

  • масштабирование текущего canvas/WebGL слоя
  • загрузку новых тайлов при пересечении границы целого zoom
  • сглаживание переходов через интерполяцию матриц трансформации

Векторные карты особенно эффективно поддерживают плавный zoom благодаря GPU-рендерингу.


Программное управление zoom

Установка уровня масштабирования

map.setZoom(12);

Получение текущего значения

const zoom = map.getZoom();

Анимация масштабирования

map.setZoom(14, true);

Второй параметр включает анимацию перехода.


События изменения zoom

HERE Maps API предоставляет события для отслеживания изменений масштаба:

map.addEventListener('mapviewchange', function () {
  const zoom = map.getZoom();
  console.log('Zoom changed:', zoom);
});

Также используются более специализированные события:

  • mapviewchangebegin — начало изменения
  • mapviewchange — в процессе изменения
  • mapviewchangeend — завершение

Ограничения minZoom и maxZoom

Ограничения zoom применяются на уровне:

  • карты (H.Map)
  • слоя (H.map.layer.TileLayer)
  • провайдера данных

Если установлен диапазон:

minZoom: 4,
maxZoom: 16

то:

  • zoom ниже 4 блокируется или фиксируется на 4
  • zoom выше 16 не отображает более детальные тайлы

Ограничения важны для:

  • предотвращения пустых тайлов
  • контроля стоимости загрузки данных
  • оптимизации производительности

Влияние устройства и DPI

Zoom в визуальном представлении зависит от:

  • devicePixelRatio
  • плотности экрана
  • аппаратного ускорения

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


Векторные и растровые слои при изменении zoom

Растровые слои

  • фиксированные изображения тайлов
  • при увеличении zoom происходит масштабирование пикселей
  • возможна потеря чёткости

Векторные слои

  • геометрия пересчитывается на каждом zoom
  • текст и линии перерисовываются
  • сохраняется чёткость на любом уровне

В HERE Maps API современные карты преимущественно используют векторные слои, что делает zoom более гибким.


Связь zoom и масштабного коэффициента

Приближённое соответствие масштаба:

  • увеличение zoom на 1 ≈ увеличение масштаба в 2 раза

Формально:

scale ≈ 1 / 2^zoom

Однако реальный масштаб зависит от:

  • широты
  • DPI
  • проекции

Ограничения производительности при высоком zoom

На уровнях zoom 18–21 наблюдаются особенности:

  • рост количества объектов (POI, дороги)
  • увеличение количества подписи текстов
  • рост нагрузки на рендеринг

Оптимизации включают:

  • кластеризацию объектов
  • фильтрацию слоёв по zoom
  • упрощение геометрии

Управление слоями в зависимости от zoom

Слои могут включаться и выключаться по диапазону zoom:

layer.setMin(8);
layer.setMax(15);

Это позволяет:

  • скрывать мелкие объекты на низком zoom
  • показывать детали только при приближении

Типичные сценарии использования zoom

Глобальный обзор

  • zoom 1–3
  • отображение материков и океанов

Региональный уровень

  • zoom 4–8
  • страны, крупные дороги

Городской уровень

  • zoom 9–13
  • районы, магистрали

Уличный уровень

  • zoom 14–18
  • дома, перекрёстки

Детальный уровень

  • zoom 19–21
  • входы зданий, мелкие объекты

Особенности поведения zoom при инерции

При использовании жестов (mouse wheel, touch pinch):

  • zoom изменяется непрерывно
  • используется инерционное сглаживание
  • центр масштабирования фиксируется относительно курсора или жеста

Это обеспечивает стабильность восприятия при навигации по карте.