Марка geoshape в Vega и Vega-Lite предназначена для
визуализации географических данных на основе геометрий, описанных в
формате GeoJSON. В отличие от точечных или линейных представлений, она
работает непосредственно с полигонами и мультиполигонами, отображая
пространственные области как цельные геометрические объекты.
Использование geoshape опирается на концепцию
географических проекций, где координаты широты и долготы преобразуются в
плоское координатное пространство визуализации. Без корректной проекции
географические данные не могут быть интерпретированы как двумерная
сцена.
Географическая визуализация в Vega строится на трёх ключевых компонентах:
geoshapeGeoJSON выступает контейнером геометрий: стран, регионов, административных границ или пользовательских зон. Каждый объект содержит координаты, описывающие полигоны.
Проекция определяет математическое преобразование сферических координат в плоскость. Наиболее часто используются:
mercator — стандартная Web Mercator проекцияalbersUsa — специализированная для СШАequalEarth — равновеликая глобальная проекцияМарка geoshape интерпретирует уже спроецированные данные
и формирует SVG- или Canvas-геометрию.
В Vega-Lite geoshape задаётся через поле
mark и связывается с геоданными через
data:
{
"data": {
"url": "world-110m.json",
"format": {
"type": "topojson",
"feature": "countries"
}
},
"mark": "geoshape",
"projection": {
"type": "equalEarth"
}
}
В этом примере используется TopoJSON, который является оптимизированным вариантом GeoJSON. Vega-Lite автоматически преобразует топологические структуры в геометрические полигоны.
Проекция является обязательным элементом, так как
geoshape не работает в абстрактном пространстве координат.
Она задаётся явно или выбирается автоматически.
Ключевые параметры проекции:
type — тип проекцииscale — масштаб отображенияtranslate — смещение центраcenter — географический центр (долгота/широта)Пример конфигурации:
{
"projection": {
"type": "mercator",
"scale": 150,
"center": [0, 20],
"translate": [400, 250]
}
}
Изменение масштаба напрямую влияет на плотность отображения геометрий, а центр задаёт фокус карты.
Марка geoshape поддерживает два основных формата:
Каждый объект хранит полные координаты:
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [[[30, 10], [40, 40], [20, 40], [30, 10]]]
}
}
Использует общие ребра между объектами, уменьшая размер данных.
{
"type": "Topology",
"objects": {
"countries": { "type": "GeometryCollection", "geometries": [] }
}
}
В Vega TopoJSON предпочтителен при работе с крупными наборами карт, так как снижает избыточность геометрических данных.
Визуальные свойства задаются через стандартные каналы Vega:
fill — цвет заливкиstroke — цвет границыstrokeWidth — толщина линииopacity — прозрачностьПример:
{
"mark": {
"type": "geoshape",
"fill": "#e0e0e0",
"stroke": "#333",
"strokeWidth": 0.5
}
}
При отсутствии данных стили применяются ко всем геометриям одинаково.
geoshape часто используется для хлороплетных карт, где
каждая геометрия окрашивается в зависимости от значения.
Пример связывания данных:
{
"data": {
"url": "countries.json",
"format": {
"type": "topojson",
"feature": "countries"
}
},
"transform": [
{
"lookup": "id",
"from": {
"data": {
"url": "values.csv"
},
"key": "country_id",
"fields": ["value"]
}
}
],
"mark": "geoshape",
"encoding": {
"color": {
"field": "value",
"type": "quantitative"
}
},
"projection": {
"type": "equalEarth"
}
}
Здесь используется трансформация lookup, которая
соединяет геометрию с внешними числовыми данными.
В Vega существуют другие географические марки, но
geoshape имеет специфическую роль:
circle — точечные данныеline — линейные маршрутыgeoshape — полигональные областиКлючевое отличие заключается в том, что geoshape не
интерпретирует координаты как отдельные точки визуализации. Он работает
с цельными геометриями, сохраняя структуру объектов.
В Vega (не Vega-Lite) geoshape задаётся через
marks и требует явного определения проекций и
трансформаций.
{
"marks": [
{
"type": "geoshape",
"from": {
"data": "world"
},
"encode": {
"enter": {
"fill": {"value": "#bbb"},
"stroke": {"value": "#666"}
}
}
}
],
"projections": [
{
"name": "proj",
"type": "mercator"
}
]
}
В Vega связь между данными и геометрией более явная, что даёт гибкость, но увеличивает сложность конфигурации.
Перед отрисовкой данные часто проходят трансформации:
geopath — преобразование GeoJSON в SVG pathgeojson — нормализация структурыprojection — пересчёт координатМарка geoshape использует результат этих трансформаций
как входной набор путей.
При работе с большими картографическими наборами важны следующие аспекты:
Особенно критичен размер полигонов: чрезмерно детализированные границы значительно увеличивают стоимость рендеринга.
Хотя geoshape сам по себе является статической маркой,
он часто используется вместе с интерактивными преобразованиями:
encodingselectionПример выбора региона:
{
"selection": {
"region": {
"type": "single",
"on": "click",
"fields": ["id"]
}
},
"mark": "geoshape",
"encoding": {
"fillOpacity": {
"condition": {
"selection": "region",
"value": 1
},
"value": 0.6
}
}
}
Такой подход позволяет создавать интерактивные карты без изменения исходных данных.
Несмотря на универсальность, существует ряд ограничений:
Также важно учитывать, что geoshape не предназначен для
динамически изменяющихся геометрий в реальном времени — его оптимизация
ориентирована на статические наборы данных.
geoshape используется в задачах:
В таких сценариях геометрия выступает не просто графическим элементом, а носителем агрегированных данных.
В сложных визуализациях geoshape часто является базовым
слоем, поверх которого накладываются дополнительные элементы:
Такой многослойный подход реализуется через последовательность
layer в Vega-Lite, где geoshape формирует
географический фундамент сцены.