Проекции

Картографические проекции преобразуют пары (долгота, широта) в координаты (x, y). Vega использует проекции для размещения географических точек, координаты которых входят во входные данные, и географических областей (например, стран и регионов), представленных в формате GeoJSON.

Содержание

Свойства проекций

Свойство Тип Описание
name String Обязательно. Уникальное имя проекции. Проекции и шкалы используют одно пространство имён, поэтому их имена не должны повторяться.
type String Тип картографической проекции. По умолчанию "mercator". Регистр букв не учитывается: "albers" и "Albers" обозначают один тип.
clipAngle Number Радиус окружности отсечения проекции, заданный углом в градусах. При null вместо отсечения по малой окружности применяется разрез по антимеридиану.
clipExtent Array Границы области просмотра в пикселях, за которыми изображение обрезается. Они задаются массивом [[x0, y0], [x1, y1]]: x0 — левая граница, y0 — верхняя, x1 — правая, y1 — нижняя. При null отсечение по области просмотра отключено.
scale Number Коэффициент масштаба проекции. Значение по умолчанию зависит от её типа. Коэффициент линейно связан с расстоянием между проецируемыми точками, но одинаковые числовые значения в разных проекциях несопоставимы.
translate Number[ ] Смещение проекции — массив из двух элементов [tx, ty]. Если значение не задано, используется текущее смещение, по умолчанию [480, 250]. Оно определяет координаты центра проекции в пикселях. При стандартном смещении точка (0°, 0°) оказывается в центре области 960×500.
center Number[ ] Центр проекции — массив из долготы и широты в градусах. По умолчанию [0, 0].
rotate Number[ ] Углы поворота по трём осям. Значение — массив из двух или трёх чисел [lambda, phi, gamma], задающих поворот вокруг соответствующих осей сферы в градусах. Они соответствуют рысканию, тангажу и крену. По умолчанию [0, 0, 0].
parallels Number[ ] Для конических проекций — две стандартные параллели, определяющие размещение карты. Значение по умолчанию зависит от типа проекции.
pointRadius Number Радиус по умолчанию в пикселях для геометрий GeoJSON Point и MultiPoint. Это постоянное значение. Чтобы менять радиус в зависимости от данных, используйте соответствующий параметр преобразований GeoPath и GeoShape. По умолчанию 4,5.
precision Number Порог адаптивной повторной дискретизации проекции в пикселях. Он соответствует расстоянию в алгоритме Дугласа — Пекера. Если параметр не задан, используется текущее значение точности, по умолчанию √0,5 ≅ 0,70710…
fit Object | Array Данные GeoJSON, под которые проекция пытается автоматически подобрать параметры translate и scale. Объект должен быть GeoJSON Feature или FeatureCollection. Если задан массив, каждый его элемент может быть Feature, FeatureCollection или вложенным массивом объектов Feature.
extent Array[ ] Вместе с fit задаёт в пикселях область, под которую нужно подогнать проекцию. Границы задаются массивом [[x0, y0], [x1, y1]], где x0 — левая граница, y0 — верхняя, x1 — правая, y1 — нижняя.
size Number[ ] Вместе с fit задаёт ширину и высоту области в пикселях, под которую нужно подогнать проекцию. Эквивалентно значению extent [[0, 0], size].

Помимо перечисленных общих свойств, отдельные типы проекций из библиотеки d3-geo-projection поддерживают следующие свойства: coefficient, distance, fraction, lobes, parallel, radius, ratio, spacing, tilt.

Другие значения по умолчанию для этих свойств можно задать в пользовательском объекте конфигурации.

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

Vega поддерживает все картографические проекции библиотеки d3-geo, а также проекцию mollweide.

Тип Описание
albers Равновеликая коническая проекция Альберса. Вариант "conicEqualArea", настроенный для США.
albersUsa Составная проекция для 48 смежных штатов США, Гавайев и Аляски. Для Аляски коэффициент масштаба уменьшен до 0,35 от коэффициента для остальных частей проекции.
azimuthalEqualArea Равновеликая азимутальная проекция.
azimuthalEquidistant Равнопромежуточная азимутальная проекция.
conicConformal Равноугольная коническая проекция. По умолчанию параллели равны [30°, 30°], что даёт плоскую верхнюю часть.
conicEqualArea Равновеликая коническая проекция Альберса.
conicEquidistant Равнопромежуточная коническая проекция.
equalEarth Равновеликая проекция Equal Earth, разработанная Бояном Шавричем и соавторами в 2018 году.
equirectangular Равнопромежуточная проекция (plate carrée), близкая к непосредственному использованию долготы и широты.
gnomonic Гномоническая проекция.
identity Тождественное преобразование для смещения, масштабирования и отсечения плоской геометрии. Также поддерживает логические параметры reflectX и reflectY. ≥ 3.3
mercator Сферическая проекция Меркатора. Значение clipExtent по умолчанию отображает мир в квадрат и обрезает широты примерно за пределами ±85°.
mollweide Равновеликая псевдоцилиндрическая проекция, обычно используемая для карт всего мира или звёздного неба. ≥ 5.9
naturalEarth1 Псевдоцилиндрическая проекция Natural Earth, разработанная Томом Паттерсоном. Она не является ни равноугольной, ни равновеликой, но хорошо выглядит на мелкомасштабных картах мира. ≥ 4.0
orthographic Ортографическая проекция.
stereographic Стереографическая проекция.
transverseMercator Поперечная сферическая проекция Меркатора. Значение clipExtent по умолчанию отображает мир в квадрат и обрезает широты примерно за пределами ±85°.

Добавление проекций

Vega можно дополнить другими проекциями, например из библиотеки d3-geo-projection.

Чтобы зарегистрировать в Vega все дополнительные проекции d3-geo-projection, подключите библиотеку vega-projection-extended:

<script src="https://cdn.jsdelivr.net/npm/vega-projection-extended@2"></script>

Пользовательские проекции также можно регистрировать вручную методом vega.projection:

// Предполагается, что d3-geo-projection импортирована в переменную d3.
// Для регистрации в Vega передайте имя и функцию проекции.
vega.projection('winkel3', d3.geoWinkel3);

// Теперь парсер и среда выполнения Vega поддерживают проекцию 'winkel3'
var runtime = vega.parse({
  ...,
  "projections": [
    { "name": "proj", "type": "winkel3" }
  ],
  ...
});