图层管理

////////////////////////////////////////////////////////////////////////////////
//
// 图层管理
//
////////////////////////////////////////////////////////////////////////////////
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));
时间: 2024-08-22 13:31:28

图层管理的相关文章

WorldWind源码剖析系列:图层管理器按钮类LayerManagerButton和菜单条类MenuBar

WorldWindow用户定制控件类中所包含的的可视化子控件主要有:图层管理器按钮类LayerManagerButton和菜单条类MenuBar.BmngLoader类中所包含的的可视化子控件主要有:WindowsControlMenuButton,该类也派生自抽象类MenuButton.注意:PluginSDK工程中包含了WidgetMenuButton.cs文件,该工程的Widgets文件夹下面也包含了WidgetMenuButton.cs文件,前者在整个工程中并未被引用,被废弃了. 这些可

手机中安装CAD看图软件哪一款比较好用?而且还能进行图层管理?

手机中安装CAD看图软件哪一款比较好用?而且还能进行图层管理?现在对于CAD行业的小伙伴们来说CAD看图软件对于他们来说并不是那么的陌生,但是对于才刚刚接触到CAD的小伙伴们来说确有一定的难度,不过不用害怕,小编来教教大家,手机中安装CAD看图软件哪一款比较好用呢,而且还能进行图层管理.下面就跟着小编的脚步一起来看看吧! 使用步骤一:如果手机中没有CAD看图软件的,可以在手机的浏览器中搜索迅捷CAD看图软件,进入到官网,这里有安卓版和苹果版,根据自己的手机类型来进行选择下载,还可以在手机百度助手

如何在CAD中对图纸进行图层管理

在需要绘制CAD图纸的行业中,CAD制图是日常中不能在日常的工作了,完整的一张CAD图纸中是有许多的图层进行组合起来的,在查看的过程中也可以对图层进行一些简单的管理,以便我们更方便的进行查看,但是如何在CAD中对图纸进行图层管理呢?要怎么来进行设置了,下面就来教教大家具体操作技巧. 第一步:首先还是需要将电脑打开,在电脑中任意的打开一个浏览器,在浏览器的搜索框中搜索迅捷CAD看图,之后点击进入官网,根据系统提示操作步骤下载最新版本的CAD编辑器到电脑桌面上. 第二步:之后,将CAD看图安装完成之

如何将电子版CAD图纸进行图层管理?

如何将电子版CAD图纸进行图层管理?一张完整的CAD图纸文件是由许多的图层组合而来的,那么我们在使用CAD看图查看CAD图纸文件时候应该怎么进行图纸上图层的管理,下面小编就要来教大家的就是如何将电子版CAD图纸进行图层管理的相关操作步骤,希望以下能够帮助到你们! 步骤一:首先要打开您电脑上面的CAD看图软件,如果您电脑上没有一款CAD看图软件,就可以去到迅捷CAD官网上面下载这款免费的迅捷CAD看图!步骤二:完成软件的下载之后将软件安装到您的电脑桌面上然后选择进入软件,选择左上角的"+打开&qu

[自制简单操作系统] 3、内存管理和窗口叠加

1.本次主要进展 >_<" 这次主要学习了系统内存管理和窗口叠加~由于上两篇都做了详细的框架说明和介绍,这里直接上代码! 2.文件及函数构成 >_<" 这里和第二篇相比,把鼠标和键盘的相关函数独立出来放进各自相应的文件中,并主要在内存管理和窗口叠加进行探索,同时还有部分代码整理~ 1 /* In this file, not only have the defination of the function, but also 2 hava the descrip

Photoshop入门教程(三):图层

学习心得:图层可以说是Photoshop的核心,看似简单,但是对于图像的各种编辑都是基于图层.他就像一层透明的.没有厚度的玻璃纸,每张玻璃纸设置不同的效果,层层叠加,最后显现出绚烂的效果. 在进行图像处理工作时,最好不要破坏原片,不要直接在原片上进行编辑.因为当工作到后期时,可能发现之前的操作需要修改,但是操作步骤数太多,"历史记录"工具已经派不上用途了.这时,图层就成了拯救世界的英雄,一个简单的方法就是在开始修片工作前将原片复制一层作为备份图层再编辑.善于运用图层这个Photosho

开发者、设计师和管理人员必备的20款在线工具(上)

当互联网越来越靠近我们生活的时候,网络技术的发展也使得我们更多的任务可以在网络上完成,比如设计和开发.今天小编给大家推荐20款不需要安装,借助浏览器即可完成项目的网页开发工具~ Animatron Animatron是一个与动画有关的在线工具,可以帮助你轻松制作HTML5和SVG动画,无需编写代码,可提高网站的体验和设计感. 目前Animatron提供不同层级的服务,从免费到20美元包月.可以将你从制作往网站动画效果的压力中释放出来,还可以帮助你将工作内容存储到云端,方便团队协作,一旦完成作品还

arcgis api 4.x for js之图层管理篇

上篇实现了基础地图加载以及二三维模式切换:本篇的内容则是图层管理控制,从两个不同角度来实现,分别是直接绑定arcgis api提供的图层管理widget(LayerList)以及自定义图层管理图标的点击事件来控制图层的隐藏或者显示.不管是LayerList或者自定义图标点击管理图层的实现方式,核心都是根据Layer的属性visible来设置true或者false来控制的. 一.谈谈本篇自己认为比较重要的几个专业术语名称的理解: 1.TileLayer TileLayer,加载缓存地图服务的瓦片图

谷歌地图导入AutoCAD CAD图导入谷歌地图

在线矢量标注(标绘)使用教程 1.导入/导出AutoCAD文件DXF格式 2.在线标注含有 点 线 面 的矢量标注(KML/KMZ/SHP/DWG/DXF) 3.标注矢量导入导出(支持格式KML.KMZ.SHP.GPX(GPS测量坐标)) 4.矢量标注自动叠加到卫星图像上一起下载(矢量栅格化) 5.在AutoCAD中打开标注的矢量点.线.面及属性 启动BIGEMAP软件,点击软件左上角[编辑]按钮,如下图: 弹出可编辑对话界面,如下图: 上图中横向的是标绘用的工具栏,可以选择点.线.面.等常规标