TopoJSON представляет собой расширение GeoJSON, оптимизированное для
хранения географических данных за счёт устранения дублирования
геометрии. В контексте визуализации через Vega и Vega-Lite работа с
TopoJSON опирается на два ключевых механизма извлечения геометрий:
feature и mesh. Понимание различий между ними
критично для построения производительных и корректных картографических
визуализаций.
TopoJSON хранит геометрию не как независимые полигоны, а как набор дуг (arcs) — общих сегментов линий, которые переиспользуются между объектами.
Ключевой эффект:
Это делает TopoJSON особенно эффективным для:
В Vega и Vega-Lite TopoJSON не используется напрямую как набор
координат. Вместо этого применяется трансформация geoshape
или geojson через специальные поля:
feature — извлекает отдельные географические
объекты;mesh — извлекает объединённую сетку границ.Оба подхода используют TopoJSON как источник, но формируют разные типы геометрии для рендера.
feature:
извлечение объектовfeature преобразует TopoJSON-объект в полноценные
GeoJSON-объекты (FeatureCollection), где каждый элемент представляет
отдельную сущность: страну, регион, область.
При использовании:
properties);Используется, когда требуется:
{
"data": {
"url": "world.topojson",
"format": {
"type": "topojson",
"feature": "countries"
}
},
"mark": "geoshape",
"encoding": {
"color": {"field": "properties.name", "type": "nominal"}
}
}
mesh: объединённая геометрическая сеткаmesh извлекает только линии границ из TopoJSON,
объединяя их в единую структуру без разбиения на отдельные полигоны.
MultiLineString.mesh применяется для:
{
"data": {
"url": "world.topojson",
"format": {
"type": "topojson",
"mesh": "countries"
}
},
"mark": {
"type": "geoshape",
"filled": false,
"stroke": "black"
}
}
feature и
meshfeature → набор независимых полигонов;mesh → единая топологическая сеть линий.feature увеличивает объём данных за счёт
развёртки;mesh минимизирует дублирование.feature тяжелее при большом количестве объектов;mesh быстрее для контурных слоёв.feature → заливка регионов, тематические карты;mesh → границы, обводки, слои поверх заливки.feature и meshНаиболее распространённая практика — одновременное использование обоих подходов:
feature);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 сохраняет топологию, что влияет на оба метода:
featuremeshfeaturemeshИспользование feature только там, где требуется
семантика, и mesh там, где важна геометрия.
Сокращение количества объектов в TopoJSON до уровня, достаточного для визуализации.
Применение алгоритмов simplification перед генерацией TopoJSON
снижает нагрузку на feature без потери качества
отображения.
feature и mesh задаются в
format;transform: geojson);Оба метода (feature и mesh) не зависят от
проекции напрямую, но итоговое отображение:
mesh.feature для чисто контурных карт приводит
к избыточной нагрузке;mesh для тематической заливки делает
невозможной работу с данными.feature без
mesh создаёт визуальные разрывы;mesh приводит к «грязным» границам.feature ломает
согласованность границ.TopoJSON выступает промежуточным форматом между:
Разделение на feature и mesh формирует два
уровня абстракции: