Точки на карте: mark point поверх geoshape

Геопространственная визуализация в Vega-Lite строится вокруг композиции географических преобразований, слоёв и визуальных маркеров, где базовая карта (геошейп) выступает контекстом, а точечные данные — семантическими акцентами. В связке с Vega эта модель позволяет формировать декларативные сцены, в которых геометрия и данные объединяются через единый JSON-спецификатор.

Геошейп (geoshape) в Vega-Lite представляет собой визуализацию полигональных данных, чаще всего полученных из TopoJSON или GeoJSON. Он используется для отображения границ стран, регионов, административных единиц или любых областных структур.

Ключевая особенность geoshape заключается в том, что он не требует явного кодирования координат в каждом визуальном элементе — вместо этого используется географическая проекция.

Типичная структура данных для геошейпа включает:

  • TopoJSON с объектом стран
  • преобразование через transform feature
  • применение projection (например, equalEarth, mercator, naturalEarth1)

Пример базового слоя:

{
  "data": {
    "url": "https://cdn.jsdelivr.net/npm/world-atlas@2/countries-110m.json",
    "format": {
      "type": "topojson",
      "feature": "countries"
    }
  },
  "mark": {
    "type": "geoshape",
    "fill": "#e5e5e5",
    "stroke": "#999"
  },
  "projection": {
    "type": "naturalEarth1"
  }
}

Геошейп в этом случае формирует «подложку», на которую затем накладываются другие визуальные слои.

Точечные данные поверх географии

Mark point используется для отображения дискретных объектов: городов, событий, координат наблюдений, точек продаж, климатических станций. В контексте картографической визуализации он почти всегда применяется поверх geoshape в составе многослойной композиции.

Каждая точка задаётся через координаты:

  • longitude (долгота)
  • latitude (широта)

В Vega-Lite они кодируются через longitude и latitude каналы.

Композиция слоёв: geoshape + point

Основной механизм наложения реализуется через layer. Геошейп создаёт фон, точечный слой добавляет семантические объекты.

{
  "projection": {
    "type": "naturalEarth1"
  },
  "layer": [
    {
      "data": {
        "url": "https://cdn.jsdelivr.net/npm/world-atlas@2/countries-110m.json",
        "format": {
          "type": "topojson",
          "feature": "countries"
        }
      },
      "mark": {
        "type": "geoshape",
        "fill": "#f2f2f2",
        "stroke": "#bdbdbd"
      }
    },
    {
      "data": {
        "values": [
          { "city": "London", "lon": -0.1276, "lat": 51.5072 },
          { "city": "Tokyo", "lon": 139.6917, "lat": 35.6895 },
          { "city": "Almaty", "lon": 76.8865, "lat": 43.2383 }
        ]
      },
      "mark": {
        "type": "circle",
        "size": 80,
        "color": "red"
      },
      "encoding": {
        "longitude": { "field": "lon", "type": "quantitative" },
        "latitude": { "field": "lat", "type": "quantitative" },
        "tooltip": [
          { "field": "city", "type": "nominal" }
        ]
      }
    }
  ]
}

Здесь важен порядок слоёв: geoshape всегда размещается ниже, а point — выше, иначе геометрия перекрывает точки.

Географическая проекция как связующее звено

Projection определяет, как сферические координаты преобразуются в 2D-плоскость. Без него наложение geoshape и point невозможно.

Наиболее используемые типы:

  • mercator — классическая веб-карта
  • naturalEarth1 — визуально сбалансированная мировая проекция
  • equalEarth — сохраняет относительные площади
  • albersUsa — специализированная проекция США

Проекция задаётся на уровне всей визуализации:

"projection": {
  "type": "mercator"
}

Все слои внутри автоматически используют одну систему координат.

Различие ролей geoshape и point

Geoshape и point выполняют принципиально разные функции:

geoshape

  • контекстная геометрия
  • административные границы
  • визуальная база
  • редко интерактивен

point

  • дискретные наблюдения
  • события и объекты
  • высокая интерактивность
  • кодирование метрик (размер, цвет, форма)

Визуальная модель строится как «фон + данные», где фон не несёт аналитической нагрузки, а точки являются носителями информации.

Масштабирование точек и кодирование значений

