Проекции
Картографические проекции преобразуют пары (долгота, широта) в координаты (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" }
],
...
});