Трансформация graticule в Vega и Vega-Lite предназначена
для генерации координатной сетки географических линий: меридианов и
параллелей. Такие линии часто используются при визуализации карт,
особенно в сочетании с географическими проекциями
(projection) и геометрическими объектами
(geoshape).
graticule создаёт GeoJSON-объекты автоматически, без
необходимости загружать внешние данные. Это особенно удобно при
построении:
Трансформация генерирует объект типа MultiLineString,
содержащий набор координатных линий.
graticuleМинимальная конфигурация выглядит следующим образом:
{
"data": {
"graticule": true
},
"mark": "geoshape"
}
В Vega-Lite трансформация обычно располагается внутри блока
data.
Пример:
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"width": 600,
"height": 300,
"projection": {
"type": "equalEarth"
},
"data": {
"graticule": true
},
"mark": {
"type": "geoshape",
"stroke": "#888",
"strokeWidth": 1,
"fill": null
}
}
Результатом станет географическая сетка, автоматически спроецированная в выбранную систему координат.
projectionТрансформация graticule почти всегда используется
совместно с географическими проекциями.
Пример:
"projection": {
"type": "mercator"
}
Или:
"projection": {
"type": "orthographic"
}
Без проекции координаты долготы и широты не смогут корректно отображаться на плоскости.
Наиболее популярные типы проекций:
| Проекция | Особенности |
|---|---|
mercator |
Классическая цилиндрическая проекция |
equalEarth |
Равновеликая карта мира |
orthographic |
Эффект глобуса |
naturalEarth1 |
Сглаженная мировая карта |
albers |
Часто используется для США |
azimuthalEqualArea |
Азимутальная проекция |
Один из самых распространённых сценариев — создание глобуса.
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"width": 500,
"height": 500,
"projection": {
"type": "orthographic"
},
"layer": [
{
"data": {
"sphere": true
},
"mark": {
"type": "geoshape",
"fill": "#dbefff",
"stroke": "#000"
}
},
{
"data": {
"graticule": true
},
"mark": {
"type": "geoshape",
"stroke": "#999",
"strokeWidth": 0.5
}
}
]
}
Здесь используются два слоя:
sphere — геометрия земного шара.graticule — координатная сетка.По умолчанию Vega использует стандартный шаг между меридианами и параллелями. Однако сетку можно настраивать более точно.
stepОпределяет расстояние между линиями.
{
"data": {
"graticule": {
"step": [10, 10]
}
}
}
Первое значение:
Второе:
В данном случае линии будут проводиться через каждые 10 градусов.
graticule поддерживает два уровня детализации:
stepMajorШаг главных линий.
{
"graticule": {
"stepMajor": [90, 45]
}
}
stepMinorШаг второстепенных линий.
{
"graticule": {
"stepMinor": [10, 10]
}
}
Такой подход позволяет строить карты с выраженной основной сеткой и более тонкой вспомогательной разметкой.
extentПозволяет ограничить диапазон отображаемых координат.
{
"graticule": {
"extent": [
[-180, -80],
[180, 80]
]
}
}
Формат:
[
[minLongitude, minLatitude],
[maxLongitude, maxLatitude]
]
extentMajorОпределяет диапазон для основных линий.
{
"graticule": {
"extentMajor": [
[-180, -90],
[180, 90]
]
}
}
extentMinorОпределяет диапазон второстепенной сетки.
{
"graticule": {
"extentMinor": [
[-180, -80],
[180, 80]
]
}
}
Поскольку graticule обычно визуализируется через
geoshape, доступны все стандартные параметры
оформления.
"mark": {
"type": "geoshape",
"stroke": "#666"
}
"mark": {
"strokeWidth": 0.8
}
"mark": {
"strokeDash": [4, 2]
}
"mark": {
"opacity": 0.4
}
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"width": 700,
"height": 350,
"projection": {
"type": "naturalEarth1"
},
"data": {
"graticule": {
"step": [5, 5]
}
},
"mark": {
"type": "geoshape",
"stroke": "#d0d0d0",
"strokeWidth": 0.5
}
}
Шаг 5 градусов создаёт детализированную географическую сетку.
graticule и GeoJSON-картНа практике graticule почти всегда комбинируется с
географическими данными.
Пример с картой мира:
{
"layer": [
{
"data": {
"graticule": true
},
"mark": {
"type": "geoshape",
"stroke": "#ccc"
}
},
{
"data": {
"url": "world-110m.json",
"format": {
"type": "topojson",
"feature": "countries"
}
},
"mark": {
"type": "geoshape",
"fill": "#4c78a8",
"stroke": "#fff"
}
}
]
}
Порядок слоёв имеет значение:
graticule в VegaВ чистом Vega синтаксис более гибкий.
Пример:
{
"$schema": "https://vega.github.io/schema/vega/v5.json",
"width": 600,
"height": 300,
"projections": [
{
"name": "projection",
"type": "mercator"
}
],
"data": [
{
"name": "grid",
"transform": [
{
"type": "graticule",
"step": [15, 15]
}
]
}
],
"marks": [
{
"type": "shape",
"from": {
"data": "grid"
},
"transform": [
{
"type": "geoshape",
"projection": "projection"
}
],
"encode": {
"update": {
"stroke": {
"value": "#999"
},
"strokeWidth": {
"value": 1
},
"fill": {
"value": null
}
}
}
}
]
}
graticule как источника данныхgraticule создаёт полноценный географический объект,
который можно использовать далее в трансформациях.
Например:
{
"data": [
{
"name": "grid",
"transform": [
{
"type": "graticule"
}
]
}
]
}
Полученные данные затем могут:
graticule генерируется динамически, поэтому при слишком
маленьком шаге возможно увеличение нагрузки на рендеринг.
Потенциально проблемные значения:
"step": [1, 1]
или:
"stepMinor": [0.5, 0.5]
Такие параметры создают огромное количество сегментов линий.
Для интерактивных визуализаций обычно используют:
| Тип карты | Рекомендуемый шаг |
|---|---|
| Общая карта мира | 10–20 |
| Детализированная карта | 5 |
| Глобус | 15 |
| Анимации | 20–30 |
graticule можно использовать совместно с:
signal в Vega.Пример вращающегося глобуса в Vega:
{
"signals": [
{
"name": "rotate",
"value": 0,
"on": [
{
"events": {
"type": "timer",
"throttle": 50
},
"update": "rotate + 1"
}
]
}
]
}
Далее значение rotate связывается с параметром
проекции.
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"width": 800,
"height": 450,
"projection": {
"type": "equalEarth"
},
"layer": [
{
"data": {
"sphere": true
},
"mark": {
"type": "geoshape",
"fill": "#071b2d"
}
},
{
"data": {
"graticule": {
"step": [10, 10]
}
},
"mark": {
"type": "geoshape",
"stroke": "#1d4e89",
"strokeWidth": 0.7,
"opacity": 0.7
}
}
]
}
Такой стиль часто используется в:
projectionОшибка:
"data": {
"graticule": true
}
без:
"projection"
Результат:
markНеверно:
"mark": "line"
Правильно:
"mark": "geoshape"
graticule генерирует географическую геометрию, а не
обычные Cartesian-координаты.
"step": [1, 1]
Может привести к:
graticule +
sphereСоздание глобуса.
graticule +
topojsonОтрисовка карт государств.
graticule +
lookupСвязывание геометрии с табличными данными.
graticule +
signalИнтерактивные географические интерфейсы.
graticuleТрансформация занимает особое место в географическом стеке Vega:
graticule
↓
projection
↓
geoshape
↓
rendering
Этапы обработки:
graticuleТрансформация особенно полезна в следующих случаях:
graticule| Параметр | Назначение |
|---|---|
step |
Общий шаг линий |
stepMajor |
Шаг основных линий |
stepMinor |
Шаг вспомогательных линий |
extent |
Общая область |
extentMajor |
Область основных линий |
extentMinor |
Область второстепенных линий |
precision |
Точность генерации сегментов |
precisionОпределяет детализацию кривых.
Пример:
{
"graticule": {
"precision": 2.5
}
}
Меньшие значения:
Большие значения:
graticule генерирует GeoJSON-подобную структуру:
{
"type": "MultiLineString",
"coordinates": [...]
}
Это делает трансформацию совместимой со всей географической экосистемой Vega и D3 Geo.
Внутренне Vega использует механизмы D3 Geo, поэтому поведение
graticule близко к:
d3.geoGraticule()
Это обеспечивает: