2017-04-23 45 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,並試圖從該網站的例子。現在工作。 –

相關問題