From e0683e37cdd7dc99adf2af6521962c3f29d0f9b7 Mon Sep 17 00:00:00 2001 From: jihongshun <1151753686@qq.com> Date: 星期二, 08 七月 2025 17:09:34 +0800 Subject: [PATCH] 模板 && 项目页面 --- src/views/system/shootPoint/components/shootPointDialog.vue | 441 ++++++++++++------------------------------------------ 1 files changed, 102 insertions(+), 339 deletions(-) diff --git a/src/views/system/shootPoint/components/shootPointDialog.vue b/src/views/system/shootPoint/components/shootPointDialog.vue index 937466f..969c7c3 100644 --- a/src/views/system/shootPoint/components/shootPointDialog.vue +++ b/src/views/system/shootPoint/components/shootPointDialog.vue @@ -12,10 +12,10 @@ <div class="chooseModel"> <el-button type="primary" @click='chooseModel'>閫夋嫨妯″瀷</el-button> <div class="modelType"> - 妯″瀷鍚嶇О锛氭ā鍨嬪1 + 妯″瀷鍚嶇О锛歿{ templateName }} </div> <div> - 妯″瀷绫诲瀷锛氱數濉� + 妯″瀷绫诲瀷锛歿{ templateType }} </div> </div> <div class="modelTree"> @@ -34,7 +34,7 @@ </el-card> </el-col> <el-col :span="20"> - <InitMap v-if="showMap" @mergePoint="mergePoint" @renderData="renderData" :towerUrl="towerUrl"></InitMap> + <InitMap v-if="showMap" @mergePoint="mergePoint" :towerUrl="towerUrl"></InitMap> </el-col> </el-row> <span slot="footer" class="dialog-footer"> @@ -49,12 +49,11 @@ import CesiumMap from "../../../../utils/components/cesium-map.vue"; import InitMap from "../../../../utils/components/init-map.vue"; import ChooseModelDialog from './chooseModelDialog.vue'; -// const centerCartesian = Cesium.Cartesian3.fromDegrees(0,0, 236) -// const centerCartesian = Cesium.Cartesian3.fromDegrees(125.1949, 46.5143, 0) - let globalon = 125.1949 -let globalat = 46.5143 -const centerCartesian = Cesium.Cartesian3.fromDegrees(globalon,globalat , 236) - +import { addPoint} from "@/api/system/template" + let globalon = 0 +let globalat =0 +const centerCartesian = Cesium.Cartesian3.fromDegrees(globalon,globalat , 0) +let rotationAngle = Cesium.Math.toRadians(60) let relativeData export default{ name:'shootPointDialog', @@ -78,45 +77,14 @@ animationFrameId: null, showMap:false, towerUrl:null, - chooseModelId:null + chooseModelId:null, + templateName:null, + templateType:null } }, mounted(){ }, methods:{ - renderRelativePoints(viewer, data) { - const airPoints = []; - - data.forEach(item => { - const groundRel = item.relativePosition; - const groundPos = Cesium.Cartesian3.add( - centerCartesian, - new Cesium.Cartesian3(groundRel.x, groundRel.y, groundRel.z), - new Cesium.Cartesian3() - ); - this.addPoint(viewer, groundPos, Cesium.Color.BLUE, item.label); - - item.children?.forEach(child => { - const airRel = child.relativePosition; - const airPos = Cesium.Cartesian3.add( - centerCartesian, - new Cesium.Cartesian3(airRel.x, airRel.y, airRel.z), - new Cesium.Cartesian3() - ); - this.addPoint(viewer, airPos, Cesium.Color.YELLOW, child.label); - - // 鍦伴潰鐐瑰埌绌轰腑鐐圭敤铏氱嚎 - this.drawLine(viewer, [groundPos, airPos], Cesium.Color.GRAY, true); - - airPoints.push(airPos); - }); - }); - - // 绌轰腑鐐逛箣闂磋繛榛勭嚎 - if (airPoints.length > 1) { - this.drawLine(viewer, airPoints, Cesium.Color.YELLOW); - } - }, addPoint(viewer, position, color, label) { viewer.entities.add({ name: label, @@ -150,220 +118,6 @@ } }); }, - //绌洪棿鍧愭爣鍙嶆覆鏌� - renderData(viewerM){ - let data = [ - { - "id": "197ced8ed37d58af", - "label": "鍦伴潰鐐�0", - "longitude": 125.15396706149502, - "latitude": 46.5542193007498, - "height": 110.34582699579633, - "children": [ - { - "id": "197ced8ed37d12bf", - "label": "绌轰腑鐐�0", - "longitude": 125.15269101779384, - "latitude": 46.554404555297005, - "height": 110.34669117272557, - "relativePosition": { - "x": 147.6013223491609, - "y": -21.93333655036986, - "z": -75.59047747310251 - } - } - ], - "relativePosition": { - "x": 58.98418062273413, - "y": -66.05175063293427, - "z": -89.7526711942628 - } - }, - { - "id": "197ced8ed372ae58", - "label": "鍦伴潰鐐�1", - "longitude": 125.15396775899208, - "latitude": 46.55421205599431, - "height": 129.0598176992881, - "children": [ - { - "id": "197ced8ed3796b97", - "label": "绌轰腑鐐�1", - "longitude": 125.15267500755259, - "latitude": 46.55432990371885, - "height": 129.06068032390132, - "relativePosition": { - "x": 137.72684245044366, - "y": -5.778328162617981, - "z": -67.71026689186692 - } - } - ], - "relativePosition": { - "x": 51.19412293517962, - "y": -55.08268230734393, - "z": -76.7196572907269 - } - }, - { - "id": "197ced8ed373aacd", - "label": "鍦伴潰鐐�2", - "longitude": 125.15398622045456, - "latitude": 46.55420774953827, - "height": 147.7039314240401, - "children": [ - { - "id": "197ced8ed3744bed", - "label": "绌轰腑鐐�2", - "longitude": 125.15268854335208, - "latitude": 46.5542961263164, - "height": 147.70478259476405, - "relativePosition": { - "x": 127.92680113529786, - "y": 6.335606334730983, - "z": -56.756238551810384 - } - } - ], - "relativePosition": { - "x": 42.45445924857631, - "y": -45.13116115285084, - "z": -63.51276256516576 - } - }, - { - "id": "id_v5g7eyc8", - "label": "鍦伴潰鐐�2-鍔犻珮", - "longitude": 125.15398622045456, - "latitude": 46.55420774953827, - "height": 147.7039314240401, - "children": [ - { - "id": "id_6w8bt6y5", - "label": "绌轰腑鐐�2-鍔犻珮", - "longitude": 125.15268854335208, - "latitude": 46.5542961263164, - "height": 197.70478259476405, - "relativePosition": { - "x": 108.13033775659278, - "y": 34.448136328253895, - "z": -20.454920462332666 - } - } - ], - "relativePosition": { - "x": 42.45445924857631, - "y": -45.13116115285084, - "z": -63.51276256516576 - } - }, - { - "id": "id_wztyoy7w", - "label": "鍦伴潰鐐�3", - "longitude": 125.15421307297069, - "latitude": 46.55421685854876, - "height": 148.48833812454288, - "children": [ - { - "id": "id_cu78b9f1", - "label": "绌轰腑鐐�3-鍔犻珮", - "longitude": 125.15548763490776, - "latitude": 46.55440688016316, - "height": 198.48919020619783, - "relativePosition": { - "x": -62.53922047605738, - "y": -96.01450884295627, - "z": -11.418861056677997 - } - } - ], - "relativePosition": { - "x": 28.343377863056958, - "y": -55.307947248686105, - "z": -62.246930407360196 - } - }, - { - "id": "197ced8ed37d0c3c", - "label": "鍦伴潰鐐�3", - "longitude": 125.15421307297069, - "latitude": 46.55421685854876, - "height": 148.48833812454288, - "children": [ - { - "id": "197ced8ed376225d", - "label": "绌轰腑鐐�3", - "longitude": 125.15548763490776, - "latitude": 46.55440688016316, - "height": 148.48919020619783, - "relativePosition": { - "x": -42.741424133535475, - "y": -124.12601430807263, - "z": -47.72024560905993 - } - } - ], - "relativePosition": { - "x": 28.343377863056958, - "y": -55.307947248686105, - "z": -62.246930407360196 - } - }, - { - "id": "197ced8ed378f22b", - "label": "鍦伴潰鐐�4", - "longitude": 125.15423241198647, - "latitude": 46.55421195661101, - "height": 129.07723014528972, - "children": [ - { - "id": "197ced8ed37bbaff", - "label": "绌轰腑鐐�4", - "longitude": 125.1555253737729, - "latitude": 46.55432870085922, - "height": 129.07809286219634, - "relativePosition": { - "x": -41.05480555212125, - "y": -131.5471526850015, - "z": -67.78957635723054 - } - } - ], - "relativePosition": { - "x": 34.58874865854159, - "y": -66.75211867084727, - "z": -76.71461268886924 - } - }, - { - "id": "197ced8ed372f8ad", - "label": "鍦伴潰鐐�5", - "longitude": 125.15423571155253, - "latitude": 46.55422768619577, - "height": 111.12748104722147, - "children": [ - { - "id": "197ced8ed373e993", - "label": "绌轰腑鐐�5", - "longitude": 125.15551594222936, - "latitude": 46.554398406019274, - "height": 112.12216624922397, - "relativePosition": { - "x": -30.5103326481767, - "y": -145.26342066843063, - "z": -74.77150713000447 - } - } - ], - "relativePosition": { - "x": 42.219932773150504, - "y": -78.02784454869106, - "z": -88.54415378533304 - } - } -] - this.renderRelativePoints(viewerM,data) - }, handleClose(){ this.dialogVisible = false }, @@ -375,6 +129,39 @@ }, cancel(){ this.showModel = false + }, + rotateAllPoints(dataList) { + return dataList.map(item => { + console.log(item) + const groundPoint = Cesium.Cartesian3.fromDegrees(item.longitude, item.latitude, item.height); + const towerPoint = Cesium.Cartesian3.fromDegrees(0, 0, 0); + + // 鏃嬭浆鍦伴潰鐐规湰韬紙浼氬彉锛屼絾缁曡嚜韬棆杞笉浼氱Щ鍔級 + 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; + }); }, mergePoint(arr,mergeNumber,viewer){ this.treeData = arr @@ -415,8 +202,6 @@ }) } console.log(this.treeData) - // this.conversionPosition() - this.dealData() }, insertRaisedPoints(data, centerLon, centerLat, centerHeight, radius = 130) { const center = Cesium.Cartesian3.fromDegrees(centerLon, centerLat, centerHeight); @@ -564,6 +349,8 @@ }, getRowData(row){ console.log(row) + this.templateName = row.modelName + this.templateType = row.modelType this.chooseModelId = row.id this.showMap =false this.$nextTick(()=>{ @@ -603,88 +390,64 @@ handleDrop (draggingNode, dropNode, dropType, ev) { console.log('鎷栨嫿瀹屾垚', { draggingNode, dropNode, dropType }) }, - toRelativePosition(lon, lat, height, centerCartesian) { - const worldPos = Cesium.Cartesian3.fromDegrees(lon, lat, height); - const relative = new Cesium.Cartesian3(); - Cesium.Cartesian3.subtract(worldPos, centerCartesian, relative); - return relative; - }, - wgs84ToCartesian(longitude, latitude, height) { - return Cesium.Cartesian3.fromDegrees(longitude, latitude, height); - }, - getOffsetFromTower(lon, lat, height, tower) { - const point = this.wgs84ToCartesian(lon, lat, height); - const towerPoint = this.wgs84ToCartesian(tower.longitude, tower.latitude, tower.height); - - const offset = Cesium.Cartesian3.subtract(point, towerPoint, new Cesium.Cartesian3()); - return { - x: offset.x, - y: offset.y, - z: offset.z - }; - }, - dealData(){ - const rawData = this.treeData - let tower ={ - longitude:globalon, - latitude:globalat, - height:0 - } - relativeData= rawData.forEach(item => { - item.offset = this.getOffsetFromTower(item.longitude, item.latitude, item.height, tower); - - item.children?.forEach(child => { - child.offset = this.getOffsetFromTower(child.longitude, child.latitude, child.height, tower); - }); - }) - console.log(relativeData) - }, - // conversionPosition(){ - // const rawData = this.treeData - // // const centerCartesian = Cesium.Cartesian3.fromDegrees(0,0, 236); - // const centerCartesian = Cesium.Cartesian3.fromDegrees(globalon, globalat, 236); - // relativeData= rawData.map(ground => { - // const relativeGround = this.toRelativePosition( - // ground.longitude, - // ground.latitude, - // ground.height, - // centerCartesian - // ); - - // const children = ground.children?.map(child => { - // const relativeChild = this.toRelativePosition( - // child.longitude, - // child.latitude, - // child.height, - // centerCartesian - // ); - // return { - // ...child, - // relativePosition: { - // x: relativeChild.x, - // y: relativeChild.y, - // z: relativeChild.z, - // } - // }; - // }); - - // return { - // ...ground, - // relativePosition: { - // x: relativeGround.x, - // y: relativeGround.y, - // z: relativeGround.z, - // }, - // children - // }; - // }); - // console.log(relativeData) - // }, submit(){ // this.dialogVisible = false - this.$emit('close') - console.log(this.chooseModelId) - console.log(relativeData) + // const dealArr = this.submitDealData() + const transformed = this.treeData.map((groundPoint, index) => { + const pointNumber = index + 1; + const airPoints = groundPoint.children.map(child => ({ + altitude: child.height, + flightTemplateId: "", + latitude: child.latitude, + longitude: child.longitude, + pointNumber: 1, // 鍙牴鎹渶瑕佹敼涓� child 缂栧彿 + targetName:child.label + })); + return { + ardAirPointLs: airPoints, + ardGroundPoint: { + flightTemplateId: "", + height: groundPoint.height, + latitude: groundPoint.latitude, + longitude: groundPoint.longitude, + pointNumber: 1, + targetName: groundPoint.label + }, + pointNumber: pointNumber + }; + }); + let parmas = { + modelId:this.chooseModelId, + ard3DCoordinateSystemLs:transformed + } + addPoint(parmas).then(res=>{ + console.log(res) + if(res.code == 200) { + this.$message({ + message: '鏂板妯℃澘鎴愬姛', + type: 'success' + }) + this.$emit('on-submit') + this.$emit('close') + } + }) + console.log(parmas) + }, + //聽璁$畻鐐笰缁曠偣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