zoukankan      html  css  js  c++  java
  • 图层管理

    ////////////////////////////////////////////////////////////////////////////////
    //
    // 图层管理
    //
    ////////////////////////////////////////////////////////////////////////////////
    var LayerManagerModule = (function($) {
        //
        var createLayerManager = function() {
            // 工具 dom
            console.log("createLayerManager!");    
            if ($("#layerManagerContainerDiv").length < 1){  
                var layerManagerDom = '<div id="layerManagerContainerDiv" class="layerManagerContainer">'+
                    '<div id="layerManagerHeadDiv" class="layerManagerHead" >'+
                        '<span class="layerManagerHeadLabel" > 图层管理 </span>'+
                        '<a class="layerManagerHeadClose" href="#"><img id="closeButton" src="img/layerManager/close.png" title="关闭" ></img></a>'+
                    '</div>'+
                    '<div id="layerManagerDiv" class="ztree layerManager"></div>'+
                '</div>';        
                $(layerManagerDom).appendTo($('#controllerDiv'));
                //
                $("#layerManagerContainerDiv").css({'bottom' : 45, 'left' : (document.documentElement.clientWidth - 300)/2 });
                //
                createLayerMangerTree('layerManagerDiv', Application.map);
                // 事件
                toolAction();
                //
                widgetDrag(layerManagerDom);
                //
                console.log("createLayerManager finish!");    
            }
            else
            {
                var map = Application.map;
                createLayerMangerTree('layerManagerDiv', map);    
                $("#layerManagerContainerDiv").show();
            }
        };
    
        // 事件
        var toolAction = function() {
            $("#closeButton").each(function() {
                $(this).mouseover(function() {
                    // tip
                    $(this).poshytip( {
                        className : 'tip-twitter',
                        showTimeout : 1,
                        alignTo : 'target',
                        alignX : 'center',
                        offsetY : 10,
                        allowTipHover : false,
                        fade : false,
                        slide : false
                    });
    
                    var oldSrc = (this).src;
                    var newSrc = oldSrc.replace(".png", "On.png");
                    $(this).attr("src", newSrc);
                });
                //
                $(this).mouseout(function() {
                    var oldSrc = (this).src;
                    var newSrc = oldSrc.replace("On.png", ".png");
                    $(this).attr("src", newSrc);
                });
                //
                $(this).click(function() {
                    $("#layerManagerContainerDiv").hide();
                });
            })
        };
        
        /*
        提取图层信息数据
        map: 地图
        */
        var createLayerMangerTreeData = function (map) {
            var layerMangerTreeData = new Array();
            var layerIds = map.layerIds;
            for (var i = 0; i < layerIds.length; i++) {
                var layerId = layerIds[i];
                var layer = map.getLayer(layerId);
                if (layer.declaredClass == "esri.layers.ArcGISDynamicMapServiceLayer") {// instanceof esri.layers.ArcGISDynamicMapServiceLayer) {
                    var layerInfos = layer.layerInfos;
                    var visibleLayers = layer.visibleLayers;
                    //console.log(visibleLayers);
                    var treeNodeDataMapService = new Object();
                    treeNodeDataMapService.id = layer.id;
                    treeNodeDataMapService.name = layer.id;
                    treeNodeDataMapService.pId = "-1";
                    treeNodeDataMapService.checked = layer.visible;
                    treeNodeDataMapService.chkDisabled = false;
                    treeNodeDataMapService.isParent = true;
                    treeNodeDataMapService.nocheck = false;
                    layerMangerTreeData.push(treeNodeDataMapService);
                    for (var j = 0; j < layerInfos.length; j++) {
                        var layerInfo = layerInfos[j];
                        var treeNodeDataLayer = new Object();
                        treeNodeDataLayer.id = layer.id + "_" + layerInfo.id;
                        treeNodeDataLayer.name = layerInfo.name;
                        treeNodeDataLayer.open = false;
                        treeNodeDataLayer.pId = (isNaN(layerInfo.parentLayerId) || layerInfo.parentLayerId == -1) ? layer.id : (layer.id + "_" + layerInfo.parentLayerId);
                        
                        treeNodeDataLayer.checked = false;//layerInfo.defaultVisibility;
                        
                        for(var k = 0; k < visibleLayers.length; k++)
                        {
                            if(visibleLayers[k] == j)
                            {
                                treeNodeDataLayer.checked = true;
                                break;
                            }
                        }
                        treeNodeDataLayer.chkDisabled = false;
                        treeNodeDataLayer.isParent = false;                    
                        treeNodeDataLayer.nocheck = false;
                        layerMangerTreeData.push(treeNodeDataLayer);
                    }
                }
            }        
            return layerMangerTreeData;
        };
    
        /*
        构建图层管理树
        renderToDevId : 装载该图层树的<DIV/>标签Id
        map : 地图对象
        */
        var createLayerMangerTree = function (renderToDevId, map) {
            var setting = {
                check: {
                    enable: true,
                    chkboxType: { "Y" : "", "N" : "" }
                },
                view: {
                    dblClickExpand: false
                },
                data: {
                    simpleData: {
                        enable: true
                    }
                },
                callback: {
                    onCheck: function (e, treeId, treeNode) {                  
                        var sid = treeNode.id;
                        //console.log(sid);
                        if (treeNode.level == 0) {
                            var serviceId = sid;
                            var visible = treeNode.checked;
                            changeServerVisible(map, serviceId, visible);
                            return;
                        }
                        var serviceId = sid.substring(0, sid.lastIndexOf("_"));
                        var layerId = sid.substring(sid.lastIndexOf("_") + 1);
                        var treeObj = $.fn.zTree.getZTreeObj(renderToDevId);
                        var nodes = treeObj.getCheckedNodes(true);
                        var visibleLayers = new Array();
                        for (var i = 0, l = nodes.length; i < l; i++) {
                            var node = nodes[i];
                            var sidTemp = node.id;
                            var serviceIdTemp = sidTemp.substring(0, sidTemp.lastIndexOf("_"));
                            if (serviceId == serviceIdTemp) {
                                var layerIdTemp = parseInt(sidTemp.substring(sidTemp.lastIndexOf("_") + 1));
                                if(node.getParentNode().checked && node.isParent==false)
                                {
                                    visibleLayers.push(layerIdTemp);
                                }
                            }
                        }
                        if(visibleLayers.length==0)
                        {
                            visibleLayers = [-1];
                        }
                        setVisibleLayers(map, serviceId, visibleLayers);                    
                    }                
                }
            };
            var zNodes = createLayerMangerTreeData(map);
            //var json = JSON.stringify(zNodes);
            //console.log(json);
            var zTree = $.fn.zTree.init($("#" + renderToDevId), setting, zNodes);
            zTree.expandAll(true);
        };
    
        /*
        设置可见图层
        map: 地图对象
        serviceId: 服务的Id
        visibleLayers: 可见图层的Id数组
        */
        var setVisibleLayers = function (map, serviceId, visibleLayers) {
            var layer = map.getLayer(serviceId);
            //layer.hide();
            layer.setVisibleLayers(visibleLayers);
            //layer.show();
        };
    
        /*
        改变地图服务可见性
        map : 地图对象
        serviceId : 服务的Id
        visible : 可见性
        */
        var changeServerVisible = function (map, serviceId, visible) {
            var layer = map.getLayer(serviceId);
            if (visible) {
                layer.show();
            }
            else {
                layer.hide();
            }
        };
    
        // widget拖动
        var widgetDrag = function(targetDOM) {
            var move = false, // 移动标记
            _x, _y, // 鼠标离控件左上角的相对位置
            opacity = Application.configData.ui.opacity,
    
            layerManagerHeadDiv = $('#layerManagerHeadDiv'), layerManagerContainerDiv = $('#layerManagerContainerDiv');
    
            // 鼠标移动到 tab 部分鼠标为可拖动状态
            layerManagerHeadDiv.mouseover(function(e) {
                // tab 部分鼠标设置为move状态
                    layerManagerHeadDiv.css('cursor', 'move');
                });
    
            // widget tab 部分可拖动 widget
            layerManagerHeadDiv.mousedown(function(e) {
                // tab 部分鼠标设置为move状态
                    layerManagerHeadDiv.css('cursor', 'move');
                    // 不透明度设置
                    layerManagerContainerDiv.css('opacity', opacity - 0.1);
                    layerManagerContainerDiv.css('filter',
                            'alpha(opacity=' + (opacity * 100 - 10) + ')');
    
                    move = true;
                    if (layerManagerContainerDiv.css('left') == 'auto') {
                        _x = e.pageX
                                - ($(window).width()
                                        - parseInt(layerManagerContainerDiv.css('width')) - parseInt(layerManagerContainerDiv
                                        .css('right')));
                    } else {
                        _x = e.pageX - parseInt(layerManagerContainerDiv.css('left'));
                    }
    
                    if (layerManagerContainerDiv.css('top') == 'auto') {
                        _y = e.pageY
                                - ($(window).height()
                                        - parseInt(layerManagerContainerDiv.css('height')) - parseInt(layerManagerContainerDiv
                                        .css('bottom')));
                    } else {
                        _y = e.pageY - parseInt(layerManagerContainerDiv.css('top'));
                    }
    
                });
            $(document)
                    .mousemove(function(e) {
                        if (move) {
                            var x = e.pageX - _x, // 控件左上角到屏幕左上角的相对位置
                            y = e.pageY - _y,
                            // widget 拖动范围控制
                            maxL = document.documentElement.clientWidth
                                    - layerManagerContainerDiv.width(), maxT = document.documentElement.clientHeight
                                    - layerManagerContainerDiv.height();
                            x <= 0 && (x = 0);
                            y <= 0 && (y = 0);
                            x >= maxL && (x = maxL);
                            y >= maxT && (y = maxT);
                            // 设置 widget 位置
                            layerManagerContainerDiv.css({'top' : y, 'left' : x});
                        }
                    }).mouseup(function() {
                        move = false;
                        // tab 部分鼠标设置为auto状态
                            layerManagerHeadDiv.css('cursor', 'auto');
                            // 不透明度设置
                            layerManagerContainerDiv.css('opacity', opacity);
                            layerManagerContainerDiv.css('filter', 'alpha(opacity=' + opacity * 100 + ')');
                        });
        };
        //
        return {
            createLayerManager : createLayerManager
        };
    
    }(jQuery));
  • 相关阅读:
    (转载)如何通过Nicholas C. Zakas的面试
    (转载)Nicholas C. Zakas谈怎样才能成为优秀的前端工程师
    JavaScript程序开发(十三)—RegExp类型
    (转载)Nicholas C. Zakas如何面试前端工程师
    通用JS12——》变量、作用域与内存
    vuecli4 配置多页应用入坑详解
    事件委托
    nodejs中传入变量和格式说明符号来格式化用语
    原生js实现轮播图
    同步任务和异步任务
  • 原文地址:https://www.cnblogs.com/gispathfinder/p/5745628.html
Copyright © 2011-2022 走看看