Point-слой часто расширяется через encoding:

  • size — интенсивность, количество, важность
  • color — категория или группа
  • opacity — плотность или неопределённость

Пример:

"encoding": {
  "size": {
    "field": "value",
    "type": "quantitative"
  },
  "color": {
    "field": "category",
    "type": "nominal"
  }
}

Это позволяет превращать карту из простого набора координат в аналитическую поверхность.

Интерактивность через tooltip и selection

В Vega-Lite интерактивность добавляется декларативно.

Tooltip:

"tooltip": [
  { "field": "city", "type": "nominal" },
  { "field": "value", "type": "quantitative" }
]

Для более сложного поведения используются selections:

  • hover выделение
  • click фильтрация
  • brush-зоны

Point-слой на карте часто становится основным интерактивным элементом, тогда как geoshape остаётся статичным.

Работа с реальными геоданными

Часто geoshape строится из внешних источников:

  • world-atlas TopoJSON
  • Natural Earth datasets
  • пользовательские GeoJSON

Ключевой этап — преобразование TopoJSON:

"format": {
  "type": "topojson",
  "feature": "countries"
}

После этого Vega-Lite автоматически разворачивает полигоны в геометрические контуры.

Совмещение таблиц точек с географией

Часто точечные данные не содержат геометрии напрямую и требуют join-операций.

Пример использования lookup:

{
  "transform": [
    {
      "lookup": "country",
      "from": {
        "data": {
          "url": "countries_centroids.json"
        },
        "key": "name",
        "fields": ["lon", "lat"]
      }
    }
  ]
}

Это позволяет связывать агрегированные данные с координатами центроидов стран.

Конфликт масштабов и плотности точек

При наложении point поверх geoshape возникает проблема плотности:

  • слишком много точек → визуальный шум
  • перекрытие маркеров → потеря информации
  • неравномерное распределение → смещение восприятия

Решения:

  • агрегация (aggregate transform)
  • кластеризация (preprocessing)
  • уменьшение opacity
  • scale size по логарифму

Символы вместо кругов

Mark point может быть представлен не только кругами:

  • circle — стандартный маркер
  • square — категориальные данные
  • symbol — гибкая форма
"mark": {
  "type": "point",
  "shape": "triangle"
}

Symbol особенно полезен при многоклассовой визуализации поверх географической карты.

Многослойные географические сцены

Сложные сцены строятся из нескольких слоёв:

  • geoshape (страны)
  • geoshape (реки или климатические зоны)
  • point (города)
  • line (маршруты)
  • text (подписи)

В Vega-Lite порядок слоёв определяет визуальную иерархию, а не координатное размещение.

Различия подходов Vega и Vega-Lite

Vega предоставляет более низкоуровневый контроль:

  • явные сцены (scenegraph)
  • ручное управление трансформациями
  • сложные dataflow-цепочки

Vega-Lite, напротив:

  • декларативен
  • сокращает спецификацию
  • автоматически управляет масштабированием и проекцией

В географических визуализациях это означает:

  • Vega: полный контроль над геометрией и рендерингом
  • Vega-Lite: быстрые композиции geoshape + point через layer

Практика построения аналитической карты

Типовая структура аналитической карты с точками:

  1. geoshape как базовый слой стран
  2. point как города или события
  3. encoding цветом по метрике
  4. size как интенсивность
  5. tooltip для детализации

Эта структура стала стандартом для визуализации:

  • эпидемиологических данных
  • экономической активности
  • логистических сетей
  • климатических наблюдений

Ограничения модели geoshape + point

Несмотря на универсальность, существуют ограничения:

  • слабая поддержка 3D-геометрии
  • ограниченная кастомизация проекций в Vega-Lite
  • производительность при десятках тысяч точек
  • сложность точного позиционирования плотных кластеров

Для высоконагруженных сценариев часто используется предварительная агрегация или перенос части логики в Vega.

Взаимодействие слоёв и визуальная иерархия

Важным аспектом является не только геометрия, но и визуальная читаемость:

  • светлый geoshape снижает конкуренцию с точками
  • контрастные point усиливают аналитическую роль
  • тонкие границы стран предотвращают визуальную перегрузку

Комбинация этих факторов формирует читаемую карту, где точечный слой воспринимается как основной носитель информации, а геошейп — как пространственный контекст.