Поле projections

Географические визуализации в Vega и Vega-Lite строятся вокруг преобразования координат из пространств широты и долготы в экранные координаты. Это преобразование задаётся через систему проекций, которая определяет математическое отображение сферы Земли на плоскость. В спецификациях Vega и Vega-Lite эта логика инкапсулирована в поле projection (или projections в расширенной Vega-структуре), которое управляет всем процессом геометрического преобразования геоданных.

Геоданные обычно представлены в формате GeoJSON или TopoJSON и содержат координаты в виде пар [долгота, широта]. Эти координаты нельзя напрямую отрисовать в двумерной плоскости без искажений. Проекция определяет:

  • способ преобразования сферических координат в декартовы
  • характер искажений (площадь, форма, расстояние, направление)
  • центрирование и масштаб карты
  • поворот глобуса или региона

В Vega и Vega-Lite проекция является частью графического конвейера данных: сначала данные фильтруются и трансформируются, затем географические координаты проходят через projection, и только после этого попадают в геометрические примитивы (path, shape, symbol).

Поле projection в Vega-Lite

В Vega-Lite работа с проекциями максимально упрощена. Достаточно объявить объект projection на верхнем уровне спецификации:

{
  "projection": {
    "type": "mercator"
  }
}

После этого все географические маркеры и геометрии автоматически используют указанную систему координат.

Основные параметры projection в Vega-Lite

  • type — тип проекции (mercator, equalEarth, naturalEarth1 и др.)
  • center — центр карты в формате [долгота, широта]
  • rotate — поворот сферы [λ, φ, γ]
  • scale — масштаб отображения
  • translate — смещение на холсте [x, y]
  • fit — автоматическое масштабирование под географические данные
  • clipAngle — отсечение видимой полусферы (для азимутальных проекций)

Пример настройки центра и масштаба:

{
  "projection": {
    "type": "mercator",
    "center": [0, 50],
    "scale": 120,
    "translate": [400, 250]
  }
}

Использование геометрических слоёв с projection

В Vega-Lite географические данные отображаются через mark: “geoshape”. Именно этот тип маркера активирует систему проекций:

{
  "data": {
    "url": "world.geojson",
    "format": {"type": "geojson"}
  },
  "mark": "geoshape",
  "projection": {
    "type": "naturalEarth1"
  }
}

При таком описании Vega-Lite:

  1. загружает GeoJSON
  2. интерпретирует геометрии (Polygon, MultiPolygon)
  3. применяет выбранную проекцию
  4. рендерит SVG или Canvas path

Распространённые типы проекций

Mercator

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

{
  "projection": {
    "type": "mercator"
  }
}

Особенности:

  • сохраняет углы
  • искажает площади на высоких широтах
  • подходит для интерактивных карт

Natural Earth

{
  "projection": {
    "type": "naturalEarth1"
  }
}

Особенности:

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

Equal Earth

{
  "projection": {
    "type": "equalEarth"
  }
}

Особенности:

  • сохраняет площади
  • подходит для статистических карт
  • визуально более симметрична, чем Mercator

Orthographic

{
  "projection": {
    "type": "orthographic"
  }
}

Особенности:

  • имитация глобуса
  • поддерживает эффект 3D-сферы
  • используется с clipAngle

Albers USA

{
  "projection": {
    "type": "albersUsa"
  }
}

Особенности:

  • специализированная проекция для США
  • включает отдельные масштабированные регионы (Аляска, Гавайи)

Поле projections в Vega (низкоуровневая спецификация)

В Vega (в отличие от Vega-Lite) проекции объявляются в массиве projections:

{
  "projections": [
    {
      "name": "myProjection",
      "type": "mercator"
    }
  ]
}

Далее эта проекция используется в transforms или marks:

{
  "marks": [
    {
      "type": "shape",
      "from": {"data": "world"},
      "encode": {
        "update": {
          "path": {"field": "path", "projection": "myProjection"}
        }
      }
    }
  ]
}

