ArcGis 中使用zTree控制图层的显示和隐藏

动态创建zTree 树状列表,

根据checkBox的选中状态,

对图层中的点、线、面等要素进行显示或隐藏的操作。

在实际中,我将zTree构造为一个小部件。

详细代码如下:

define就是将要用到的模块引进来,function给define的模块分别起一个名字 ,。

define([
    "dojo/_base/declare",
    "dojo/_base/lang",
    "dojo/ready",
    "dojo/_base/array",
    "dojo/json",
    "dojo/on",
    "dojo/query",
    "dojo/mouse",
    "dojo/store/Memory",
    "dojo/dom-class",
    "dojo/dom-construct",
    "dojo/dom-style",
    "dijit/_Widget",
    "dijit/_TemplatedMixin",
    "dijit/registry",
    "./_Widget",
    "dojo/text!./templates/LayerzTree.html"
], function(
    declare,
    lang,
    ready,
    array,
    JSON,
    on,
    query,
    mouse,
    Memory,
    domClass,
    domConstruct,
    domStyle,
    _Widget,
    _TemplatedMixin,
    registry,
    _MyWidget,
    template 
)

 

{
    var layertree = declare("widgets.LayerTree",[_MyWidget],{
        templateString:template,
        title:"图层管理",
        constructor:function(/*Object*/params){
         //   this.inherited(arguments);
            if(params == undefined){
                return;
            }
            if ("map" in params) {
                this.map = params.map;
            }
            if("mapServiceConfig" in params) {//mapServiceConfig 为json数据,是具体的点、线、面,就是从children
                this.mapServiceConfig = params.mapServiceConfig;
                this.mapServiceConfigStore = new Memory({data: this.mapServiceConfig})
            }
            if("dataConfigs" in params) {  // dataConfigs 为另一组json数据,是父类,即点线面。
                this.dataConfigs = params.dataConfigs;
              
            }
        },
        postCreate: function() { 
            this.inherited("postCreate", arguments); 
            this._initTree(this.map,this.mapServiceConfig,this.dataConfigs); //调研_initTree方法,并传参
       } ,
      
       _initTree : function(map,mapServiceConfig,dataConfigs){
    	  
    	    var zTreeObj; 
    	    var zTreeNodes=[];
          var setting = {  
                data: {  
                    simpleData: {  
                        enable: true,
                        idKey: "id",
                        pIdKey: "pId",
                        rootPId: "-1"
                    }  
                },
              check: {
    		       enable: true,
    		       chkboxType: { "Y": "ps", "N": "ps" }  
              // Y属性定义checkbox被选中后的状态  //N属性定义checkbox取消选中后的状态  //p表示操作影响父级节点,s表示操作影响子级节点
                      },
                callback:{
                   onCheck: zTreeOnCheck
                     }
             };
             var pid = "root";   //动态追加父节点,点线面
             for(var i=0;i<dataConfigs.length;i++){
    	    	 zTreeNodes.push({"name":dataConfigs[i].name,"id":dataConfigs[i].code, "pId":pid,checked:true});
    	     } 
        	 for(var i=0;i<mapServiceConfig.length;i++){    //动态追加子节点,具体的点,具体的面等
        	  zTreeNodes.push({"name":mapServiceConfig[i].description,"id":mapServiceConfig[i].id, "pId":mapServiceConfig[i].code,checked:true});
          }
         
        function zTreeOnCheck(event, treeId, treeNode) {  
            refreshLayers();  
            clearCheckedOldNodes();  
        }; 
        //刷新图层的显示情况  
        function refreshLayers() {  
            var zTree = $.fn.zTree.getZTreeObj("layerZtree");  
            var changedNodes = zTree.getChangeCheckedNodes();  //获取状态改变的节点
            if (changedNodes.length >1 ){  
            //如果改变状态节点的长度大于1,意味着选中的是父节点,,但操作是针对子节点
            //所以从i = 1 开始循环操作
         	   for ( var i=1 ; i < changedNodes.length ; i++ ){   
                    //获取选中状态
                   var checkstatus = changedNodes[i].checked;
                    //获取图层id
                    var layerid =  changedNodes[i].id;
                  //获取当前图层
                    var incidentLayer = map.getLayer(layerid);
                  //设置图层显示隐藏状态
                    incidentLayer.setVisibility(checkstatus);
                }   
            }else if(changedNodes.length == 1){
                    //如果改变状态节点的长度等于1,意味着选中的是子节点,直接进行操作
              var checkstatus = changedNodes[0].checked;

              var layerid = changedNodes[0].id;

              var incidentLayer = map.getLayer(layerid);

              incidentLayer.setVisibility(checkstatus);

   }

}

//清理善后工作

function clearCheckedOldNodes(){

var zTree = $.fn.zTree.getZTreeObj("layerZtree"),

nodes = zTree.getChangeCheckedNodes(false);

 for (var i=0, l=nodes.length; i<l; i++) {

    nodes[i].checkedOld = nodes[i].checked;
 
     }
 };

$(document).ready(function(){

    zTreeObj = $.fn.zTree.init($("#layerZtree"), setting, zTreeNodes);

    zTreeObj.expandAll(false);

    });
 
   }

});

return layertree;});

別忘了在页面添加zTree的容器

<ul id="layerZtree" class="ztree"></ul>
 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值