Проекция в Vega: полная конфигурация

Географическая или сферическая проекция в Vega определяет преобразование координат долготы и широты в экранные координаты x и y. В основе лежит объект projection, который связывает геометрическое пространство Земли с плоскостью визуализации. Проекция выступает промежуточным слоем между геоданными и отрисовкой, обеспечивая корректное отображение карт, регионов и пространственных распределений.

В Vega проекция является самостоятельным компонентом, который может использоваться совместно с географическими трансформациями (geojson, graticule, geopath) и масштабированием сцены.


Структура объекта projection

Базовая конфигурация проекции описывается через поле projection в корневом объекте спецификации или внутри географических преобразований.

{
  "projection": {
    "type": "mercator",
    "scale": 150,
    "translate": [480, 300]
  }
}

Каждый параметр определяет геометрическое поведение:

  • type — тип проекции
  • scale — масштабирование сферы на плоскости
  • translate — смещение центра отображения
  • дополнительные параметры, зависящие от типа проекции

Типы проекций

Vega поддерживает широкий набор географических преобразований. Выбор типа определяет математическую модель отображения поверхности Земли.

Mercator

Одна из наиболее распространённых проекций для веб-картографии.

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

Свойства:

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

Albers USA

Специализированная проекция для США, объединяющая несколько региональных проекций.

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

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

  • оптимальна для отображения штатов США
  • включает Аляску и Гавайи в отдельной форме
  • автоматическая компоновка регионов

Equal Earth

Проекция с балансом между искажением площади и форм.

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

Характеристики:

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

Natural Earth

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

Используется для:

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

Orthographic

Сферическая проекция, имитирующая вид Земли из космоса.

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

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

  • отображает только видимую полусферу
  • используется для глобусов

Stereographic и другие

{
  "projection": {
    "type": "stereographic"
  }
}

Дополнительные типы:

  • stereographic
  • azimuthalEqualArea
  • conicConformal
  • conicEqualArea
  • transverseMercator

Каждая проекция соответствует определённой математической модели картографического преобразования.


Масштабирование и позиционирование

scale

Параметр scale управляет размером отображаемой карты.

{
  "projection": {
    "type": "mercator",
    "scale": 200
  }
}
  • большие значения увеличивают карту
  • малые значения уменьшают детализацию

translate

Определяет смещение центра карты в пикселях.

{
  "projection": {
    "translate": [400, 250]
  }
}

Формат:

[x, y]

Используется для центрирования карты в холсте.


center

Задаёт географический центр проекции в координатах долгота/широта.

{
  "projection": {
    "center": [0, 0]
  }
}
  • первый элемент — долгота
  • второй элемент — широта

rotate

Позволяет вращать сферу относительно осей.

{
  "projection": {
    "rotate": [0, 0, 0]
  }
}

Формат:

[lambda, phi, gamma]
  • lambda — вращение по долготе
  • phi — вращение по широте
  • gamma — дополнительный поворот плоскости

clipAngle и ограничение видимости

Параметр clipAngle ограничивает видимую область сферы.

{
  "projection": {
    "type": "orthographic",
    "clipAngle": 90
  }
}
  • значения задаются в градусах
  • используется для имитации глобуса
  • отсекает невидимые области

precision и качество вычислений

{
  "projection": {
    "precision": 0.1
  }
}
  • определяет допустимую ошибку вычислений
  • меньшие значения повышают точность
  • увеличивает нагрузку на вычисления

fit: автоматическая подгонка под данные

Один из ключевых механизмов адаптации проекции к данным.

{
  "projection": {
    "type": "mercator",
    "fit": {
      "type": "FeatureCollection",
      "features": []
    }
  }
}

Функция fit позволяет:

  • автоматически центрировать геометрию
  • масштабировать карту под границы данных
  • устранять необходимость ручной настройки scale и translate

Возможные типы входных данных:

  • GeoJSON FeatureCollection
  • Feature
  • Geometry

size и связь с canvas

{
  "projection": {
    "size": [800, 600]
  }
}

Используется для:

  • определения области визуализации
  • расчёта масштабов при fit
  • синхронизации с размерами сцены

Интеграция с mark и geoshape

Проекция напрямую используется в географических mark-ах.

{
  "marks": [
    {
      "type": "shape",
      "from": { "data": "world" },
      "encode": {
        "enter": {
          "fill": { "value": "#ddd" }
        }
      },
      "transform": [
        {
          "type": "geoshape",
          "projection": "projection"
        }
      ]
    }
  ]
}

Здесь:

  • geoshape использует заданную projection
  • геометрия автоматически преобразуется в экранные координаты

Связь с graticule

Graticule — сетка меридианов и параллелей, зависящая от проекции.

{
  "data": {
    "graticule": true
  },
  "transform": [
    {
      "type": "geoshape",
      "projection": "projection"
    }
  ]
}

Проекция влияет на:

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

Комбинирование параметров

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

{
  "projection": {
    "type": "mercator",
    "scale": 180,
    "center": [30, 50],
    "translate": [500, 300],
    "precision": 0.5
  }
}

Такой набор позволяет:

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

Поведение при изменении размеров

При изменении размеров контейнера:

  • translate требует пересчёта
  • fit может быть повторно вычислен
  • scale часто становится относительным параметром

Проекции в Vega не являются статическими: они пересчитываются при каждом изменении состояния сцены, если привязаны к динамическим данным или размерам.


Геометрические ограничения и искажения

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

  • Mercator увеличивает полярные области
  • Conic проекции оптимальны для средних широт
  • Azimuthal проекции искажают края круга

Эти свойства не конфигурируются напрямую, но определяются математической моделью type.


Использование нескольких проекций

Хотя одна спецификация обычно содержит одну проекцию, возможны сценарии с раздельной отрисовкой:

  • карта мира + локальная вставка
  • сравнение регионов
  • мини-карта (inset map)

Каждая сцена может иметь собственный projection, независимо от других.


Производительность и вычисления

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

  • сложность трансформации координат
  • количество геометрических объектов
  • precision вычислений

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


Поведение с динамическими данными

При изменении GeoJSON:

  • fit может пересчитывать масштаб
  • center может смещаться
  • геометрия автоматически перепроецируется

Это делает projection ключевым элементом реактивной визуализации пространственных данных.