Mapbox - 将“点击”事件添加到线层

yem*_*yen 3 mapbox mapbox-gl-js

太长了;如何将弹出窗口添加到地图框“线”类型图层?

我有一个加载地图盒地图并向其添加线条层的函数。

我的目标是在单击该行时添加一个弹出窗口。我按照示例添加了一个点击事件。但这给了我一个错误。关于我做错了什么的任何指示吗?

   function renderLineLayer(layerName,data) {
        map.on('load', function() {
            map.addLayer({
                "id": layerName,
                "type": "line",
                "source": {
                    "type": "geojson",
                    "data": data

                },
                "layout": {
                    "line-join": "round",
                    "line-cap": "round",
                    "visibility":"visible"
                },
                "paint": {
                    "line-color": "blue",
                    "line-width": 8
                }
            });

            console.log(map.getLayer(layerName));        

            map.on('click', layerName, function (e) {
                console.log('click');                
                new mapboxgl.Popup()
                  .setLngLat(e.lngLat)
                  .setHTML(e.features[0].properties.name)
                  .addTo(map);

            });
        });

    }
Run Code Online (Sandbox Code Playgroud)

我得到的错误是。

TypeError: listeners[i].call is not a function[Learn More]  mapbox-gl-dev.js:29779:13
Run Code Online (Sandbox Code Playgroud)

Ste*_*ett 5

这有点猜测,但on('click')事件 API 最近发生了变化。以前它没有层参数(IIRC)。如果您使用旧版本的 Mapbox-GL-JS 库,它会尝试调用您的第二个参数(图层名称),就好像它是一个函数一样,并且会给出该错误消息。

解决方案:更新到最新的Mapbox-GL-JS库版本(0.36)。

(我认为在线要素上响应鼠标单击的过程与点或多边形的响应过程没有任何不同。)

  • 你是对的!。我当时使用的是 0.34,并试图遵循该网站上的示例。现在可以工作了。 (2认同)