From 417c46988366e8c11f54230345f2e6840a0025f7 Mon Sep 17 00:00:00 2001 From: jihongshun <1151753686@qq.com> Date: 星期三, 16 七月 2025 16:43:00 +0800 Subject: [PATCH] 项目相关 --- src/views/system/project/components/addPorjectDialog.vue | 540 +++++++++++++++-------------------------------------------- 1 files changed, 139 insertions(+), 401 deletions(-) diff --git a/src/views/system/project/components/addPorjectDialog.vue b/src/views/system/project/components/addPorjectDialog.vue index c336406..bed4cfe 100644 --- a/src/views/system/project/components/addPorjectDialog.vue +++ b/src/views/system/project/components/addPorjectDialog.vue @@ -10,10 +10,8 @@ <el-col :span=6> <el-card class="noScroll"> <div class="chooseModel"> - <!-- <el-button type="primary" @click='chooseModel'>娣诲姞璁惧</el-button> --> <div class="fontJust">璁惧鍒楄〃</div> <el-button @click="addDevice"> 鏂板</el-button> - <el-button @click="draw"> 娓叉煋</el-button> <el-table :data="tableData" max-height = '180' @@ -73,6 +71,8 @@ import CesiumMap from "../../../../utils/components/cesium-map.vue"; import chooseDeviceDialog from './chooseDeviceDialog.vue'; import chooseModelDialog from './chooseModelDialog.vue'; +import { obtainRealData} from "@/api/system/template" + export default{ components: { CesiumMap, @@ -83,353 +83,7 @@ return{ dialogVisible :true, tableData: [], - treeData:[ - { - "createBy": null, - "createTime": null, - "updateBy": null, - "updateTime": null, - "remark": null, - "id": "3c5fc76c46c54c1187ff0bbcc092194b", - "modelId": "6257cf734cf94c7caae0dee2ac2231d1", - "deviceName": "璁惧3", - "deviceType": null, - "longitude": 125.01255362568844, - "latitude": 46.40803605631184, - "altitude": -0.029793403136164368, - "belongingRoute": "绾胯矾3", - "face": 30, - "label": "璁惧3", - "children": [ - { - "id": "197ee63df18b0af0", - "label": "鍦伴潰鐐�0", - "longitude": 125.01254682821249, - "latitude": 46.40803726847258, - "height": 5.55594577349203, - "children": [ - { - "id": "197ee63df18539a3", - "label": "绌轰腑鐐�1", - "longitude": 125.01128753149214, - "latitude": 46.4082612208105, - "height": 6.492838981926156 - } - ] - }, - { - "id": "197ee63df18cce29", - "label": "鍦伴潰鐐�1", - "longitude": 125.01254709729052, - "latitude": 46.408037217374755, - "height": 6.4920524070572645, - "children": [ - { - "id": "197ee63df18539a3", - "label": "绌轰腑鐐�1", - "longitude": 125.01128753149214, - "latitude": 46.4082612208105, - "height": 6.492838981926156 - } - ] - }, - { - "id": "197ee63df188aa47", - "label": "鍦伴潰鐐�2", - "longitude": 125.01254783039168, - "latitude": 46.408036932133236, - "height": 7.424864167610554, - "children": [ - { - "id": "197ee63df1845bc7", - "label": "绌轰腑鐐�2", - "longitude": 125.0112772702233, - "latitude": 46.40822893934041, - "height": 7.425650325131619 - } - ] - }, - { - "id": "197ee63df199a530", - "label": "鍦伴潰鐐�3", - "longitude": 125.01255933758492, - "latitude": 46.40803691722688, - "height": 7.424719094681872, - "children": [ - { - "id": "197ee63df1908bad", - "label": "绌轰腑鐐�3", - "longitude": 125.0138300519516, - "latitude": 46.40822843553173, - "height": 7.425505375628057 - } - ] - }, - { - "id": "197ee63df198ebdf", - "label": "鍦伴潰鐐�4", - "longitude": 125.01256021566009, - "latitude": 46.408036958116895, - "height": 6.454013013927198, - "children": [ - { - "id": "197ee63df192e649", - "label": "绌轰腑鐐�4", - "longitude": 125.0138360193498, - "latitude": 46.40821153783117, - "height": 6.454799694246353 - } - ] - }, - { - "id": "197ee63df1989863", - "label": "鍦伴潰鐐�5", - "longitude": 125.01256037655455, - "latitude": 46.40803705402738, - "height": 5.5173191358810305, - "children": [ - { - "id": "197ee63df19fb1cb", - "label": "绌轰腑鐐�5", - "longitude": 125.01384789553899, - "latitude": 46.408163891976834, - "height": 6.023658449094137 - } - ] - } - ] - }, - { - "createBy": null, - "createTime": null, - "updateBy": null, - "updateTime": null, - "remark": null, - "id": "5d7c595466094e369c6ed9fdcab6ba50", - "modelId": "416a0c3361a9409495623eff5c19fb41", - "deviceName": "璁惧2", - "deviceType": null, - "longitude": 124.98495711631958, - "latitude": 46.60913669289758, - "altitude": -0.010649270561847658, - "belongingRoute": "绾胯矾2", - "face": 30, - "label": "璁惧2", - "children": [ - { - "id": "197ee6746f64a423", - "label": "鍦伴潰鐐�0", - "longitude": 124.98496378621228, - "latitude": 46.60913556199556, - "height": 5.517188951102072, - "children": [ - { - "id": "197ee6746f74e23a", - "label": "绌轰腑鐐�0", - "longitude": 124.98623131325654, - "latitude": 46.60892064074182, - "height": 5.517975962983238 - } - ] - }, - { - "id": "197ee6746f7d5cbb", - "label": "鍦伴潰鐐�1", - "longitude": 124.98496380688303, - "latitude": 46.609135777787124, - "height": 6.454174518781066, - "children": [ - { - "id": "197ee6746f76d1f7", - "label": "绌轰腑鐐�1", - "longitude": 124.98624416031694, - "latitude": 46.60896064802085, - "height": 6.454961413485681 - } - ] - }, - { - "id": "197ee6746f7f75d3", - "label": "鍦伴潰鐐�2", - "longitude": 124.9849627026509, - "latitude": 46.6091358190698, - "height": 7.4247849395402445, - "children": [ - { - "id": "197ee6746f7bd9af", - "label": "绌轰腑鐐�2", - "longitude": 124.98623564998626, - "latitude": 46.608936693647046, - "height": 7.425571052201786 - } - ] - }, - { - "id": "197ee6746f786c30", - "label": "鍦伴潰鐐�3", - "longitude": 124.98495139129277, - "latitude": 46.609136202860036, - "height": 7.385436810668997, - "children": [ - { - "id": "197ee6746f7220cc", - "label": "绌轰腑鐐�3", - "longitude": 124.98365601680429, - "latitude": 46.60902531680706, - "height": 7.386222783506121 - } - ] - }, - { - "id": "197ee6746f70eac7", - "label": "鍦伴潰鐐�4", - "longitude": 124.98495046384257, - "latitude": 46.6091358802505, - "height": 6.453950090508963, - "children": [ - { - "id": "197ee6746f74dd82", - "label": "绌轰腑鐐�4", - "longitude": 124.98366517250753, - "latitude": 46.60897886511559, - "height": 6.4547368247826675 - } - ] - }, - { - "id": "197ee6746f7ac599", - "label": "鍦伴潰鐐�5", - "longitude": 124.984950334958, - "latitude": 46.609135834916806, - "height": 5.516518597126235, - "children": [ - { - "id": "197ee6746f7220cc", - "label": "绌轰腑鐐�3", - "longitude": 124.98365601680429, - "latitude": 46.60902531680706, - "height": 7.386222783506121 - } - ] - } -] - }, - { - "createBy": null, - "createTime": null, - "updateBy": null, - "updateTime": null, - "remark": null, - "id": "f796896ac1c445c183456c500502bef0", - "modelId": "1bd29eedeaaf4a3da83212fbb1793fd5", - "deviceName": "璁惧1", - "deviceType": null, - "longitude": 125.14336018333184, - "latitude": 46.558980802047344, - "altitude": -0.0019061848373990704, - "belongingRoute": "绾胯矾1", - "face": 60, - "label": "璁惧1", - "children": [ - { - "id": "197ee65dac710766", - "label": "鍦伴潰鐐�0", - "longitude": 125.14335344347126, - "latitude": 46.55898205916312, - "height": 5.556756800574575, - "children": [ - { - "id": "197ee65dac75edbb", - "label": "绌轰腑鐐�0", - "longitude": 125.14209452120562, - "latitude": 46.55921686479333, - "height": 5.557543680589247 - } - ] - }, - { - "id": "197ee65dac76a522", - "label": "鍦伴潰鐐�1", - "longitude": 125.14335363213557, - "latitude": 46.55898182607255, - "height": 6.651683951645225, - "children": [ - { - "id": "197ee65dac772525", - "label": "绌轰腑鐐�2", - "longitude": 125.14208232214659, - "latitude": 46.559179705774746, - "height": 7.425743074154034 - } - ] - }, - { - "id": "197ee65dac712c69", - "label": "鍦伴潰鐐�2", - "longitude": 125.14335446603941, - "latitude": 46.55898169199969, - "height": 7.424957062075383, - "children": [ - { - "id": "197ee65dac772525", - "label": "绌轰腑鐐�2", - "longitude": 125.14208232214659, - "latitude": 46.559179705774746, - "height": 7.425743074154034 - } - ] - }, - { - "id": "197ee65dac7d469a", - "label": "鍦伴潰鐐�3", - "longitude": 125.14336581328187, - "latitude": 46.55898112552418, - "height": 7.385369522508276, - "children": [ - { - "id": "197ee65dac74b335", - "label": "绌轰腑鐐�3", - "longitude": 125.14460210993491, - "latitude": 46.55869709406983, - "height": 11.416007026601994 - } - ] - }, - { - "id": "197ee65dac7817ff", - "label": "鍦伴潰鐐�4", - "longitude": 125.14336674537108, - "latitude": 46.55898211835868, - "height": 6.48472072335647, - "children": [ - { - "id": "197ee65dac7602d7", - "label": "绌轰腑鐐�4", - "longitude": 125.14461900411601, - "latitude": 46.559233306964344, - "height": 6.485507501890941 - } - ] - }, - { - "id": "197ee65dac74500d", - "label": "鍦伴潰鐐�5", - "longitude": 125.14336684823117, - "latitude": 46.55898218335435, - "height": 5.556803725040882, - "children": [ - { - "id": "197ee65dac7d10f5", - "label": "绌轰腑鐐�5", - "longitude": 125.14464805019499, - "latitude": 46.559149450894154, - "height": 7.227587215704448 - } - ] - } -] - } -], + treeData:[], defaultProps: { children: 'children', label: 'label' @@ -442,13 +96,10 @@ }, methods:{ handleClose(){ - console.log("close") this.dialogVisible = false - this.$emit('close') }, flyToLocal(row){ console.log(row) - console.log(viewer) const position = Cesium.Cartesian3.fromDegrees(row.longitude,row.latitude, row.altitude); // 璁剧疆妯″瀷鏂瑰悜锛堝彲閫夛級 @@ -466,7 +117,7 @@ position: position, orientation: orientation, model: { - uri: "http://192.168.1.5:9000/tower/2025/07/01/tower_20250701145739A004.glb", // 鏇挎崲鎴愪綘鐨勬ā鍨嬭矾寰� + uri: row?.ardTowerModel.modelRoute, // 鏇挎崲鎴愪綘鐨勬ā鍨嬭矾寰� scale: 1, }, label: { @@ -514,29 +165,27 @@ type: 'warning' }) } - this.tableData = this.tableData.concat(arr) + this.tableData = this.treeData.concat(arr) } const dealTreeData =this.dealTee() - // this.treeData = dealTreeData - console.log(this.treeData) + this.treeData = dealTreeData }, dealTee(){ + console.log(this.tableData) return this.tableData.map(item => ({ ...item, label: item.deviceName, - children: [] })); }, deleteData(row){ // 鎵惧埌 id 涓� "1" 鐨勫厓绱犵储寮� const index = this.tableData.findIndex(item => item.id === row.id); - // 濡傛灉鎵惧埌浜嗭紝鍒犻櫎璇ュ厓绱� if (index !== -1) { this.tableData.splice(index, 1); } const dealTreeData = this.dealTee() - // this.treeData = dealTreeData + this.treeData = dealTreeData }, chooseModel(row){ this.deviceId = row.id @@ -548,24 +197,65 @@ receiveModel(obj){ //deal閫昏緫 console.log(obj) + let flightTemplateId =obj.modelObj.id + let deviceId = obj.deviceId this.dealTableTemplate(obj) + // let + obtainRealData(flightTemplateId,deviceId).then(res=>{ + console.log(res) + let treeDealData = this.transformFlightData(res.data?.coordinateSystemVoS || []) + console.log(treeDealData) + this.dealTreeMerge(obj,treeDealData) + // const aaa = this.rotateAllPoints(this.treeData || [],res.data.longitude,res.data.latitude,res.data.height) + this.drawConnectionsWithLabels(this.treeData) + }) // this.dealTreeMerge(obj) }, + //杩斿洖鏁版嵁杞崲鏍戠粨鏋� + transformFlightData(data) { + const result = []; + + data.forEach(item => { + // 鎵惧埌绗竴涓� groundPoint锛屼綔涓轰唬琛� + const groundPoint = item.groundPointVo?.[0]; + + // 鐢熸垚 children 鑺傜偣 + const children = groundPoint ? [{ + id: groundPoint.id, + label: groundPoint.targetName, + longitude: groundPoint.longitude, + latitude: groundPoint.latitude, + height: groundPoint.height + }] : []; + + // 鐢熸垚绌轰腑鐐� + result.push({ + id: item.id, + label: item.targetName, + longitude: item.longitude, + latitude: item.latitude, + height: item.altitude, + children + }); + }); + + return result; + }, dealTableTemplate(obj){ - const target = this.tableData.find(item => item.id === obj.deviceId) - if (target) { - this.$set(target, 'mode', obj.modelObj.name) // 鉁� Vue2 闇�瑕佷娇鐢� $set 浠ョ‘淇濆搷搴斿紡 + const targetTableData = this.tableData.find(item => item.id === obj.deviceId) + const targetTreeData = this.treeData.find(item => item.id === obj.deviceId) + if (targetTableData) { + this.$set(targetTableData, 'mode', obj.modelObj.templateName) // 鉁� Vue2 闇�瑕佷娇鐢� $set 浠ョ‘淇濆搷搴斿紡 + } + if (targetTreeData) { + this.$set(targetTreeData, 'mode', obj.modelObj.templateName) // 鉁� Vue2 闇�瑕佷娇鐢� $set 浠ョ‘淇濆搷搴斿紡 } }, - dealTreeMerge(obj){ - let newChildrenData= [ - { id: 100, label: '鏂板瓙鑺傜偣A',children:[{id: 1001,label: '鏂板瓙鑺傜偣A-1'}]}, - { id: 101, label: '鏂板瓙鑺傜偣B' } - ] + dealTreeMerge(obj,data){ this.treeData.forEach(item => { if(item.id == obj.deviceId) { // 鏇挎崲绗竴灞傛瘡涓妭鐐圭殑 children - this.$set(item, 'children', JSON.parse(JSON.stringify(newChildrenData))); + this.$set(item, 'children', JSON.parse(JSON.stringify(data))); } }); }, @@ -575,66 +265,67 @@ devices.forEach(device => { if (!Array.isArray(device.children)) return; - device.children.forEach(groundPoint => { - console.log(groundPoint) - const groundPos = Cesium.Cartesian3.fromDegrees( - groundPoint.longitude, - groundPoint.latitude, - groundPoint.height + device.children.forEach(airPoint => { + // 绌轰腑鐐逛綅缃� + const airPos = Cesium.Cartesian3.fromDegrees( + airPoint.longitude, + airPoint.latitude, + airPoint.height ); - // 鉁� 鍦伴潰鐐癸細娣诲姞瀹炰綋 + label + // 鉁� 娣诲姞绌轰腑鐐瑰疄浣撳拰 label viewer.entities.add({ - position: groundPos, + position: airPos, point: { pixelSize: 6, - color: Cesium.Color.BLUE + color: Cesium.Color.YELLOW }, label: { - text: groundPoint.label || '', + text: airPoint.label || '', font: '14px sans-serif', - fillColor: Cesium.Color.WHITE, + fillColor: Cesium.Color.YELLOW, style: Cesium.LabelStyle.FILL_AND_OUTLINE, - outlineWidth: 2, outlineColor: Cesium.Color.BLACK, + outlineWidth: 2, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, pixelOffset: new Cesium.Cartesian2(0, -12) } }); - // 閬嶅巻绌轰腑鐐� - if (Array.isArray(groundPoint.children)) { - groundPoint.children.forEach(airPoint => { - console.log(airPos) - const airPos = Cesium.Cartesian3.fromDegrees( - airPoint.longitude, - airPoint.latitude, - airPoint.height + airPoints.push(airPos); + + // 閬嶅巻鍦伴潰鐐癸紙瀛愰」锛� + if (Array.isArray(airPoint.children)) { + airPoint.children.forEach(groundPoint => { + const groundPos = Cesium.Cartesian3.fromDegrees( + groundPoint.longitude, + groundPoint.latitude, + groundPoint.height ); - // 鉁� 绌轰腑鐐癸細娣诲姞瀹炰綋 + label + // 鉁� 娣诲姞鍦伴潰鐐瑰疄浣撳拰 label viewer.entities.add({ - position: airPos, + position: groundPos, point: { pixelSize: 6, - color: Cesium.Color.YELLOW + color: Cesium.Color.BLUE }, label: { - text: airPoint.label || '', + text: groundPoint.label || '', font: '14px sans-serif', - fillColor: Cesium.Color.YELLOW, + fillColor: Cesium.Color.WHITE, style: Cesium.LabelStyle.FILL_AND_OUTLINE, - outlineWidth: 2, outlineColor: Cesium.Color.BLACK, + outlineWidth: 2, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, pixelOffset: new Cesium.Cartesian2(0, -12) } }); - // 鉁� 鍦伴潰鐐� 鉃� 绌轰腑鐐� 钃濊壊铏氱嚎 + // 鉁� 钃濊壊铏氱嚎杩炴帴锛氱┖涓偣 鉃� 鍦伴潰鐐� viewer.entities.add({ polyline: { - positions: [groundPos, airPos], + positions: [airPos, groundPos], width: 2, material: new Cesium.PolylineDashMaterialProperty({ color: Cesium.Color.BLUE, @@ -642,14 +333,12 @@ }) } }); - - airPoints.push(airPos); }); } }); }); - // 鉁� 鎵�鏈夌┖涓偣 鉃� 榛勮壊瀹炵嚎杩炴帴 + // 鉁� 榛勮壊瀹炵嚎杩炴帴鎵�鏈夌┖涓偣 if (airPoints.length > 1) { viewer.entities.add({ polyline: { @@ -660,8 +349,57 @@ }); } }, - draw(){ - this.drawConnectionsWithLabels(this.treeData) + rotateAllPoints(dataList,towerLongitude,towerLatitude,towerhHight) { + return dataList.map(item => { + console.log(item) + console.log(towerLongitude) + console.log(towerLatitude) + console.log(towerhHight) + const groundPoint = Cesium.Cartesian3.fromDegrees(item.longitude, item.latitude, item.height); + const towerPoint = Cesium.Cartesian3.fromDegrees(towerLongitude, towerLatitude, towerhHight); + let rotationAngle = Cesium.Math.toRadians(135) + // 鏃嬭浆鍦伴潰鐐规湰韬紙浼氬彉锛屼絾缁曡嚜韬棆杞笉浼氱Щ鍔級 + const newGroundPoint = this.rotateAroundPoint( groundPoint,towerPoint, rotationAngle); + const newGroundCarto = Cesium.Cartographic.fromCartesian(newGroundPoint); + const newGround = { + ...item, + longitude: Cesium.Math.toDegrees(newGroundCarto.longitude), + latitude: Cesium.Math.toDegrees(newGroundCarto.latitude), + height: newGroundCarto.height + }; + console.log(newGround) + // 澶勭悊瀛愮┖涓偣 + newGround.children = item.children.map(child => { + const airPoint = Cesium.Cartesian3.fromDegrees(child.longitude, child.latitude, child.height); + const rotatedAirPoint = this.rotateAroundPoint( airPoint,towerPoint, rotationAngle); + const rotatedAirCarto = Cesium.Cartographic.fromCartesian(rotatedAirPoint); + + return { + ...child, + longitude: Cesium.Math.toDegrees(rotatedAirCarto.longitude), + latitude: Cesium.Math.toDegrees(rotatedAirCarto.latitude), + height: rotatedAirCarto.height + }; + }); + + return newGround; + }); + }, + //聽璁$畻鐐笰缁曠偣B閫嗘椂閽堟棆杞寚瀹氳搴﹀悗鐨勬柊浣嶇疆 + // 绌轰腑鐐规垨鑰呭湴闈㈢偣绗涘崱灏斿潗鏍� 濉旂殑绗涘崱灏斿潗鏍� 濉旂殑鏈濆悜鍊� + rotateAroundPoint(startPoint,pivotPoint,rotationAngle) { + //聽鍒涘缓涓�涓粠B鐐瑰埌鏈湴鍧愭爣绯荤殑杞崲鐭╅樀锛堜笢鏂瑰悜涓篨杞达紝鍖楁柟鍚戜负Y杞达紝鍨傜洿鏂瑰悜涓篫杞达級 + const transformationMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(pivotPoint); + //聽鑾峰彇涓栫晫鍧愭爣绯诲埌鏈湴鍧愭爣绯荤殑杞崲鐭╅樀 + const inverseTransformationMatrix = Cesium.Matrix4.inverse(transformationMatrix,new Cesium.Matrix4()); + //聽灏咥鐐硅浆鎹㈠埌灞�閮ㄥ潗鏍囩郴涓� + const localStartPoint = Cesium.Matrix4.multiplyByPoint(inverseTransformationMatrix, startPoint,new Cesium.Cartesian3()); + //聽璁$畻A鐐瑰湪灞�閮ㄥ潗鏍囩郴涓�嗘椂閽堟棆杞寚瀹氳搴﹀悗鐨勬柊浣嶇疆 + const rotatedX = localStartPoint.x * Math.cos(rotationAngle) + localStartPoint.y * Math.sin(rotationAngle); + const rotatedY = localStartPoint.y * Math.cos(rotationAngle) - localStartPoint.x * Math.sin(rotationAngle); + const rotatedZ = localStartPoint.z; //聽Z杞村潗鏍囦繚鎸佷笉鍙� + //聽灏嗘棆杞悗鐨勫眬閮ㄥ潗鏍囪浆鎹㈠洖涓栫晫鍧愭爣绯� + return Cesium.Matrix4.multiplyByPoint(transformationMatrix,聽new聽Cesium.Cartesian3(rotatedX,聽rotatedY,聽rotatedZ),聽new聽Cesium.Cartesian3()); } } } -- Gitblit v1.9.3