【问题标题】:Mapbox GL JS: updating polygon fill color on layer built in StudioMapbox GL JS:在 Studio 中更新图层上的多边形填充颜色
【发布时间】:2021-10-11 16:22:02
【问题描述】:

我使用 Mapbox Studio 进行映射/样式设置,使用 GL JS 添加用户交互性。我希望能够更改 mouseenter 上的单个多边形颜色,该颜色是一层中总共 44 个多边形的一部分。

我已经检查了 Mapbox 文档/示例/教程,并且仅在直接在 JS 中使用 map.addLayer() 时才找到使用此类功能的答案。我设法改变了不透明度,但仅限于整个图层。

我曾尝试从另一个 SO post 使用它,但它会将整个图层中的所有多边形填充为黑色,即备用颜色。

  'Icons', 
  'icon-opacity', 
  ['match', ['get', 'id'], 'example-id', 0.5 , 1]

我的代码:

map.on('mouseenter', 'pta-cos-polygons', (e) => {
    const feature = e.features[0];
    map.setFeatureState({
        source: 'composite',
        sourceLayer: 'pta-cos-polygons',
        id: feature.id,
    },
    {hover: true}
    );
            
map.setPaintProperty(
    'pta-cos-polygons',
    'fill-color',
    ['match', ['get', 'id'], 'feature.id', 'red', 'black']
    );
});

我不知道这是否只是了解正确语法的问题,但似乎如果我有特定多边形的 id(我有)我应该能够做到这一点。

【问题讨论】:

    标签: javascript mapbox mouseover mapbox-gl-js mapbox-studio


    【解决方案1】:

    您正在为功能设置hover 状态,因此您应该使用hover 来确定颜色,而不是功能 ID,如下所示:

    map.setPaintProperty(
        'pta-cos-polygons',
        'fill-color',
        ['case', ['to-boolean', ['feature-state','hover']], 'red', 'black']
        );
    });
    

    请注意,当鼠标移出时,您还需要一些代码来删除 hover 功能状态,否则您的所有功能都会逐渐变红。

    【讨论】:

    • 哦,我明白了——感谢您的澄清。由于“case”语句需要 4 个参数,如何保留已在 mapbox 样式文件中定义颜色的其他多边形的颜色? “红色”和“黑色”仅用于测试目的。
    • 下次我建议把你所有的目标都放在前面。如果需要,您可以提出其他问题。
    猜你喜欢
    • 1970-01-01
    • 2020-01-03
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    相关资源
    最近更新 更多