2017-11-13 33 views
0

私は一意のIDを持つ数十層のマップを持っています。チェックボックスをオンまたはオフにすると、すべてのレイヤIDの配列が1つ必要です。すべてのマップレイヤをループしてレイヤIDを取得する方法を理解できません。私はmap.getLayer()を使ってみましたが、層IDを文字列としてではなくオブジェクトとして返します。私はすべてのマップレイヤーをループし、レイヤーID文字列を新しい配列にプッシュしたいと思います。これはどうすればいいですか?Mapbox GL:レイヤーIDを取得

mapboxgl.accessToken = "myaccesstoken"; 

var map = new mapboxgl.Map({ 
container: "map", 
style: "mapbox://styles/mymapboxstyle", 
center: [-71.0664, 42.358], 
minZoom: 14 // 
}); 

map.on("style.load", function() { 

map.addSource("contours", { 
    type: "vector", 
    url: "mapbox://mapbox.mapbox-terrain-v2" 
    }); 

map.addSource("hDistricts-2017", { 
    "type": "vector", 
    "url": "mapbox://mysource" 
    }); 

map.addLayer({ 
    "id": "contours", 
    "type": "line", 
    "source": "contours", 
    "source-layer": "contour", 
    "layout": { 
     "visibility": "none", 
     "line-join": "round", 
     "line-cap": "round" 
     }, 
    "paint": { 
     "line-color": "#877b59", 
     "line-width": 1 
     } 
    }); 

map.addLayer({ 
    "id": "Back Bay Architectural District", 
    "source": "hDistricts-2017", 
    "source-layer": "Boston_Landmarks_Commission_B-7q48wq", 
    "type": "fill", 
    "layout": { 
     "visibility": "none" 
     }, 
    "filter": ["==", "OBJECTID", 13], 
    "paint": { 
     "fill-color": "#192E39", 
     "fill-outline-color": "#000000", 
     "fill-opacity": 0.5 
     } 
    }); 

}); 

var layerIds = []; 

function getIds() { 

    //here I need to iterate through map layers to get id strings. 
    //how do I do this??? 

layerIds.push( ); //then push those ids to new array. 

console.log(layerIds); //["contours", "Back Bay Architectural District"] 

} 

答えて

0

レイヤーを追加すると、レイヤーIDが表示されます。 kielni答えが原因不明の理由で便利ではない場合、

function addLayer(map, options, layerIds) { 
    map.addLayer(options); 
    layerIds.push(options.id); 
} 

addLayer(map, { 
    "id": "Back Bay Architectural District", 
    "source": "hDistricts-2017", 
    "source-layer": "Boston_Landmarks_Commission_B-7q48wq", 
    "type": "fill", 
    "layout": { 
     "visibility": "none" 
     }, 
    "filter": ["==", "OBJECTID", 13], 
    "paint": { 
     "fill-color": "#192E39", 
     "fill-outline-color": "#000000", 
     "fill-opacity": 0.5 
     } 
    }, 
    layerIds); 
0

、文字列IDの配列を得るためにそれをマップオブジェクトレイヤーの配列を取得するためにmap.getStyle().layersを使用する:あなたは、それらを保存することができます。

var layers = map.getStyle().layers; 

var layerIds = layers.map(function (layer) { 
    return layer.id; 
}); 
関連する問題