Uso un GeoJSON como mi fuente, donde cada entidad tiene un estado. Quiero dibujar círculos para cada entidad, donde el color del círculo se basa en el estado y si se ha hecho clic en el círculo o no.
La determinación del "estado de clic" se realiza a través setFeatureState() donde una función recibe el estado de "clic" cuando se hace clic.
Primero intenté verificar el estado del clic y hacer coincidir el estado, según la función en la que se hizo clic o no:
"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 ]El círculo "sin hacer clic" tiene el color correcto. Sin embargo, cuando hago clic en el círculo, el color del círculo cambia a negro y no a mi color de "coincidencia".
¡Cualquier consejo es muy apreciado!
Creo que la expresión de su case es incorrecta aquí:
['boolean', ['feature-state', 'click'], false, ],Ha utilizado la expresión de tipos booleanos , que es una expresión de tipos (afirma que el valor de entrada es un booleano).
En su caso, desea utilizar una expresión de decisión .
Con el operador== , puede devolver true si los valores de entrada son iguales, false de lo contrario.
Su expresión de case se convertiría en:
"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 ]