В системе выражений MapLibre GL JS логические операторы являются фундаментом для построения фильтров слоёв, условного форматирования стилей и динамического управления отображением геоданных. Выражения в MapLibre представляют собой JSON-подобные массивы, где первый элемент — оператор, а последующие элементы — аргументы.
Логические операторы позволяют комбинировать условия, проверять принадлежность, сравнивать значения и управлять сложной логикой отображения объектов на карте.
Любое логическое выражение в MapLibre GL JS имеет форму:
["operator", arg1, arg2, ...]
или для вложенных конструкций:
["operator", condition1, condition2, ...]
Результатом всегда является булево значение (true или
false), которое влияет на отображение слоя или свойства
стиля.
==Проверяет полное совпадение значений.
["==", ["get", "type"], "park"]
Применение: отображать только объекты типа “park”.
!=Возвращает true, если значения не совпадают.
["!=", ["get", "status"], "inactive"]
Используется для исключения объектов с определённым статусом.
>[">", ["get", "population"], 100000]
>=[">=", ["get", "rank"], 10]
<["<", ["get", "elevation"], 500]
<=["<=", ["get", "speed_limit"], 60]
Эти операторы особенно важны при фильтрации числовых атрибутов, например высоты зданий, плотности населения или скоростных ограничений.
allОператор all возвращает true, если все
вложенные условия истинны.
[
"all",
[">=", ["get", "population"], 50000],
["==", ["get", "type"], "city"]
]
Используется для строгой фильтрации объектов, удовлетворяющих нескольким критериям одновременно.
anyОператор any возвращает true, если хотя бы
одно условие истинно.
[
"any",
["==", ["get", "type"], "lake"],
["==", ["get", "type"], "river"]
]
Применяется для объединения нескольких категорий объектов в одну визуальную группу.
!Инвертирует результат выражения.
["!", ["==", ["get", "protected"], true]]
Эквивалент: “все объекты, которые не находятся под защитой”.
has и !hashasПроверяет наличие свойства у объекта.
["has", "name"]
Используется для исключения объектов без заданных атрибутов.
!hasИнверсия проверки наличия.
["!has", "name"]
Применяется для поиска «анонимных» или неполных объектов данных.
in и !ininПроверяет, входит ли значение в список.
["in", ["get", "type"], "park", "forest", "reserve"]
Позволяет группировать объекты по категориям без множества сравнений
==.
!inИсключает значения из списка.
["!in", ["get", "type"], "road", "building"]
Используется для фильтрации «всего, кроме…».
Логические операторы могут быть вложенными, создавая сложные выражения.
[
"all",
[">", ["get", "area"], 1000],
[
"any",
["==", ["get", "type"], "park"],
["==", ["get", "type"], "forest"]
],
["!=", ["get", "access"], "private"]
]
Такая конструкция означает:
В выражениях MapLibre GL JS отсутствует традиционный приоритет операторов, как в языках программирования. Вместо этого порядок вычисления определяется структурой вложенности массива.
Пример:
[
"any",
["all", condition1, condition2],
condition3
]
Сначала вычисляется all, затем результат участвует в
any.
Логика фильтрации слоёв использует те же операторы, что и выражения стилей.
map.addLayer({
id: "cities",
type: "circle",
source: "places",
filter: [
"all",
[">", ["get", "population"], 100000],
["==", ["get", "category"], "city"]
]
});
Такой фильтр гарантирует отображение только крупных городов.
Логика часто используется для динамического изменения визуальных свойств.
"circle-color": [
"case",
["==", ["get", "type"], "park"],
"#2ecc71",
["==", ["get", "type"], "water"],
"#3498db",
"#95a5a6"
]
Хотя здесь используется case, его условия также строятся
на логических операторах.
При работе с реальными геоданными часто встречаются неполные или неоднородные свойства. Логические операторы позволяют защищать выражения от ошибок:
[
"all",
["has", "height"],
[">", ["get", "height"], 50]
]
Без проверки has попытка сравнения могла бы привести к
некорректной логике.
В выражениях MapLibre GL JS булевы значения строго типизированы:
true и false интерпретируются как
логические значенияhas может привести к
null-значениям и неожиданным результатамЛогические операторы часто комбинируются с математическими:
[
"all",
[">", ["*", ["get", "width"], ["get", "height"]], 1000],
["<", ["get", "height"], 300]
]
Здесь логика зависит от результата арифметического вычисления.
Типичная структура сложного логического выражения:
all, any)has)==, >,
<)in)!, !=)Комбинация этих уровней позволяет строить высокоточные правила отображения объектов, не прибегая к внешней логике приложения.