Работа с TopoJSON: поля feature и mesh

TopoJSON представляет собой расширение GeoJSON, оптимизированное для хранения географических данных за счёт устранения дублирования геометрии. В контексте визуализации через Vega и Vega-Lite работа с TopoJSON опирается на два ключевых механизма извлечения геометрий: feature и mesh. Понимание различий между ними критично для построения производительных и корректных картографических визуализаций.


TopoJSON хранит геометрию не как независимые полигоны, а как набор дуг (arcs) — общих сегментов линий, которые переиспользуются между объектами.

Ключевой эффект:

  • в GeoJSON границы соседних стран дублируются;
  • в TopoJSON одна и та же граница хранится один раз;
  • визуализация восстанавливает геометрию на этапе рендеринга.

Это делает TopoJSON особенно эффективным для:

  • карт стран и регионов,
  • административных границ,
  • сложных полигональных сеток.

Преобразование TopoJSON в Vega

В Vega и Vega-Lite TopoJSON не используется напрямую как набор координат. Вместо этого применяется трансформация geoshape или geojson через специальные поля:

  • feature — извлекает отдельные географические объекты;
  • mesh — извлекает объединённую сетку границ.

Оба подхода используют TopoJSON как источник, но формируют разные типы геометрии для рендера.


Поле feature: извлечение объектов

Семантика

feature преобразует TopoJSON-объект в полноценные GeoJSON-объекты (FeatureCollection), где каждый элемент представляет отдельную сущность: страну, регион, область.

Поведение

При использовании:

  • каждый объект становится независимым полигоном;
  • сохраняются свойства (properties);
  • границы дублируются там, где объекты соприкасаются.

Типичный сценарий применения

Используется, когда требуется:

  • заливка территорий;
  • тематическое картирование (choropleth);
  • интерактивное выделение отдельных объектов.

Пример Vega-Lite

{
  "data": {
    "url": "world.topojson",
    "format": {
      "type": "topojson",
      "feature": "countries"
    }
  },
  "mark": "geoshape",
  "encoding": {
    "color": {"field": "properties.name", "type": "nominal"}
  }
}

Особенности

  • высокая гибкость стилизации отдельных объектов;
  • увеличение объёма геометрии после развёртки;
  • возможны артефакты на границах из-за дублирования линий.

Поле mesh: объединённая геометрическая сетка

Семантика

mesh извлекает только линии границ из TopoJSON, объединяя их в единую структуру без разбиения на отдельные полигоны.

Поведение

  • создаётся единая линейная сетка;
  • границы не дублируются;
  • отсутствует разделение по объектам;
  • чаще всего используется тип геометрии MultiLineString.

Основное назначение

mesh применяется для:

  • отрисовки границ между объектами;
  • контурных карт;
  • визуального разделения регионов без заливки;
  • оптимизации рендеринга границ.

Пример Vega-Lite

{
  "data": {
    "url": "world.topojson",
    "format": {
      "type": "topojson",
      "mesh": "countries"
    }
  },
  "mark": {
    "type": "geoshape",
    "filled": false,
    "stroke": "black"
  }
}

Особенности

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

Сравнение feature и mesh

Геометрическая модель

  • feature → набор независимых полигонов;
  • mesh → единая топологическая сеть линий.

Использование памяти

  • feature увеличивает объём данных за счёт развёртки;
  • mesh минимизирует дублирование.

Производительность рендеринга

  • feature тяжелее при большом количестве объектов;
  • mesh быстрее для контурных слоёв.

Тип визуализации

  • feature → заливка регионов, тематические карты;
  • mesh → границы, обводки, слои поверх заливки.

Комбинированное использование feature и mesh

Наиболее распространённая практика — одновременное использование обоих подходов:

  1. слой заливки (feature);
  2. слой границ (mesh).

Пример многослойной карты

{
  "layer": [
    {
      "data": {
        "url": "world.topojson",
        "format": {
          "type": "topojson",
          "feature": "countries"
        }
      },
      "mark": "geoshape",
      "encoding": {
        "color": {"field": "properties.continent", "type": "nominal"}
      }
    },
    {
      "data": {
        "url": "world.topojson",
        "format": {
          "type": "topojson",
          "mesh": "countries"
        }
      },
      "mark": {
        "type": "geoshape",
        "filled": false,
        "stroke": "white"
      }
    }
  ]
}

Такая схема позволяет:

  • визуально отделить регионы;
  • избежать «слипания» границ;
  • сохранить топологическую корректность.

Влияние топологии на визуализацию

TopoJSON сохраняет топологию, что влияет на оба метода:

В feature

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

В mesh

  • топология сохраняется полностью;
  • границы всегда согласованы;
  • отсутствуют наложения и разрывы.

Практические ограничения

Особенности feature

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

Особенности mesh

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

Оптимизационные стратегии

Разделение слоёв

Использование feature только там, где требуется семантика, и mesh там, где важна геометрия.

Предварительная агрегация

Сокращение количества объектов в TopoJSON до уровня, достаточного для визуализации.

Упрощение геометрии

Применение алгоритмов simplification перед генерацией TopoJSON снижает нагрузку на feature без потери качества отображения.


Поведение в Vega vs Vega-Lite

Vega-Lite

  • декларативная модель;
  • feature и mesh задаются в format;
  • автоматическое управление слоями.

Vega

  • более низкоуровневый контроль;
  • явное управление трансформациями (transform: geojson);
  • возможность тонкой настройки пайплайна обработки данных.

Взаимодействие с проекциями

Оба метода (feature и mesh) не зависят от проекции напрямую, но итоговое отображение:

  • проходит через географическую проекцию (Mercator, Albers и др.);
  • преобразует координаты после восстановления геометрии;
  • сохраняет топологическую согласованность при mesh.

Типичные ошибки при использовании

Неправильный выбор типа извлечения

  • использование feature для чисто контурных карт приводит к избыточной нагрузке;
  • использование mesh для тематической заливки делает невозможной работу с данными.

Дублирование слоёв

  • одновременная заливка через feature без mesh создаёт визуальные разрывы;
  • отсутствие mesh приводит к «грязным» границам.

Игнорирование топологии

  • попытка ручной модификации GeoJSON после feature ломает согласованность границ.

Роль TopoJSON в архитектуре Vega

TopoJSON выступает промежуточным форматом между:

  • источником географических данных;
  • визуальной моделью Vega;
  • графическим рендерером (Canvas или SVG).

Разделение на feature и mesh формирует два уровня абстракции:

  • объектный уровень (семантика);
  • топологический уровень (структура границ).