2017-04-23 493 views
1

TLDR;如何为地图框“线”类型图层添加弹出窗口?Mapbox - 将“点击”事件添加到线路层

我有一个函数加载一个mapbox地图并添加一层线。

我的目标是在点击该行上添加一个弹出窗口。 我跟着例子,并添加一个点击事件。但是这给了我一个错误。任何指针我做错了什么?

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); 

      }); 
     }); 

    } 

我得到的错误是。

TypeError: listeners[i].call is not a function[Learn More] mapbox-gl-dev.js:29779:13 

回答

2

这是一个猜测,但on('click')事件API最近更改。以前它没有图层参数(IIRC)。如果你使用的是旧版本的Mapbox-GL-JS库,它会试图调用你的第二个参数(图层名称),就像它是一个函数一样,它会给出这个错误信息。

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

(我不认为响应鼠标点击线条特征的过程与点或多边形不同。)

+2

你说得对!我在0.34,并试图从该网站的例子。现在工作。 –

相关问题