Skip to content

Instantly share code, notes, and snippets.

@Akiyamka
Last active November 20, 2019 08:20
Show Gist options
  • Save Akiyamka/19ac7bf088c36b0cfbe40df377ea8fe5 to your computer and use it in GitHub Desktop.
Save Akiyamka/19ac7bf088c36b0cfbe40df377ea8fe5 to your computer and use it in GitHub Desktop.
Mapbox expressions translated to russian.

Mapbox expressions:

  • Математические выражения
  • Логические выражения для булевых значений и переключателей
  • Строчные выражения
  • Выражения с данными - использование свойств фич представленных в исходных (source) данных.
  • Выражения камеры - предоставляют доступ к параметрам отвечающим за текущий вид карты

Все выражения представлены как JSON массивы. Первый элемент каждого выражения это строчное название оператора выражения. Второй и последующие - аргументы выражения. В качестве аргументов могут выступать string, number, boolean, null или другие выражения

Например:

[expression_name, argument_0, argument_1]

В JavaScript это выглядело бы так

expression_name(argument_0, argument_2)

Выражения с данными

Выражениями с данными называются все выражения которые получают доступ к данным фичи (feature). Т.е. это все выражения котороые используют операторы данных - get, has, id, geometry-type, properties или feature-state. Они позволяют использваоть свойста фич для определения их внешнего вида. Часто их используют для различения фич расположеных в одном слое в задачах про визуализацию данных.

Пример: плавное изменение цвета в зависимости от температуры:

{
    "circle-color": [
        "rgb",
        // red is higher when feature.properties.temperature is higher
        ["get", "temperature"],
        // green is always zero
        0,
        // blue is higher when feature.properties.temperature is lower
        ["-", 100, ["get", "temperature"]]
    ]
}

JavaScript эквивалент:

circle-color: rgb(get('temperature'), 0, -(100, get('temperature')))

Так для температуры 20 грудусов цвет круга будет 20, 0, 80#140050 в rgb формате,

Выражения камеры

Выражения камеры это любые выражения которые используют оператор zoom. Каждое выражение позволяет управлять изменением отображения слоя в зависимости от текущего зума карты. Используются для управления внешним видом и управлением плотностью данных в зависимости от текущего зума карты.

{
    "circle-radius": [
        "interpolate", ["linear"], ["zoom"],
        // zoom is 5 (or less) -> circle radius will be 1px
        5, 1,
        // zoom is 10 (or greater) -> circle radius will be 5px
        10, 5
    ]
}

в JS это выглядело бы так

{
  circle-radius: interpolate(linear(), zoom(), 5, 1, 10, 5)
}

interpolate принимает первым аргументом функцию интерполяции, в данном случае это linear (линейная). вторым аргументом относительно какого параметра мы меняем значение радиуса (zoom), остальные аргументы описывают граничные значения:

зум 5 и ниже -> радиус 1 px
зум 10 и выше -> радиус 5 px

Таким образом а зуме 7,5 радус быдут линейно интерполирован до радиуса в 2px.

Выражения камеры могут быть использованы где угодно, однако при использовании таких значений как значений layout или paint они могут быть только одной из следующих форм:

[ "interpolate", interpolation, ["zoom"], ... ]

Или:

[ "step", ["zoom"], ... ]

Или:

[
    "let",
    // ... variable bindings... ,
    [ "interpolate", interpolation, ["zoom"], ... ]
]

Или:

[
    "let",
    // ... variable bindings... ,
    [ "step", ["zoom"], ... ]
]

Т.е. для layout и paint свойство ["zoom"] может быть только как аругмент для interpolate или step выражения, или это может быть любое выражение обьявленое через let выражение.

Еще одно важное отличие между layout и paint свойствами в времени выполнения выражения. paint свойство выражения камеры пересчитывается каждый раз когда изменяется зум, даже незанчительно. Например paint свойство будет пересчитано после движения камеры от зума 4.1 к зуму 4.6. В тоже время layout свойство будет пересчитано только после изменения зума на следующее целочисленое значение зума. Т.е. зума должен поменяться как минимум с 4.1 до 5 или с 4.1 до 3.9 чтобы значение было пересчитано.

Композиция

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment