2017-09-07 86 views
3

我的JavaScript的學習,並與Mapbox GL JS一個問題:我有一個風格Mapbox工作室,那裏是one my layer — "locations"。我已經將它添加爲一個tileset。這一層有兩個GeoJSON點,但我無法在GL JS中獲得它們。 我發現我應該使用方法querySourceFeatures(sourceID, [parameters]),但我在正確填寫參數時遇到了問題。我寫道:如何從Mapbox GL JS中的樣式圖層獲取要素?

var allFeatures = map.querySourceFeatures('_id-of-my-tyleset_', { 
    'sourceLayer': 'locations' 
}); 

..它不起作用。

更有趣的是在後面的代碼我用這個層方法queryRenderedFeatures,和這沒關係:

map.on('click', function(e) { 
     var features = map.queryRenderedFeatures(e.point, { 
     layers: ['locations'] 
     }); 

     if (!features.length) { 
     return; 
     } 
     var feature = features[0]; 
     flyToPoint(feature); 
     var popup = new mapboxgl.Popup({ 
      offset: [0, -15] 
     }) 
     .setLngLat(feature.geometry.coordinates) 
     .setHTML('<h3>' + feature.properties.name + '</h3>' + '<p>' + 
      feature.properties.description + '</p>') 
     .addTo(map); 
    }); 

我已經閱讀了很多關於在地圖上添加圖層,知道答案很簡單,但我無法實現的解決方案,所以幫助,請:)

Here is在GitHub上的項目。

+0

順便說一句,實際查看您的網頁的鏈接:https://rawgit.com/nikita-nikiforov/bilhorod-map/master/index.html –

+0

@SteveBennett謝謝!非常有用的工具。 – nikiforovpizza

回答

3

你的問題是,你的地圖,就像在默認情況下Mapbox Studio中創建的所有地圖,使用自動合成。你實際上並沒有一個叫做morganvolter.cj77n1jkq1ale33jw0g9haxc0-2haga的源,你有一個源碼叫composite,它有許多子層。

你可以找到層這樣的名單:

map.getSource('composite').vectorLayerIds

從而揭示你有一個名爲akkerman向量層。 (「locations」是你風格層,而不是你層的名稱)。因此,您的查詢應該是:

map.querySourceFeatures('composite', { 
    'sourceLayer': 'akkerman' 
}); 

返回4個特徵。

+0

謝謝你的回覆! 不知道「複合」,但你現在提出我已經改變了查詢在GitHub上,並allFeatures變量是空的,無論如何,你可以在控制檯中看到這一點。 有什麼問題? – nikiforovpizza

+0

我修復了一個錯誤,現在我得到了8個功能,雖然在圖層中只有兩個。奇怪。但它仍然有效。非常感謝你! – nikiforovpizza

+1

修復了很多功能的問題。尼斯) – nikiforovpizza