使嵌套/复杂的mapbox gl js表达式起作用

时间:2019-04-08 09:39:30

标签: mapbox-gl-js

我无法使用Mapbox样式表达式。 我有一个非常简单的“二进制”绘制模式:

'paint': {
    'circle-radius': 16,
    'circle-color': [
        'case',
        ['boolean', ['feature-state', 'selected'], false],
        '#adff2f', // colors.green
        '#999999', // colors.none
    ],
},

现在我需要使其更复杂,等效于此伪代码:

if(featureState.selected){
  switch(featureState.status){
    case 'high': colors.high
    case 'low': colors.low
    default: colors.normal
  }
} else {
  colors.none
}

当我开始嵌套这些条件时,绘画将停止工作,因此我的语法可能是错误的。像这样:

'paint': {
    'circle-radius': 16,
    'circle-color': [
        'case',
        ['boolean', ['feature-state', 'selected'], false],
        ['match',
          ['get', 'status'],
          'high', '#ffa500', // colors.high
          'low', '#ba0000',  // colors.low
          '#1d8aaf',         // colors.normal
        ],
        '#999999', // colors.none
    ],
},

==== 编辑 ====

与此同时,我的数据已更改,这是更新的伪代码:

if(featureState.selected){
  switch(featureState.status){
    less than 2: colors.normal
    else: colors.high
  }
} else {
  colors.none
}

以及我尝试使用的真实代码(现在改为使用step

'circle-color': [
  'case',
  ['boolean', ['feature-state', 'selected'], false],
  ['step',
    ['get', 'load'],
    '#1d8aaf', 2 // colors.normal
    '#ffa500',    // colors.high
  ],
  '#999999', // colors.none
],

这可行。

0 个答案:

没有答案