ArcGIS api for javascript-圖層控制(圖層樹)


使用ArcGIS js api和jquery-easyui實現樹形圖層控制功能

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=7,IE=9">

<title>圖層控制</title>
<link rel="stylesheet" type="text/css"
    href="http://localhost:8080/arcgis_js_api/library/3.2/jsapi/js/dojo/dijit/themes/claro/claro.css" />
<link rel="stylesheet" type="text/css"
    href="http://localhost:8080/arcgis_js_api/library/3.2/jsapi/js/esri/css/esri.css" />
<script type="text/javascript">
    dojoConfig = {
        parseOnLoad : true
    };
</script>
<script type="text/javascript"
    src="http://localhost:8080/arcgis_js_api/library/3.2/jsapi/init.js"></script>

    <script type="text/javascript" src='../resources/jquery/jquery-1.7.2.min.js'></script>
    <link rel="stylesheet" type="text/css" href='../resources/jquery/themes/gray/easyui.css'>    
    <link rel="stylesheet" type="text/css" href="../resources/jquery/themes/icon.css">    
    <script type="text/javascript" src='../resources/jquery/jquery.easyui.min.js'></script>
    <script type="text/javascript" src='../resources/jquery/locale/easyui-lang-zh_CN.js' charset="utf-8"></script>
    <script>
        dojo.require("esri.map");

    var layer, map, visible = [];

    function init() {
        map = new esri.Map("map");
        layer = new esri.layers.ArcGISDynamicMapServiceLayer("http://192.168.10.200:8399/arcgis/rest/services/toctree/MapServer");

        if (layer.loaded) {
            buildLayerList(layer);
        } else {
            dojo.connect(layer, "onLoad", buildLayerList);
        }
    }
    
    function getChildrenNodes(parentnodes, node){
         for (var i = parentnodes.length - 1; i >= 0; i--) {
            
            var pnode = parentnodes[i];
            //如果是父子關系,為父節點增加子節點,退出for循環
            if (pnode.id==node.pid) {
                pnode.state="closed" ;//關閉二級樹
                pnode.children.push(node) ;
                return ;
            } else {
                //如果不是父子關系,刪除父節點棧里當前的節點,
                //繼續此次循環,直到確定父子關系或不存在退出for循環
                parentnodes.pop() ;
            }
        }
    }

    function buildLayerList(layer) {
    //構建圖層樹形結構
    
var layerinfos = layer.layerInfos ; var treeList = [] ;//jquery-easyui的tree用到的tree_data.json數組 var parentnodes = [] ;//保存所有的父親節點 var root = {"id":"rootnode","text":"所有圖層","children":[]} ;//增加一個根節點 var node = {} ; if (layerinfos != null && layerinfos.length > 0) { for(var i=0,j=layerinfos.length;i<j;i++){ var info = layerinfos[i] ; if (info.defaultVisibility) { visible.push(info.id); }
         //node為tree用到的json數據 node
= { "id":info.id, "text":info.name, "pid":info.parentLayerId, "checked":info.defaultVisibility ? true:false, "children":[] } ; if(info.parentLayerId==-1){ parentnodes.push(node) ; root.children.push(node) ; }else{ getChildrenNodes(parentnodes, node); parentnodes.push(node) ; } } } treeList.push(root) ; //jquery-easyui的樹 $('#toc').tree({ data:treeList , checkbox :true, //使節點增加選擇框 onCheck:function (node,checked){//更新顯示選擇的圖層 var visible = []; var nodes = $('#toc').tree("getChecked") ; dojo.forEach(nodes, function(node) { visible.push(node.id); }); //if there aren't any layers visible set the array to be -1 if (visible.length === 0) { visible.push(-1); } layer.setVisibleLayers(visible); } }); layer.setVisibleLayers(visible); map.addLayer(layer); } dojo.ready(init); </script> </head> <body class="easyui-layout"> <div data-options="region:'west',split:true,title:'菜單'" style="width:200px;padding:10px;"> <div id="panelHeader" style="width: 100%; height: 100%;"> 圖層控制:<br /> <ul id="toc" class="easyui-tree"></ul> </div> </div> <div data-options="region:'center',title:'地圖'"> <div id="map" style="width: 100%; height: 100%; "></div> </div> </body> </html>

 預覽圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM