/** * * Class: SuperMap.Plotting.PlotPanel * 标绘面板类。 * */ SuperMap.Plotting.PlotPanel = new SuperMap.Class({ /** * Constant: EVENT_TYPES * {Array(String)} * * 此类支持的事件类型: * - *initializeCompleted* 标绘面板初始化成功触发该事件。 * - *initializeFailed* 标绘面板初始化失败触发该事件。 */ EVENT_TYPES: ["initializeCompleted", "initializeFailed"], /** * APIProperty: events * {} 在 getLibInfosFailed 类中处理所有事件的对象,支持两种事件 processCompleted 、processFailed ,服务端成功返回查询结果时触发 processCompleted 事件,服务端返回查询结果失败时触发 processFailed 事件。 * * 例如: * (start code) * var myService = new SuperMap.REST.getLibInfosFailed(url); * myService.events.on({ * "processCompleted": getLibInfosComplted, * "processFailed": getLibInfosFailed * } * ); * function getLibInfosComplted(getLibInfosCompltedEventArgs){//todo}; * function getLibInfosFailed(getLibInfosFailedEventArgs){//todo}; * (end) */ events: null, /** * APIProperty: eventListeners * {Object} 监听器对象,在构造函数中设置此参数(可选),对 GetLibInfosService 支持的两个事件 processCompleted 、processFailed 进行监听,相当于调用 SuperMap.Events.on(eventListeners)。 */ eventListeners: null, /** * Property: serverUrl * {String}标绘服务URI */ serverUrl: null, /** * Property: map * {SuperMap.Map} */ map: null, /** * Property: drawFeature * {} 绘制控件 */ drawFeature: null, /** * Property: isInializeOK * 标号库初始化是否完成。 */ isInializeOK: false, /** * Constructor: SuperMap.Plotting.PlotPanel * 标号库管理类。 * * Parameters: * div - {String} 标绘面板div * url - {String} 标绘服务url * map - {} * * Returns: * {} 结果类型对象。 */ initialize : function(div, url, map){ if(url){ this.serverUrl = url; } if(map && map !== null){ this.map = map; } this.events = new SuperMap.Events( this, null, this.EVENT_TYPES, true ); if (this.eventListeners instanceof Object) { this.events.on(this.eventListeners); } var plotPanel = document.getElementById(div); var treeNodeStyle = document.createElement("div"); //treeNodeStyle.style = "height: 50%; width: 100%; font-size: 16px; border: 1px solid #617775;overflow: scroll"; treeNodeStyle.style.height = '50%'; treeNodeStyle.style.width = '100%'; treeNodeStyle.style.border = '1px solid #617775'; treeNodeStyle.style.overflow ='scroll'; var treeNode = document.createElement("div"); treeNode.id = "tree"; treeNode.className = "ztree"; var iconNodeStyle = document.createElement("div"); //iconNodeStyle.style = "height: 50%; width: 100%"; iconNodeStyle.style.height = '50%'; iconNodeStyle.style.width = '100%'; this.iconNode = document.createElement("div"); this.iconNode.id = "icon"; //this.iconNode.style = "height: 100%; width: 100%; overflow: scroll;border: 1px solid #617775;"; this.iconNode.style.height = '100%'; this.iconNode.style.width = '100%'; this.iconNode.style.border = '1px solid #617775'; this.iconNode.style.overflow ='scroll'; treeNodeStyle.appendChild(treeNode); iconNodeStyle.appendChild(this.iconNode); plotPanel.appendChild(treeNodeStyle); plotPanel.appendChild(iconNodeStyle); }, isInitializeOK: function(){ return this.isInializeOK; }, setDrawFeature: function(drawFeature){ this.drawFeature = drawFeature; }, /** * APIMethod: initializeAsync * 初始化标绘面板。 */ initializeAsync : function(){ function beforeClickTreeNode(treeId, treeNode){ var tree = $.fn.zTree.getZTreeObj(treeId); if (treeNode.isParent) { tree.expandNode(treeNode); return false; } else { me.iconNode.innerHTML = ""; me.createDrawNodes(treeNode, me.iconNode); } } var me = this; var plotting = SuperMap.Plotting.getInstance(this.map, this.serverUrl); var symbolLibManager = plotting.getSymbolLibManager(); var setting = { view: { dblClickExpand: false, showLine: true, selectedMulti: false }, data: { simpleData: { enable:true, idKey: "id", pIdKey: "pId", rootPId: 0 } }, callback: { beforeClick: beforeClickTreeNode } }; if(symbolLibManager.isInitializeOK()){ var symbolTreeData = this.analysisSymbolTree(symbolLibManager); $.fn.zTree.init($("#tree"), setting, symbolTreeData); this.isInitializeOK = true; this.events.triggerEvent("initializeCompleted"); } else { function initializeCompleted(result){ if(result.libIDs.length !== 0){ var symbolTreeData = this.analysisSymbolTree(symbolLibManager); $.fn.zTree.init($("#tree"), setting, symbolTreeData); this.isInitializeOK = true; this.events.triggerEvent("initializeCompleted"); } } symbolLibManager.events.on({"initializeCompleted": initializeCompleted, scope: this}); symbolLibManager.initializeAsync(); } }, createDrawNodes: function(treeNode, iconNode){ drawNodeClick = function(){ if(me.map !== null){ var controls = me.map.controls; for(var i = 0; i < controls.length; i++){ if(controls[i].CLASS_NAME === "SuperMap.Control.PlottingEdit"){ controls[i].deactivate(); } } } if(me.drawFeature === null){ me.drawFeature = me.getDrawControl(); } if(me.drawFeature !== null){ me.drawFeature.handler.libID = this.libID; me.drawFeature.handler.symbolCode = this.symbolCode; me.drawFeature.handler.serverUrl = this.serverUrl; me.drawFeature.deactivate(); me.drawFeature.activate(); } } var me = this; var drawData = treeNode.drawData.drawNodes; var table = document.createElement("table"); table.style.height = "100%"; table.style.width = "100%"; var i = 0; var rowLength = (drawData.length%3 === 0) ? drawData.length/3 : drawData.length/3+1; for(var j = 0; j < rowLength; j++){ var tr = document.createElement("tr"); for(var k = 0; k < 3; k++){ if(drawData[i]){ //存储菜单信息 var td = document.createElement("td"); var drawNode = document.createElement("div"); drawNode.onclick = drawNodeClick; drawNode.style.textAlign = "center"; drawNode.id = drawData[i].libID+ ""+ drawData[i].symbolCode; drawNode.libID = drawData[i].libID; drawNode.symbolCode = drawData[i].symbolCode; drawNode.serverUrl = treeNode.drawData.serverUrl; //图片 var img = document.createElement("img"); img.src = drawData[i].icon; //文本 var text = document.createElement("div"); text.innerHTML = drawData[i].symbolName; drawNode.appendChild(img); drawNode.appendChild(text); td.appendChild(drawNode); tr.appendChild(td); } i++; } table.appendChild(tr); } iconNode.appendChild(table); }, analysisSymbolTree: function(symbolLibManager) { var treeData = []; var idIndex = this.addBasicCellTreeNodes(treeData); var idIndex1 = this.addNew(treeData); for(var i = 0; i < symbolLibManager.getSymbolLibNumber(); i++){ var symbolLib = symbolLibManager.getSymbolLibByIndex(i); //console.log(symbolLib.libID); var rootSymbolInfo = symbolLib.getRootSymbolInfo(); var rootSymbolIconUrl = symbolLib.getRootSymbolIconUrl(); if(rootSymbolInfo.symbolNodeType === "SYMBOL_GROUP"){ var rootNode = new Object(); rootNode.id = idIndex+i; rootNode.pId = 0; rootNode.name = rootSymbolInfo.symbolName; rootNode.fullName = rootSymbolInfo.symbolName +"/"; treeData.push(rootNode); idIndex = this.innerAnalysisSymbolTree(rootSymbolInfo.childNodes, treeData, rootNode, rootSymbolIconUrl); } } return treeData; }, addBasicCellTreeNodes: function(treeData){ var cellRootNode = new Object(); cellRootNode.id = 1; cellRootNode.pId = 0; cellRootNode.name = "基本标号"; cellRootNode.fullName = "BasicCell" +"/"; cellRootNode.drawData = {serverUrl:this.serverUrl, drawNodes:[]}; treeData.push(cellRootNode); var symbolCode = [24, 28, 29, 31, 34, 410, 32, 590, 360, 390, 400, 350, 26, 370, 380, 44, 48, 320 , 1019, 1022,1024,321,1023,1025 ,1013, 1014, 1016, 1017,1026, 1028 ,1001, 1003, 1004]; var symbolName = ["折线", "平行四边形", "圆", "椭圆", "注记", "正多边形", "多边形", "贝赛尔曲线", "闭合贝赛尔曲线" , "集结地", "大括号", "梯形", "矩形", "弓形", "扇形", "弧线", "平行线", "注记指示框" , "同心圆", "组合圆","标注框","多角标注框","自由线", "节点链" , "跑道形", "八字形", "箭头线", "沿线注记","线型标注", "铁丝网" , "对象间连线", "多边形区域","扇形区域"]; var cellId = cellRootNode.id + 1; for(var i = 0; i < symbolCode.length; i++){ var drawCellNode = { id: cellId++, pId: 0, icon:"images/" + cellRootNode.fullName + symbolCode[i] + ".png", symbolCode: symbolCode[i], libID: 0, symbolName: symbolName[i] }; cellRootNode.drawData.drawNodes.push(drawCellNode); } return cellId; }, addNew: function(treeData){ var cellRootNode = new Object(); cellRootNode.id = 1; cellRootNode.pId = 0; cellRootNode.name = "航线对象"; cellRootNode.drawData = {serverUrl:this.serverUrl, drawNodes:[]}; treeData.push(cellRootNode); var symbolCode = [1005,1006,1007]; var symbolName = ["航线1","航线2","航线3"]; var cellId = cellRootNode.id + 1; for(var i = 0; i < symbolCode.length; i++){ var drawCellNode = { id: cellId++, pId: 0, icon:"images/BasicCell/RouteIcon/" + symbolCode[i] + ".png", symbolCode: symbolCode[i], libID: 0, symbolName: symbolName[i] }; cellRootNode.drawData.drawNodes.push(drawCellNode); } return cellId; }, innerAnalysisSymbolTree: function(childSymbolInfos, treeData, parentNode, rootSymbolIconUrl){ var drawData = []; var treeNodeId = parentNode.id+1; for(var i = 0; i < childSymbolInfos.length; i++){ if(childSymbolInfos[i].symbolNodeType === "SYMBOL_GROUP"){ var treeNode = new Object(); treeNode.id = treeNodeId++; treeNode.pId = parentNode.id; treeNode.name = childSymbolInfos[i].symbolName; treeNode.fullName = parentNode.fullName + childSymbolInfos[i].symbolName+"/"; treeData.push(treeNode); treeNodeId = this.innerAnalysisSymbolTree(childSymbolInfos[i].childNodes, treeData, treeNode, rootSymbolIconUrl); } else if(childSymbolInfos[i].symbolNodeType === "SYMBOL_NODE"){ var drawNode = new Object(); drawNode.id = treeNodeId++; drawNode.pId = parentNode.id; drawNode.icon = rootSymbolIconUrl + parentNode.fullName + childSymbolInfos[i].symbolCode + ".png"; drawNode.symbolCode = childSymbolInfos[i].symbolCode; drawNode.libID = childSymbolInfos[i].libID; drawNode.symbolName = childSymbolInfos[i].symbolName + "_" + childSymbolInfos[i].symbolCode; drawData.push(drawNode); } } if(drawData.length !== 0){ parentNode.drawData = {serverUrl:this.serverUrl, drawNodes:drawData}; } return treeNodeId; }, getDrawControl: function(){ var plotLayers = map.getLayersByClass("SuperMap.Layer.PlottingLayer"); var editPlottingLayer = null; for(var i = 0; i < plotLayers.length; i ++){ if(plotLayers[i].isEditable === true){ editPlottingLayer = plotLayers[i]; break; } } if(editPlottingLayer === null){ return null; } var controls = map.controls; for(var j = 0; j < controls.length; j++){ if(controls[j].CLASS_NAME === "SuperMap.Control.DrawFeature" && editPlottingLayer === controls[j].layer && controls[j].handler && controls[j].handler.CLASS_NAME === "SuperMap.Handler.GraphicObject"){ return controls[j]; } } return null; }, CLASS_NAME: "SuperMap.Plotting.PlotPanel" });