1. 程式人生 > >ArcGIS api for javascript+jquery實現簡單的圖層控制切換

ArcGIS api for javascript+jquery實現簡單的圖層控制切換

這一個功能網上有很多版本,快被寫爛了。寫這篇部落格的初衷是給各位不是GIS行業或沒有接觸過這個東東的猿們一些幫助。或許還有更簡單或者相似的希望大家看了之後可以提出來一起討論。只是很初級的程式碼,希望各位大大路過輕噴。歡迎交流。話不多說,咱們開始。

首先在已有地圖物件及圖層的基礎上,咱們需要構建一個列表物件來裝載我們的每一個圖層。現在較簡單的一般是使用無序列表<ul>元素來構建,當然還有其他方式,在這裡不做討論。在構建列表時,為了靈活和動態的載入當前所有的圖層。咱們需要先獲取所有的圖層物件:

var layers = map.getLayers();

這是一種方式。但是如果頁面上存在你隱藏的圖層的話也會被獲取到,有的時候不需要。那麼就可以使用另外一種方式:

var layers = map.getLayersVisibleAtScale(map.getScale()); 

這種方式會獲取當前地圖比例尺下你所能看到的所有圖層。而被你隱藏起來的那些就逃過了被統計的命運(笑)。然後我們需要開始正式的構建我們的列表選單。

 for (i = 0; i < layers.length; i++) {  
     buttonstring += '<li><img id="' + layers[i].id + '" src="/images/' + layers[i].id + '.png" /></li>';  
}  
$("#layerscontrol").html(buttonstring);  
之所以用<img>標籤,是希望將切換選單做成點選圖片切換的形式,文章末尾有效果圖。在構建完成後需要給每個<li>元素新增對應的點選事件。這裡採用jQuery來繫結。
 $("#layerscontrol li").on("click", function (evt) {
        var layer = map.getLayer(evt.target.id);
        for (i = 0; i < layers.length; i++) {
            if (layers[i].id == evt.target.id) {
                layer.setVisibility(true);
            }
            else {
                layers[i].setVisibility(false);
            }

        }
    })

這裡使用到的getLayer()方法可以在map所擁有的所有圖層(layer)物件中通過該圖層的ID來獲取對應的圖層。我這裡想達到的效果是:通過獲取我點選的帶有圖層ID的圖片,在我的圖層物件中找到該圖層,然後改變它的可見性。從而達到隱藏或顯示的效果。
需要注意的是,在使用ARCGIS JS改變圖層可見性時要用setVisibility(true/false),而不是layer.Visibility=true/false.後者是達不到效果的。

最後,需要給選單加入滑鼠移入和移出的下放和收起特效:

$("#layerimage").hover(function () {  
        $("#layerscontrol").slideDown("fast");  
    }, function () {  
        var ss = $("#layerscontrol li:hover")  
        if ($("#layerscontrol li:hover").length>0) {  
            $("#layerscontrol").hover(function () {  
  
  
            }, function () {  
                $("#layerscontrol").slideUp("fast");  
            });  
        }  
        else {  
            $("#layerscontrol").slideUp("fast");  
        }  
});  

頁面結構如下:

 <div id="layerscontrolDiv">  
               <img id="layerimage" style="display:none" src="~/images/layers.png"/>
                <ul style="list-style:none" id="layerscontrol"></ul>  
            </div>


最終效果圖:

PS:初次發帖,不足之處還望見諒