1. 程式人生 > >Webgis實踐3:生成圖層列表,複選圖層是否可見

Webgis實踐3:生成圖層列表,複選圖層是否可見

/*上面都是表頭檔案,引入庫啥的。*/ 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);