mapbox-gl:圖層過濾顯示
在mapbox-gl中加載圖層時,要控制顯示和隱藏其中的某些元素,需要使用mapbox-gl的圖層過濾接口。
每種類型圖層的layout中有visibility屬性,但是這個在api文檔中,只支持基本函數,達不到控制圖層中特定元素顯示和隱藏的功能,只能控制當前圖層全部元素的顯示和隱藏。
map.setLayoutProperty('圖層id', 'visibility','枚舉屬性');

mapbox-gl圖層過濾有單獨的api說明setFilter:
https://docs.mapbox.com/mapbox-gl-js/api/map/#map#setfilter根據圖層中的數據屬性,控制圖層my-layer中名稱為name的元素顯示:
map.setFilter('my-layer', ['==', ['get', 'name'], 'name']);
如要控制多個元素的顯示和隱藏,可以使用多條件控制語句,示例中是顯示名稱不是name1、name2的其他元素:
map.setFilter('my-layer', [?"all",? ["!=", ["get", "name"], "name1"], ["!=", ["get", "name"], "name2"]?]);
mapbox-gl的表達式語句參照官方說明文檔:
https://docs.mapbox.com/mapbox-gl-js/style-spec/expressions/圖層過濾還能控制數據源中的空間類型,在mapbox-gl中加載的一個geosjon數據源中包含多種幾個空間類型,如point、linestring和polygon,使用過濾語句,可以在加載圖層時,設置加載某一類型的數據,寫法如下:
map.addLayer({
? ? ?id: 'measure-points',
? ? ? ?type: 'circle',
? ? ? ? source: 'geojson',
? ? ? ? paint: {
? ? ? ? 'circle-radius': 5,
? ? ? ? 'circle-color': '#000'
? ? ? ? ?},
?? ? ??//加載點數據源
? ? ? ?filter: ['in', '$type', 'Point']
? ? ?});
mapbox-gl提供的圖層方式,還是能夠很方便的控制圖層元素的操作,更多使用的方式參見官方的API文檔。
參考文檔:
https://docs.mapbox.com/mapbox-gl-js/example/measure/
https://docs.mapbox.com/mapbox-gl-js/style-spec/expressions/
https://docs.mapbox.com/mapbox-gl-js/style-spec/layers/