263 lines
7.9 KiB
JavaScript
263 lines
7.9 KiB
JavaScript
/**
|
|
* @Author: tiansiyuan
|
|
* @Date: 2020/7/16 13:12:56
|
|
* @LastEditors: tiansiyuan
|
|
* @LastEditTime: 2020/7/24 14:58:19
|
|
* @Description: 标绘面板相关方法
|
|
*/
|
|
|
|
/**
|
|
* 获取标绘面板树形数据
|
|
* @param plottingUrl 标绘服务地址
|
|
* @param callback
|
|
*/
|
|
function getPlotTreeData(plottingUrl, callback) {
|
|
// 此处使用定时器,把事件变成异步,等到标绘初始化完成后,在下一轮事件循环执行
|
|
setTimeout(()=>{
|
|
const symbolLibManager = L.supermap.plotting.symbolLibManager(plottingUrl);
|
|
let plotTreeData = null;
|
|
if (symbolLibManager.isInitializeOK()) {
|
|
plotTreeData = analysisSymbolTree(symbolLibManager);
|
|
callback(plotTreeData);
|
|
} else {
|
|
symbolLibManager.on(SuperMap.Plot.Event.initializecompleted, function (result) {
|
|
if (result.libIDs.length !== 0) {
|
|
plotTreeData = analysisSymbolTree(symbolLibManager);
|
|
callback(plotTreeData);
|
|
}
|
|
});
|
|
symbolLibManager.initializeAsync();
|
|
}
|
|
},998);
|
|
}
|
|
|
|
function createDrawNodes(treeNode, drawControl, plottingUrl) {
|
|
const drawNodeClick = function() {
|
|
if (drawControl !== null) {
|
|
drawControl.handler.libID = this.libID;
|
|
drawControl.handler.code = this.symbolCode;
|
|
drawControl.handler.serverUrl = this.serverUrl;
|
|
|
|
drawControl.handler.disable();
|
|
drawControl.handler.enable();
|
|
}
|
|
};
|
|
|
|
const drawData = treeNode.drawData;
|
|
|
|
const table = document.createElement('table');
|
|
table.style.height = '100%';
|
|
table.style.width = '100%';
|
|
let i = 0;
|
|
const rowLength = (drawData.length % 3 === 0) ? drawData.length / 3 : drawData.length / 3 + 1;
|
|
for (let j = 0; j < rowLength; j++) {
|
|
const tr = document.createElement('tr');
|
|
for (let k = 0; k < 3; k++) {
|
|
if (drawData[i]) {
|
|
//存储菜单信息
|
|
const td = document.createElement('td');
|
|
const 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 = plottingUrl;
|
|
//图片
|
|
const img = document.createElement('img');
|
|
img.src = drawData[i].icon;
|
|
//文本
|
|
const 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);
|
|
}
|
|
|
|
const iconNode = document.getElementById('plotting-board-right');
|
|
iconNode.innerHTML = '';
|
|
iconNode.appendChild(table);
|
|
}
|
|
|
|
/**
|
|
* 解析符号树的数据
|
|
* @param symbolLibManager 标号库管理对象
|
|
* @returns {Array}
|
|
*/
|
|
function analysisSymbolTree(symbolLibManager) {
|
|
let treeData = [];
|
|
addBasicCellTreeNodes(treeData);
|
|
// addRouteTreeNodes(treeData);
|
|
addSymbolLibNodes(treeData, symbolLibManager);
|
|
return treeData;
|
|
}
|
|
|
|
/**
|
|
* 添加基本标号数据
|
|
* @param treeData
|
|
*/
|
|
function addBasicCellTreeNodes(treeData) {
|
|
let cellRootNode = {
|
|
id: 1,
|
|
pId: 0,
|
|
label: '基本标号',
|
|
fullName: 'BasicCell/',
|
|
};
|
|
treeData.push(cellRootNode);
|
|
|
|
const 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,
|
|
1001, 1003, 1028];
|
|
const symbolName = ['折线', '平行四边形', '圆', '椭圆', '注记', '正多边形', '多边形', '贝赛尔曲线', '闭合贝赛尔曲线',
|
|
'集结地', '大括号', '梯形', '矩形', '弓形', '扇形', '弧线', '平行线', '注记指示框',
|
|
'同心圆', '组合圆', '标注框', '多角标注框', '自由线', '节点链',
|
|
'跑道形', '八字形', '箭头线', '沿线注记', '线型标注',
|
|
'对象间连线', '多边形区域', '铁丝网'];
|
|
|
|
cellRootNode.drawData = symbolCode.map((code, index) => {
|
|
return {
|
|
id: index + 2,
|
|
pid: 0,
|
|
icon: `../plotting/img/plottingPanel/${cellRootNode.fullName}${code}.png`,
|
|
symbolCode: code,
|
|
libID: 0,
|
|
symbolName: symbolName[index],
|
|
};
|
|
});
|
|
}
|
|
|
|
/**
|
|
* 添加航线标号数据
|
|
*/
|
|
function addRouteTreeNodes(treeData) {
|
|
let cellRootNode = {
|
|
id: 2,
|
|
pId: 0,
|
|
label: '航线对象',
|
|
};
|
|
treeData.push(cellRootNode);
|
|
|
|
const symbolCode = [1005, 1006, 1007];
|
|
const symbolName = ['航线1', '航线2', '航线3'];
|
|
|
|
cellRootNode.drawData = symbolCode.map((code, index) => {
|
|
return {
|
|
id: index + 2,
|
|
pid: 0,
|
|
icon: `../plotting/img/plottingPanel/BasicCell/RouteIcon/${code}.png`,
|
|
symbolCode: code,
|
|
libID: 0,
|
|
symbolName:symbolName[index],
|
|
};
|
|
});
|
|
}
|
|
|
|
/**
|
|
* 添加iServer标号库的标号
|
|
*/
|
|
function addSymbolLibNodes(treeData, symbolLibManager) {
|
|
for (let i = 0; i < symbolLibManager.getSymbolLibNumber(); i++) {
|
|
const symbolLib = symbolLibManager.getSymbolLibByIndex(i);
|
|
const rootSymbolInfo = symbolLib.getRootSymbolInfo();
|
|
const rootSymbolIconUrl = symbolLib.getRootSymbolIconUrl();
|
|
|
|
if (rootSymbolInfo.symbolNodeType === 'SYMBOL_GROUP') {
|
|
let rootNode = {
|
|
id: i + 3,
|
|
pId: 0,
|
|
label: rootSymbolInfo.symbolName,
|
|
fullName: `${rootSymbolInfo.symbolName}/`,
|
|
children: [],
|
|
};
|
|
|
|
innerAnalysisSymbolTree(rootSymbolInfo.childNodes, rootNode, rootSymbolIconUrl);
|
|
treeData.push(rootNode);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 循环添加子节点
|
|
* @param childSymbolInfos
|
|
* @param parentNode
|
|
* @param rootSymbolIconUrl
|
|
* @returns {*}
|
|
*/
|
|
function innerAnalysisSymbolTree(childSymbolInfos, parentNode, rootSymbolIconUrl) {
|
|
let drawData = [];
|
|
let treeNodeId = parentNode.id + 1;
|
|
childSymbolInfos.forEach(childSymbolInfo => {
|
|
if (childSymbolInfo.symbolNodeType === 'SYMBOL_GROUP') {
|
|
const node = {
|
|
id: treeNodeId++,
|
|
pId: parentNode.id,
|
|
label: childSymbolInfo.symbolName,
|
|
fullName: `${parentNode.fullName}${childSymbolInfo.symbolName}/`,
|
|
children: [],
|
|
};
|
|
parentNode.children.push(node);
|
|
innerAnalysisSymbolTree(childSymbolInfo.childNodes, node, rootSymbolIconUrl);
|
|
} else if (childSymbolInfo.symbolNodeType === 'SYMBOL_NODE') {
|
|
const drawNode = {
|
|
id: treeNodeId++,
|
|
pId: parentNode.id,
|
|
icon: `/src/assets/common/multiScreen/normal/plotting-symbol/${parentNode.fullName}${childSymbolInfo.symbolCode}.png`,
|
|
symbolCode: childSymbolInfo.symbolCode,
|
|
libID: childSymbolInfo.libID,
|
|
symbolName: childSymbolInfo.symbolName.toString(),
|
|
};
|
|
drawData.push(drawNode);
|
|
}
|
|
});
|
|
|
|
if (drawData.length !== 0) {
|
|
parentNode.drawData = drawData;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 判断一个标号是点标号还是线面标号
|
|
*/
|
|
function judgeSymbolType({ symbolType }) {
|
|
switch (symbolType) {
|
|
case 2:
|
|
case 1001:
|
|
case 1028:
|
|
return 'algoSymbol'; // 线面标号
|
|
case 1005:
|
|
return 'KJRoute'; // 空军航线
|
|
case 1006:
|
|
return 'HJRoute'; // 海军航线
|
|
case 1007:
|
|
return 'DDRoute'; // 导弹航线
|
|
default:
|
|
return 'dotSymbol'; // 点标号
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 生成36位uuid
|
|
* @returns {string}
|
|
*/
|
|
function generate36UUID() {
|
|
const s = [];
|
|
const hexDigits = "0123456789abcdef";
|
|
for (let i = 0; i < 36; i++) {
|
|
s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
|
|
}
|
|
s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010
|
|
s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
|
|
s[8] = s[13] = s[18] = s[23] = "-";
|
|
return s.join("");
|
|
}
|
|
|
|
export { getPlotTreeData, createDrawNodes, judgeSymbolType, generate36UUID };
|