From 0efcb9f12301633ffe5c77a97cef585e2cc39e73 Mon Sep 17 00:00:00 2001 From: jihongshun <1151753686@qq.com> Date: 星期五, 01 八月 2025 13:21:25 +0800 Subject: [PATCH] 偏移算法优化 --- src/views/system/project/components/addPorjectDialog.vue | 48 ++++++++++++++++++++---------------------------- 1 files changed, 20 insertions(+), 28 deletions(-) diff --git a/src/views/system/project/components/addPorjectDialog.vue b/src/views/system/project/components/addPorjectDialog.vue index 661d048..ee57820 100644 --- a/src/views/system/project/components/addPorjectDialog.vue +++ b/src/views/system/project/components/addPorjectDialog.vue @@ -71,7 +71,7 @@ import chooseDeviceDialog from './chooseDeviceDialog.vue'; import chooseModelDialog from './chooseModelDialog.vue'; import { obtainRealData ,buildKmz} from "@/api/system/template" - +let rotationAngle = Cesium.Math.toRadians(0) export default{ components: { CesiumMap, @@ -99,9 +99,9 @@ this.$emit('close') }, flyToLocal(row){ - console.log(row) const position = Cesium.Cartesian3.fromDegrees(row.longitude,row.latitude, row.deviceHeight); - + // rotationAngle = Cesium.Math.toRadians(row.face) || Cesium.Math.toRadians(0) + rotationAngle = Cesium.Math.toRadians(row.face) || Cesium.Math.toRadians(0) // 璁剧疆妯″瀷鏂瑰悜锛堝彲閫夛級 const heading = Cesium.Math.toRadians(row.face); // 鏈濅笢鍗楁柟鍚� const pitch = 0; @@ -196,7 +196,6 @@ }, receiveModel(obj){ //deal閫昏緫 - console.log(obj) let flightTemplateId =obj.modelObj.id let deviceId = obj.deviceId this.dealTableTemplate(obj) @@ -204,10 +203,9 @@ 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.rotateAllPoints(this.treeData || [],res.data.longitude,res.data.latitude,res.data.height) + this.drawConnectionsWithLabels(this.treeData) }) // this.dealTreeMerge(obj) }, @@ -261,10 +259,8 @@ }, drawConnectionsWithLabels(devices) { const airPoints = []; - devices.forEach(device => { if (!Array.isArray(device.children)) return; - device.children.forEach(airPoint => { // 绌轰腑鐐逛綅缃� const airPos = Cesium.Cartesian3.fromDegrees( @@ -351,21 +347,9 @@ }, 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) // 澶勭悊瀛愮┖涓偣 @@ -373,13 +357,20 @@ 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 - }; + child.longitude = Cesium.Math.toDegrees(rotatedAirCarto.longitude) + child.latitude = Cesium.Math.toDegrees(rotatedAirCarto.latitude) + child.height = rotatedAirCarto.height + child.children = child.children.map(sonChild => { + const groundPoint = Cesium.Cartesian3.fromDegrees(sonChild.longitude, sonChild.latitude, sonChild.height); + const newGroundPoint = this.rotateAroundPoint( groundPoint,towerPoint, rotationAngle); + const newGroundCarto = Cesium.Cartographic.fromCartesian(newGroundPoint); + return { + ...sonChild, + longitude: Cesium.Math.toDegrees(newGroundCarto.longitude), + latitude: Cesium.Math.toDegrees(newGroundCarto.latitude), + height: newGroundCarto.height + }; + }); }); return newGround; @@ -388,6 +379,7 @@ //聽璁$畻鐐笰缁曠偣B閫嗘椂閽堟棆杞寚瀹氳搴﹀悗鐨勬柊浣嶇疆 // 绌轰腑鐐规垨鑰呭湴闈㈢偣绗涘崱灏斿潗鏍� 濉旂殑绗涘崱灏斿潗鏍� 濉旂殑鏈濆悜鍊� rotateAroundPoint(startPoint,pivotPoint,rotationAngle) { + console.log(rotationAngle) //聽鍒涘缓涓�涓粠B鐐瑰埌鏈湴鍧愭爣绯荤殑杞崲鐭╅樀锛堜笢鏂瑰悜涓篨杞达紝鍖楁柟鍚戜负Y杞达紝鍨傜洿鏂瑰悜涓篫杞达級 const transformationMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(pivotPoint); //聽鑾峰彇涓栫晫鍧愭爣绯诲埌鏈湴鍧愭爣绯荤殑杞崲鐭╅樀 -- Gitblit v1.9.3