Mapbox GL JS 中的一行弹出窗口,需要填充或近似鼠标悬停

man*_*and 5 javascript mapbox mapbox-gl-js

我想在 Mapbox GL JS 中为一行制作一个弹出窗口。我有一个包含很多直线的图层,定义如下:

map.addLayer({id: 'lineLayer',
          type: 'line',
          source: 'lineSource',
          layout: {'line-join': 'round', 'line-cap': 'round'},
          paint: {'line-color': '#00c853','line-width': 5, 'line-opacity': 1 }});
Run Code Online (Sandbox Code Playgroud)

然后我将弹出窗口添加到一行,如下所示(伪代码):

map.on('mousemove', 'lineLayer', (e) => {
    map.getCanvas().style.cursor = 'pointer';
    popupCoordinatesXY = e.point; });
Run Code Online (Sandbox Code Playgroud)

问题是:出于美观原因,我不希望线条太宽,但让鼠标精确地位于线条上太困难了。即使光标距离某一行大约 10 个像素,如何触发该行的 mousemove 事件?

我已经考虑过制作一个额外的、具有更宽线条的隐形层,但我可以想象有一个更优雅的解决方案。

And*_*vey 5

我会按照您的建议进行操作,添加一个新图层,但使用opacity: 0, 更大line-width并注册该图层上的事件(opacity: 0功能包含在结果中,但如果您visibility: none在图层上设置则不会)。

我唯一能想到的另一件事是querySourceFeatures使用草皮来做,pointToLineDistance但这比仅仅添加不可见的鼠标目标层更慢、更混乱。