Выражения для geometry

Стиль-выражения (Style Expressions) представляют собой декларативный язык описания логики рендеринга слоёв, где геометрия объекта становится первичным источником данных для вычислений. В рамках MapLibre GL JS выражения позволяют работать не только с атрибутами свойств properties, но и с самой структурой геометрии: типом, положением, контекстом отображения и зависимостями от масштаба.

Геометрические выражения встроены в систему style specification и используются в paint/layout свойствах, фильтрах и вычисляемых значениях.


Геометрическая модель данных векторных объектов

Каждый объект в источниках данных MapLibre GL JS описывается в формате GeoJSON и включает:

  • Point — точечная геометрия
  • LineString — линейная геометрия
  • Polygon — полигональная геометрия
  • MultiPoint / MultiLineString / MultiPolygon — мультигеометрии

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


Получение типа геометрии: geometry-type

Ключевое выражение для работы с геометрией — geometry-type. Оно возвращает строку, описывающую тип текущего объекта.

Пример логики:

  • Point → “Point”
  • LineString → “LineString”
  • Polygon → “Polygon”

Использование позволяет строить условные стили:

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

Пример выражения:

[
  "match",
  ["geometry-type"],
  "Point", "circle",
  "LineString", "line",
  "Polygon", "fill",
  "unknown"
]

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


Фильтрация по геометрии в слоях

Фильтры в style specification позволяют ограничивать отображение объектов по их геометрическим характеристикам.

Типичная конструкция:

filter: ["==", ["geometry-type"], "LineString"]

Или комбинированная логика:

filter: [
  "any",
  ["==", ["geometry-type"], "Polygon"],
  ["==", ["geometry-type"], "MultiPolygon"]
]

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


Геометрия и масштаб: масштабно-зависимые вычисления

Геометрические выражения часто комбинируются с zoom, поскольку визуальная интерпретация геометрии зависит от уровня приближения.

Типовой паттерн:

[
  "interpolate",
  ["linear"],
  ["zoom"],
  5, 1,
  10, 2,
  15, 4
]

Хотя само выражение не оперирует геометрией напрямую, оно влияет на:

  • толщину линий (LineString)
  • радиус точек (Point)
  • плотность визуальных элементов вдоль линий

Геометрия становится контекстом, в котором масштаб определяет визуальную интерпретацию структуры объекта.


Геометрия и условная визуализация

Сложные стили часто строятся на комбинации:

  • geometry-type
  • case / match
  • zoom
  • свойства feature

Пример дифференциации объектов:

[
  "case",
  ["==", ["geometry-type"], "Point"],
  "#ff0000",
  ["==", ["geometry-type"], "LineString"],
  "#0000ff",
  "#00ff00"
]

Такой подход позволяет:

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

Геометрия в контексте layout-параметров

Layout свойства в MapLibre GL JS используют геометрию для определения поведения объектов на карте.

Примеры:

Символы и точки

Для Point-геометрий используются параметры:

  • icon-image
  • text-field
  • text-anchor

Они интерпретируются относительно координаты геометрии.


Линии

LineString влияет на:

  • направление текста вдоль линии
  • повторение символов
  • визуальное выравнивание

Геометрия определяет траекторию отрисовки, а не только набор координат.


Полигоны

Polygon-геометрии задают:

  • области заливки
  • внутренние и внешние контуры
  • поведение границ

Геометрическая структура определяет порядок обхода вершин и корректность заливки.


Взаимодействие геометрии с feature-state

Feature-state позволяет хранить динамическое состояние объекта, которое может зависеть от геометрии.

Примеры состояний:

  • hover
  • selected
  • active

Геометрия определяет:

  • какую область подсвечивать (Polygon)
  • какую линию изменять (LineString)
  • какой маркер выделять (Point)

Пример:

[
  "case",
  ["boolean", ["feature-state", "hover"], false],
  1.5,
  1
]

Хотя выражение работает со state, его применение всегда привязано к геометрической сущности объекта.


Геометрические ограничения через expressions

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

Примеры логических условий:

  • различие между MultiPolygon и Polygon
  • обработка пустых геометрий (через проверки свойств)
  • адаптация стиля к типу линии

Комбинация:

[
  "all",
  ["==", ["geometry-type"], "Polygon"],
  ["has", "elevation"]
]

Производительность геометрических выражений

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

Ключевые ограничения:

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

Рекомендации архитектуры стиля:

  • минимизировать вложенные case и match
  • избегать повторного вычисления geometry-type
  • использовать фильтры вместо сложных условных выражений, где возможно

Геометрия и data-driven styling

Одно из ключевых применений выражений — связывание геометрии с визуальными параметрами через данные.

Пример масштабирования радиуса точки:

[
  "interpolate",
  ["linear"],
  ["zoom"],
  0, 2,
  10, 6,
  15, 12
]

Хотя выражение не обращается напрямую к координатам, оно изменяет визуальное восприятие геометрии Point-объектов.


Ограничения геометрических выражений

Геометрические выражения в MapLibre GL JS имеют ограничения архитектурного уровня:

  • отсутствует прямой доступ к координатным массивам
  • нет встроенных операций длины/площади
  • нельзя выполнять геопространственные запросы внутри выражений

Вместо этого используется комбинация:

  • внешних библиотек (например, Turf.js)
  • предварительной обработки данных
  • feature properties

Роль геометрии в стиле карты

Геометрия в системе выражений становится фундаментом, вокруг которого строится логика визуализации:

  • определяет тип рендеринга
  • влияет на фильтрацию и группировку
  • задаёт контекст интерпретации данных
  • служит основой для условных выражений

В результате стиль карты перестаёт быть статическим описанием и превращается в вычисляемую модель отображения пространственных данных, где геометрия выступает центральным элементом всей логики рендеринга.