Географические визуализации в Vega и Vega-Lite строятся вокруг преобразования координат из пространств широты и долготы в экранные координаты. Это преобразование задаётся через систему проекций, которая определяет математическое отображение сферы Земли на плоскость. В спецификациях Vega и Vega-Lite эта логика инкапсулирована в поле projection (или projections в расширенной Vega-структуре), которое управляет всем процессом геометрического преобразования геоданных.
Геоданные обычно представлены в формате GeoJSON или TopoJSON и содержат координаты в виде пар [долгота, широта]. Эти координаты нельзя напрямую отрисовать в двумерной плоскости без искажений. Проекция определяет:
В Vega и Vega-Lite проекция является частью графического конвейера данных: сначала данные фильтруются и трансформируются, затем географические координаты проходят через projection, и только после этого попадают в геометрические примитивы (path, shape, symbol).
В Vega-Lite работа с проекциями максимально упрощена. Достаточно объявить объект projection на верхнем уровне спецификации:
{
"projection": {
"type": "mercator"
}
}
После этого все географические маркеры и геометрии автоматически используют указанную систему координат.
Пример настройки центра и масштаба:
{
"projection": {
"type": "mercator",
"center": [0, 50],
"scale": 120,
"translate": [400, 250]
}
}
В Vega-Lite географические данные отображаются через mark: “geoshape”. Именно этот тип маркера активирует систему проекций:
{
"data": {
"url": "world.geojson",
"format": {"type": "geojson"}
},
"mark": "geoshape",
"projection": {
"type": "naturalEarth1"
}
}
При таком описании Vega-Lite:
Одна из самых известных проекций, используемая в веб-картах.
{
"projection": {
"type": "mercator"
}
}
Особенности:
{
"projection": {
"type": "naturalEarth1"
}
}
Особенности:
{
"projection": {
"type": "equalEarth"
}
}
Особенности:
{
"projection": {
"type": "orthographic"
}
}
Особенности:
{
"projection": {
"type": "albersUsa"
}
}
Особенности:
В 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 → λ, φ
Это важно для:
Одной из ключевых возможностей Vega-Lite является автоматическое вписывание геометрии в область отображения:
{
"projection": {
"type": "mercator",
"fit": {"data": {"url": "countries.geojson"}}
}
}
Алгоритм fit выполняет:
Это устраняет необходимость ручной настройки scale и translate.
Проекции часто используются вместе с 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 зависят от формата входных данных:
Для точек (Point features) применяется та же проекция, что и для полигонов.
Параметр rotate особенно важен для глобальных карт:
{
"projection": {
"type": "orthographic",
"rotate": [-100, -40, 0]
}
}
Он управляет:
Это позволяет «перемещать» видимую часть глобуса без изменения данных.
Каждая проекция имеет неизбежные искажения:
В Vega это не скрывается, а становится частью визуального языка. Настройка projection фактически определяет семантику карты.
Проекции являются вычислительно затратным этапом при рендеринге. Основные факторы влияния:
Оптимизации:
Проекции тесно связаны с событиями взаимодействия:
Обратное преобразование координат позволяет определять, какая географическая точка соответствует экранному положению курсора.
Projection является промежуточным слоем между данными и визуальным представлением. Она не относится ни к данным, ни к графическим примитивам напрямую, но связывает их через математическое преобразование координат.
В Vega-Lite это поле скрывает сложность геометрических вычислений за декларативным интерфейсом, тогда как в Vega оно становится полноценным объектом графического конвейера с возможностью многократного использования и композиции.