用嵌套表达式确定圆圈颜色

determining circle-color with nested expressions

我使用 GeoJSON 作为我的来源,其中每个实体都有一个状态。 我想为每个实体绘制圆圈,圆圈颜色基于状态,以及圆圈是否被点击。

确定“点击状态”是通过 setFeatureState() 完成的,其中一个特征在被点击时接收到“点击”状态。

我尝试先检查点击状态并根据点击与否匹配状态:

    "circle-color": [
        'case',
        ['boolean',
            ['feature-state', 'click'],
            false,
        ],
        ['match',          //Feature clicked = true
            ['get', 'state'],
            'SOME_FEATURE_STATE_STRING',
            '#57E757',  // possible match
            'SOME_OTHER_FEATURE_STATE_STRING',
            '#123456',  // possible match

            '#123456' //fallback
        ],
        '#001ebe'           //Feature clicked = false
    ]

“未点击”的圆圈颜色正确。但是,当我单击圆圈时,圆圈颜色变为黑色,而不是我的“匹配”颜色。

非常感谢任何建议!

我认为你的 case 表达不正确 :

['boolean', 
  ['feature-state', 'click'],
  false,
],

您使用了 boolean types expression, which is a type 表达式(它断言输入值为布尔值)。

在您的情况下,您想使用 decision 表达式。

使用 == 运算符,如果输入值相等,则可以 return true,否则 false

您的 case 表达式将变为:

"circle-color": [
 'case',
 ['==', ['feature-state', 'click'], true],
 ['match',     // Feature clicked = true
   ['get', 'state'],
   'SOME_FEATURE_STATE_STRING',
   '#57E757',  // Possible match
   
   'SOME_OTHER_FEATURE_STATE_STRING',
   '#123456',  // Possible match
   
   '#123456'   // Fallback
 ],
 '#001ebe'     // Feature clicked = false
]