From c110295e9d7e87ec5012e37ad5ba2b38f745ccd3 Mon Sep 17 00:00:00 2001 From: jihongshun <1151753686@qq.com> Date: 星期五, 15 八月 2025 15:40:08 +0800 Subject: [PATCH] 优化线的逻辑 --- src/utils/components/init-map.vue | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 111 insertions(+), 6 deletions(-) diff --git a/src/utils/components/init-map.vue b/src/utils/components/init-map.vue index b80ec6c..09fcf3b 100644 --- a/src/utils/components/init-map.vue +++ b/src/utils/components/init-map.vue @@ -32,7 +32,7 @@ <div class="zoom-info"> <el-tag type="success">鍊嶇巼: {{ zoomRatio.toFixed(1) }}X</el-tag><br> <el-tag type="success">璺濈: {{ betweenDistance.toFixed(1) }}绫�</el-tag><br> - <el-tag type="success">P: {{ cameraP.toFixed(1) }} T: {{ cameraT.toFixed(1) }} </el-tag> + <el-tag type="success">P: {{ cameraP }} T: {{ cameraT }} </el-tag> </div> @@ -177,7 +177,10 @@ }, betweenDistance:0, cameraP:0.0, - cameraT:0.0 + cameraT:0.0, + pointGround: { lon: 0, lat: 0, height: 0 }, + pointFly: { lon: 0, lat: 0, height: 0 }, + rowData:null } }, mounted(){ @@ -320,6 +323,7 @@ creatPin(id, position, font, color, viewer) { let pinBuilder = new Cesium.PinBuilder(); let addPin = viewer.entities.getById(id); + console.log(addPin) if (addPin == undefined) { viewer.entities.add({ id: id, @@ -388,6 +392,7 @@ let data = { "altitude": Cesium.Cartographic.fromCartesian(tagert).height, "id": chooseId, + 'name':`绌轰腑鐐�${counter}`, "latitude": Cesium.Math.toDegrees(Cesium.Cartographic.fromCartesian(tagert).latitude), "longitude": Cesium.Math.toDegrees(Cesium.Cartographic.fromCartesian(tagert).longitude), } @@ -402,9 +407,20 @@ //濉旂殑璺濈鍜岃娴嬬偣鐨勮窛绂� console.log(_this.deviceData) const point1 = Cesium.Cartesian3.fromDegrees(0, 0, _this.deviceData?.modelHeight || 45); + _this.pointGround = { + lon:longitude, + lat:latitude, + height:height + } // const point1 = Cesium.Cartesian3.fromDegrees(0, 0, 45); const point2 = Cesium.Cartesian3.fromDegrees(Cesium.Math.toDegrees(Cesium.Cartographic.fromCartesian(tagert).longitude), Cesium.Math.toDegrees(Cesium.Cartographic.fromCartesian(tagert).latitude), Cesium.Cartographic.fromCartesian(tagert).height); - + _this.pointFly = { + lon:Cesium.Math.toDegrees(Cesium.Cartographic.fromCartesian(tagert).longitude), + lat:Cesium.Math.toDegrees(Cesium.Cartographic.fromCartesian(tagert).latitude), + height:Cesium.Cartographic.fromCartesian(tagert).height + } + _this.createDashedLine() + _this.createBillboard() // 璁$畻璺濈锛堝崟浣嶏細绫筹級 const distanceCalculate = Cesium.Cartesian3.distance(point1, point2) data.distance = distanceCalculate @@ -426,6 +442,48 @@ } console.log('鍙抽敭鐐瑰嚮鐩戝惉宸插仠姝�'); }, Cesium.ScreenSpaceEventType.RIGHT_CLICK); // 鐩戝惉鍙抽敭鐐瑰嚮 + }, + createDashedLine() { + this.lineEntity = viewerM.entities.add({ + polyline: { + positions: new Cesium.CallbackProperty(() => { + return Cesium.Cartesian3.fromDegreesArrayHeights([ + this.pointGround.lon, this.pointGround.lat, this.pointGround.height, + this.pointFly.lon, this.pointFly.lat, this.pointFly.height, + ]); + }, false), + width: 3, + material: new Cesium.PolylineDashMaterialProperty({ + color: Cesium.Color.RED, + }), + }, + }); + }, + createBillboard() { + // Billboard 涓偣璁$畻 + viewerM.entities.add({ + position: new Cesium.CallbackProperty(() => { + const midLon = (this.pointGround.lon + this.pointFly.lon) / 2; + const midLat = (this.pointGround.lat + this.pointFly.lat) / 2; + const midHeight = (this.pointGround.height + this.pointFly.height) / 2; + return Cesium.Cartesian3.fromDegrees(midLon, midLat, midHeight); + }, false), + label: { + text: new Cesium.CallbackProperty(() => { + return `璺濈: ${this.betweenDistance.toFixed(1)} m\nP: ${this.cameraP}\nT:${this.cameraT}`; + }, false), + font: "16px sans-serif", + fillColor: Cesium.Color.BLACK, + outlineColor: Cesium.Color.WHITE, + outlineWidth: 2, + style: Cesium.LabelStyle.FILL_AND_OUTLINE, + verticalOrigin: Cesium.VerticalOrigin.BOTTOM, + horizontalOrigin: Cesium.HorizontalOrigin.CENTER, + pixelOffset: new Cesium.Cartesian2(0, -20), // 鍚戜笂鍋忕Щ + showBackground: true, + backgroundColor: new Cesium.Color(1, 1, 1, 0.7), + }, + }); }, azimuthtwopoi(x1, y1, x2, y2) { let result; @@ -561,7 +619,18 @@ const gure = Cesium.Cartesian3.distance(point1, point2) this.betweenDistance = gure } - + if(this.rowData) { + this.pointGround = { + lon:this.rowData.longitude, + lat:this.rowData.latitude, + height:this.rowData.height + } + } + this.pointFly = { + lon: lon, + lat: lat, + height: height + } this.dealTree() } const key = event.key; @@ -760,7 +829,9 @@ label: `绌轰腑鐐�${idx}`, longitude: Cesium.Math.toDegrees(aerialPos.longitude), latitude: Cesium.Math.toDegrees(aerialPos.latitude), - height: aerialPos.height + height: aerialPos.height, + heading:Cesium.Math.toDegrees(viewerC.camera.heading), + pitch:Cesium.Math.toDegrees(viewerC.camera.pitch) } ] }; @@ -900,6 +971,7 @@ // viewer.scene.primitives.add(cameraVideo); let pmObj = {}; pmObj.id = data.id; + pmObj.name = data.name; pmObj.primitive = cameraVideo; viewerM.scene.primitives.add(cameraVideo); preVideoScopePrimitiveArrTie.push(pmObj); @@ -990,10 +1062,12 @@ ',' + roll.toFixed(1) + '\u00B0'; + console.log(heading) + this.cameraP = heading.toFixed(2) + this.cameraT = pitch.toFixed(2) document.getElementById('cammoveResultCon').innerHTML = camResult; // 璁$畻璺濈锛堝崟浣嶏細绫筹級 const distanceBetween = Cesium.Cartesian3.distance(point1, point2) - console.log(preVideoScopePrimitiveArrTie) preVideoScopePrimitiveArrTie.map((item)=>{ if(item.id == chooseId){ let obj = this.updateSZScope(Cesium.Math.toDegrees(position.longitude),Cesium.Math.toDegrees(position.latitude),position.height,heading,pitch,roll,this.zoomRatio,distanceBetween) @@ -1075,6 +1149,37 @@ Cesium.Cartesian3.normalize(directionLocal, directionLocal); return Math.asin(directionLocal.z); // z杞村悜涓� }, + DealVisualCone(data,node){ + this.rowData = data + console.log(data) + this.pointGround = { + lon:data.children[0].longitude, + lat:data.children[0].latitude, + height:data.children[0].height + } + this.pointFly = { + lon:data.longitude, + lat:data.latitude, + height:data.height + } + if(data.children && data.children?.length > 0) { + preVideoScopePrimitiveArrTie.map((item)=>{ + if(item.name != data.children[0].label){ + item.primitive.show = false + }else{ + item.primitive.show = true + } + }) + }else { + preVideoScopePrimitiveArrTie.map((item)=>{ + if(item.name != data.label){ + item.primitive.show = false + }else { + item.primitive.show = true + } + }) + } + } } } </script> -- Gitblit v1.9.3