Javascript Mapbox GL-使用地图样式在悬停时切换高亮显示特定功能

Javascript Mapbox GL-使用地图样式在悬停时切换高亮显示特定功能,javascript,mapbox-gl-js,Javascript,Mapbox Gl Js,我想突出显示悬停时包含在我的地图样式中的图层的特定功能。。大概是这样的: map.on('mousemove', function(e) { var states = map.queryRenderedFeatures(e.point, { layers: ['n_Region6 Municipals'] }); if (states.length > 0) { map.setPaintProperty('n_Region6 M

我想突出显示悬停时包含在我的地图样式中的图层的特定功能。。大概是这样的:

  map.on('mousemove', function(e) {
    var states = map.queryRenderedFeatures(e.point, {
     layers: ['n_Region6 Municipals']
    });
    if (states.length > 0) {      
      map.setPaintProperty('n_Region6 Municipals', 'fill-color',' 
      {"property":"NAME_2","type":"category","stops": + 
      [[states[0].properties.NAME_2 +,"blue"]]}');    
      });
有了setpaintproperty和数据驱动函数,我就没有运气了。。 我试过用这个过滤器

      map.addLayer({
          "id": "state-fills",
          "type": "fill",
          "source": {
            "type": "vector",
            "url": "mapbox://noeltech.c8nzzthb"
          },
          "source-layer":"R6_Pop_byMunicipal-5cqj12",
          "layout": {},
          "paint": {
                        "fill-color": "#627BC1",
                        "fill-opacity": 0
       }
   });
   map.addLayer({
    "id": "state-fills-hover",
    "type": "line",
    "source": {
      "type": "vector",
      "url": "mapbox://noeltech.c8nzzthb"
    },
    "source-layer":"R6_Pop_byMunicipal-5cqj12",
    "layout": {},
    "paint": {
      "line-color": "#627BC1",
      "line-width": 3
    },
    "filter": ["==", "NAME_2", ""]
  });
 //  map.setLayoutProperty('n_Region6 Municipals', 'visibility', 'none');

});
 map.on("mousemove", "state-fills", function(e) {
    map.setFilter("state-fills-hover", ["==", "NAME_2", 
   e.features[0].properties.NAME_2]);
它做了我想做的,但它让我添加了另一层,我不想这样。我想在我的地图样式中使用图层。就像第一个代码一样。 如何在简单代码中实现它?

您需要使用
“类型”:“分类”

语法应该是

map.setPaintProperty('n_Region6 Municipals', 'fill-color',{
  "property":"NAME_2",
  "type":"categorical",
  "stops":[
    [states[0].properties.NAME_2,"blue"],
    ],
  "default": "red"
});

我用这个代码得到了它:

    var highlight =   {
           property: 'NAME_2',
           type: "categorical",
           stops: [[MunicipalName, 'blue']]
         };
   map.setPaintProperty('n_Region6 Municipals', 'fill-color', highlight); 
现在的问题是我没有考虑它会把其余的多边形黑色。有没有简单的方法可以在不添加更多图层的情况下突出显示单个功能?

这可能行得通..还没有尝试,因为我通过传递一个带有填充颜色参数的对象得到了它。将
默认值设置为半透明颜色,即
rgba(0,0,0,0)
但我希望其余部分保持原样..可能数据驱动功能不是在地图样式中突出显示要素的答案。您可以使用数据驱动样式–您必须将其余要素的默认值设置为当前值,但这并不是最有效的方法,因为当您只需要更改一个特征时,它涉及到为层中的每个特征重新计算特征属性缓冲区。我会用两层过滤来代替。谢谢你说的两层过滤的方法。这对Mapbox的人很有帮助,他确认这是目前最好的方法。。