В Vega появляется больше контроля над конвейером рендеринга, включая возможность:

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

Алгоритмическая природа проекций

Внутри Vega используется библиотека d3-geo, которая реализует математические функции проекций. Каждая проекция — это функция:

λ, φ → x, y

где:

  • λ — долгота
  • φ — широта
  • x, y — координаты на плоскости

Обратное преобразование также возможно для интерактивных сценариев:

x, y → λ, φ

Это важно для:

  • обработки кликов по карте
  • привязки tooltip к географическим координатам
  • динамического изменения центра карты

Автоматическое масштабирование fit

Одной из ключевых возможностей Vega-Lite является автоматическое вписывание геометрии в область отображения:

{
  "projection": {
    "type": "mercator",
    "fit": {"data": {"url": "countries.geojson"}}
  }
}

Алгоритм fit выполняет:

  • вычисление bounding box всех геометрий
  • подбор масштаба
  • центрирование
  • вычисление translate

Это устраняет необходимость ручной настройки scale и translate.

Градиенты, graticule и вспомогательная геометрия

Проекции часто используются вместе с graticule — сеткой меридианов и параллелей:

{
  "data": {
    "graticule": true
  },
  "mark": "geoshape",
  "projection": {
    "type": "mercator"
  }
}

Graticule проходит через ту же систему projection, что позволяет визуально оценивать искажения.

Многослойные карты и общая проекция

В Vega-Lite все слои (layer) используют одну и ту же проекцию, если она задана на верхнем уровне:

{
  "projection": {"type": "mercator"},
  "layer": [
    {
      "data": {"url": "countries.geojson"},
      "mark": "geoshape"
    },
    {
      "data": {"url": "cities.json"},
      "mark": "circle"
    }
  ]
}

Это гарантирует:

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

Особенности работы с геоданными

Проекции в Vega зависят от формата входных данных:

  • GeoJSON — используется напрямую
  • TopoJSON — предварительно декодируется в геометрию
  • CSV с координатами — требует преобразования через lookup или calculate

Для точек (Point features) применяется та же проекция, что и для полигонов.

Центрирование и вращение сферы

Параметр rotate особенно важен для глобальных карт:

{
  "projection": {
    "type": "orthographic",
    "rotate": [-100, -40, 0]
  }
}

Он управляет:

  • вращением по долготе
  • наклоном по широте
  • вращением вокруг оси Z

Это позволяет «перемещать» видимую часть глобуса без изменения данных.

Ограничения и искажения

Каждая проекция имеет неизбежные искажения:

  • Mercator — сильное увеличение полярных областей
  • Equal Earth — компромисс между формой и площадью
  • Orthographic — отображает только одну полусферу

В Vega это не скрывается, а становится частью визуального языка. Настройка projection фактически определяет семантику карты.

Производительность проекций

Проекции являются вычислительно затратным этапом при рендеринге. Основные факторы влияния:

  • количество геометрических вершин
  • сложность полигонов
  • использование clipAngle и clipping
  • интерактивные трансформации (zoom/pan)

Оптимизации:

  • упрощение геометрии (topojson simplification)
  • кэширование path-результатов
  • использование Canvas вместо SVG при больших наборах данных

Взаимодействие с интерактивностью

Проекции тесно связаны с событиями взаимодействия:

  • hover по географическим объектам
  • клик по регионам
  • динамическое изменение центра карты
  • масштабирование через zoom transform

Обратное преобразование координат позволяет определять, какая географическая точка соответствует экранному положению курсора.

Роль projection в архитектуре Vega

Projection является промежуточным слоем между данными и визуальным представлением. Она не относится ни к данным, ни к графическим примитивам напрямую, но связывает их через математическое преобразование координат.

В Vega-Lite это поле скрывает сложность геометрических вычислений за декларативным интерфейсом, тогда как в Vega оно становится полноценным объектом графического конвейера с возможностью многократного использования и композиции.