//////////////////////////////////////////////////////////////////////////////// // // 图层管理
// //////////////////////////////////////////////////////////////////////////////// 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));