#javascript #expression #mapbox #mapbox-gl-js #mapbox-gl
#javascript #выражение #mapbox #mapbox-gl-js #mapbox-gl
Вопрос:
Я хотел бы установить icon-image
на основе значения данных (https://docs.mapbox.com/mapbox-gl-js/style-spec/#expressions).
Также смотрите https://github.com/mapbox/mapbox-gl-js/issues/6935 в котором есть несколько примеров того, как это сделать.
Я попробовал несколько способов…
Использование match
'icon-image': [
'match',
['get', 'tap_ports'],
2,
'{tubes}-circle-15',
4,
'{tubes}-square-15',
8,
'{tubes}-octagon-15',
'{tubes}-circle-15' // default
]
Использование case
'icon-image': [
'case',
['==', ['get', 'tap_ports'], 2],
'{tubes}-circle-15',
['==', ['get', 'tap_ports'], 4],
'{tubes}-square-15',
['==', ['get', 'tap_ports'], 4],
'{tubes}-octagon-15',
'{tubes}-circle-15' // default
]
Использование property
и stops
'icon-image': {
property: 'tap_ports',
type: 'categorical',
stops: [
[2, '{tubes}-circle-15'],
[4, '{tubes}-square-15'],
[8, '{tubes}-octagon-15']
]
}
Все это не создает никаких значков.
Кроме того, если я попытаюсь зарегистрировать отображаемые объекты с этого слоя с помощью queryRenderedFeatures
, я увижу только пустые массивы, поэтому объекты не отображаются из-за моих попыток.
Если я просто установлю
'icon-image': '{tubes}-circle-15'
все отображается нормально, но, конечно, только в виде кругов.
Комментарии:
1. Вы пробовали подобное: github.com/mapbox/mapbox-gl-js/blob /…
Ответ №1:
Спасибо за предложение @ChaseChoi.
Когда я впервые попробовал steps
, это тоже не сработало, но затем я добавил инструкцию debug для моего слоя, которая вызывала проблемы.
map.on('zoom', () => {
console.log(map.queryRenderedFeatures({ layers: ['tubes'] }))
})
Здесь я заметил, что layout.image-icon
свойство было чем-то вроде {tubes}-circle-15
, а не blue-circle-15
. {tubes}
должен был быть цвет.
Итак, придерживаясь пошагового подхода, я использовал concat
выражение, и оно сработало!
'icon-image': [
'step',
['get', 'tap_ports'],
['concat', ['get', 'tubes'], '-circle-15'], // default
2,
['concat', ['get', 'tubes'], '-circle-15'],
4,
['concat', ['get', 'tubes'], '-square-15'],
8,
['concat', ['get', 'tubes'], '-octagon-15']
]
Я вернулся назад и попробовал другие подходы, используя concat
этот раз, и все они работают ожидаемо для подхода « property
и stops
«.