Webgis實踐3:生成圖層列表,複選圖層是否可見
阿新 • • 發佈:2019-02-20
/*上面都是表頭檔案,引入庫啥的。*/
dojo.require("esri.map");
var layer, map, visible = [];
/*宣告layer、map、visible*/
function init() {
map = new esri.Map("map");
layer = new esri.layers.ArcGISDynamicMapServiceLayer("https://localhost:6443/arcgis/rest/services/Test/CHGIScs/MapServer" );
if (layer.loaded) {
buildLayerList(layer);
}
else {
dojo.connect(layer, "onLoad", buildLayerList);
}
}
/*載入圖層,構建圖層列表,一個if-else語句,如果圖層已經載入,那麼構建圖層列表,否則載入圖層,構建圖層列表。呼叫的buildLayerList函式在下面。*/
function buildLayerList(layer) {
var infos = layer.layerInfos, info;
var items = [];
for (var i=0, il=infos.length; i<il; i++) {
info = infos[i];
if (info.defaultVisibility) {
visible.push(info.id);
}
items[i] = "<input type='checkbox' class='list_item' checked='" + (info.defaultVisibility ? "checked" : "") + "' id='" + info.id + "' onclick='updateLayerVisibility();' /><label for='" + info.id + "'>" + info.name + "</label>";
}
dojo.byId("layer_list").innerHTML = items.join();
layer.setVisibleLayers(visible);
map.addLayer(layer);
}
/*定義buildLayerList函式,layerInfos是內建的服務屬性,獲取服務中的圖層以及它們的預設的可見性。
if(info.defaultVisibility)如果物件的可見性是有值的(true或者false),visible.push(info.id)獲取這個值。
infos是一個列表,info是Infos列表中的元素。用列表infos去構建items列表,items列表生成網頁頭部的那幾個複選框,選擇圖層是否可見。
input type='checkbox',引入複選框,checked的值是info.defaultVisibility,如果圖層可見,那麼複選框就是被選中的,如果圖層不可見,那麼複選框就是不被選中的。
複選框的id是圖層的id,點選複選框呼叫updateLayerVisibility函式,
label標籤的id是圖層的id,標籤的名稱是圖層的名稱。
這個items[i]就是把複選框、標籤和圖層info一一對應上。
dojo.byId("layer_list").innerHTML=items.join();把items這個列表加到網頁上了。
layer.setVisibleLayers(visible),讓圖層可見與否,visible是visible.push(info.id)定義的。
* */
function updateLayerVisibility() {
var inputs = dojo.query(".list_item"), input;
visible = [];
for (var i=0, il=inputs.length; i<il; i++) {
if (inputs[i].checked) {
visible.push(inputs[i].id);
}
}
layer.setVisibleLayers(visible);
}
dojo.addOnLoad(init);