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/shootPoint/index.vue | 14 src/api/system/template.js | 24 + src/views/system/shootPoint/components/shootPointDialog.vue | 95 +++++ src/views/system/project/components/chooseModelDialog.vue | 46 +- src/utils/components/init-map.vue | 10 src/views/system/project/components/addPorjectDialog.vue | 646 ++++++--------------------------------- src/views/system/model/components/modelDialog.vue | 50 +- src/views/system/device/components/deviceDialog.vue | 21 src/views/system/project/index.vue | 2 9 files changed, 298 insertions(+), 610 deletions(-) diff --git a/src/api/system/template.js b/src/api/system/template.js index 9d0387a..9354c60 100644 --- a/src/api/system/template.js +++ b/src/api/system/template.js @@ -8,3 +8,27 @@ data: data }); } + +// 鏌ヨ鍙傛暟璇︾粏 +export function getPointInfo(id) { + return request({ + url: '/tower/point/' + id, + method: 'get' + }); +} + +// 鏍规嵁璁惧di鑾峰彇璁惧鐨勯琛岃埅绾挎ā鐗� +export function obtainRealData(flightTemplateId, deviceId) { + return request({ + url: `/tower/route/getTrueBearing/${flightTemplateId}/${deviceId}`, + method: 'get' + }); +} + +// 鏍规嵁璁惧di鑾峰彇璁惧鐨勯琛岃埅绾挎ā鐗� +export function flyDataInfo(deviceId) { + return request({ + url: '/tower/point/device/' + deviceId, + method: 'get' + }); +} diff --git a/src/utils/components/init-map.vue b/src/utils/components/init-map.vue index bbc8421..3aebbca 100644 --- a/src/utils/components/init-map.vue +++ b/src/utils/components/init-map.vue @@ -36,8 +36,8 @@ let viewerM; let viewerC; let counter = 0; - let globalon = 0 -let globalat = 0 +let globalon = 0 +let globalat = 0 let pois = [globalon, globalat,0] // let pois = [0, 0,0] @@ -78,10 +78,10 @@ } }, mounted(){ - console.log('111111111111111111') this.initCesium(); }, beforeDestroy() { + counter = 0 this.removeKeyboardEvents(); if (this.animationFrameId) cancelAnimationFrame(this.animationFrameId); if (viewerC) viewerC.destroy(); @@ -90,6 +90,8 @@ initCesium() { viewerM = this.initViewer(this.$refs.cesiumContainer.id); viewerC = this.initViewer(this.$refs.cesiumCamera.id); + window.viewerM = viewerM; + window.viewerC = viewerC; // 馃挕 鍦ㄨ繖閲岀户缁皟鐢� measure.js / camera.js / botton.js 绛夐�昏緫 // 渚嬪锛歸indow.registerMeasureTools(viewerM) setTimeout(()=>{ @@ -147,7 +149,7 @@ // // 鍏抽棴鍏夌収鏁堟灉 // viewer.scene.globe.enableLighting = false; // 鍏抽棴鍏夌収鏁堟灉 - window.viewer = viewer; + // viewer.imageryLayers.add(bdtvectoranoimagery); viewer._cesiumWidget._creditContainer.style.display="none"; return viewer; diff --git a/src/views/system/device/components/deviceDialog.vue b/src/views/system/device/components/deviceDialog.vue index fdf3e42..ee4c403 100644 --- a/src/views/system/device/components/deviceDialog.vue +++ b/src/views/system/device/components/deviceDialog.vue @@ -74,19 +74,25 @@ this.resetForm("form"); if (ids) { + this.getModel() // 缂栬緫 this.$api.detail('/tower/device', ids).then(res => { + console.log(res) this.form = res.data this.open = true this.$nextTick(() => { + console.log(this.form) this.$refs.cesiumMapSelctPoint.showPickPoint({ longitude: +this.form.longitude, latitude: +this.form.latitude, - altitude: +this.form.altitude, + height: +this.form.height, }) + console.log(this.modelListData) let url = this.modelListData.filter(item=>item.id == this.form.modelId)[0].modelRoute + console.log(url) this.modelUrl = url - const position = Cesium.Cartesian3.fromDegrees(this.form.longitude, this.form.latitude, this.form.altitude); + const position = Cesium.Cartesian3.fromDegrees(this.form.longitude, this.form.latitude, this.form.height); + console.log(position) // 璁剧疆妯″瀷鏂瑰悜锛堝彲閫夛級 let model = viewer.entities.getById("MyModel"); const heading = Cesium.Math.toRadians(this.form.face); // 鏈濅笢鍗楁柟鍚� @@ -122,19 +128,20 @@ } }, handleSelectAddress(data) { + console.log(data) this.$set(this.form, 'longitude', data.longitude) this.$set(this.form, 'latitude', data.latitude) - this.$set(this.form, 'altitude', data.altitude) + this.$set(this.form, 'height', data.altitude) this.$refs.form.validateField('longitude') this.$refs.form.validateField('latitude') - this.$refs.form.validateField('altitude') + this.$refs.form.validateField('height') }, submitForm() { this.$refs["form"].validate(valid => { console.log(this.form) this.form.longitude = Number(this.form.longitude) this.form.latitude = Number(this.form.latitude) - this.form.altitude = Number(this.form.altitude) + this.form.height = Number(this.form.height) this.form.face = Number(this.form.face) if (valid) { this.$api.save('tower/device/', 'id', Object.assign({}, this.form)).then(res => { @@ -178,13 +185,13 @@ this.$message.error("璇疯緭鍏ョ含搴�"); return; } - if (!this.form.altitude) { + if (!this.form.height) { this.$message.error("璇疯緭鍏ラ珮搴�"); return; } //鍔ㄦ�佺粡绾害鏈濆悜 鍔犺浇妯″瀷浣嶇疆棰勮 // const position = Cesium.Cartesian3.fromDegrees(0, 0, 0); - const position = Cesium.Cartesian3.fromDegrees(this.form.longitude, this.form.latitude, this.form.altitude); + const position = Cesium.Cartesian3.fromDegrees(this.form.longitude, this.form.latitude, this.form.height); // 璁剧疆妯″瀷鏂瑰悜锛堝彲閫夛級 // const heading = Cesium.Math.toRadians(135); // 鏈濅笢鍗楁柟鍚� let model = viewer.entities.getById("MyModel"); diff --git a/src/views/system/model/components/modelDialog.vue b/src/views/system/model/components/modelDialog.vue index e9fefad..ab34088 100644 --- a/src/views/system/model/components/modelDialog.vue +++ b/src/views/system/model/components/modelDialog.vue @@ -13,6 +13,9 @@ :value="dict.value"></el-option> </el-select> </el-form-item> + <el-form-item label="妯″瀷楂樺害" prop="modelHeight"> + <el-input v-model="form.modelHeight" placeholder="璇疯緭鍏ユā鍨嬮珮搴�" /> + </el-form-item> <el-form-item label="鏂囦欢涓婁紶" prop="modelRoute"> <el-upload class="upload-demo" action="" :auto-upload="false" accept=".glb" :on-change="getFile" :limit="1"> @@ -67,9 +70,9 @@ modelName: [ { required: true, message: '璇疯緭鍏ユā鍨嬪悕绉�', trigger: 'blur' } ], - deptId: [ - { required: true, message: '褰掑睘閮ㄩ棬' } // trigger鐩戝惉涓嶅埌 浣跨敤@input鍗曠嫭鏍¢獙vue-treeSelect琛ㄥ崟椤� - ] + modelHeight: [ + { required: true, message: '璇疯緭鍏ユā鍨嬪悕绉�', trigger: 'blur' } + ], }, // 閮ㄩ棬鏁版嵁 deptOptions: null, @@ -88,7 +91,7 @@ this.open = true this.$nextTick(() => { this.$refs.cesiumMapNoSelect.clearMap() - this.addModel() + this.addModel(this.form) }) }) } else { @@ -134,42 +137,33 @@ } }); }, - addModel(){ + addModel(row){ console.log(window) console.log(window.viewer) - // viewer.entities.add({ - // position: Cesium.Cartesian3.fromDegrees(0, 0, 0), - // model: { - // uri: "/Model/tower.glb", - // scale: 10000, - // minimumPixelSize: 50, - // }, - // }); - // const position = Cesium.Cartesian3.fromDegrees(139.745433, 35.658581, 0); const position = Cesium.Cartesian3.fromDegrees(0, 0, 0); // 璁剧疆妯″瀷鏂瑰悜锛堝彲閫夛級 - const heading = Cesium.Math.toRadians(135); // 鏈濅笢鍗楁柟鍚� + const heading = Cesium.Math.toRadians(0); // 鏈濅笢鍗楁柟鍚� const pitch = 0; const roll = 0; const orientation = Cesium.Transforms.headingPitchRollQuaternion( position, new Cesium.HeadingPitchRoll(heading, pitch, roll) ); + if(row){ + const entity = viewer.entities.add({ + name: "MyModel", + position: position, + orientation: orientation, + model: { + uri: row.modelRoute, // 鏇挎崲鎴愪綘鐨勬ā鍨嬭矾寰� + }, + }); + console.log(entity) - // 鍔犺浇 glTF 妯″瀷 - const entity = viewer.entities.add({ - name: "MyModel", - position: position, - orientation: orientation, - model: { - uri: "/Model/tower.glb", // 鏇挎崲鎴愪綘鐨勬ā鍨嬭矾寰� - }, - }); - console.log(entity) - - // 椋炶鍒版ā鍨嬩綅缃� - viewer.flyTo(entity) + // 椋炶鍒版ā鍨嬩綅缃� + viewer.flyTo(entity) + } }, cancel() { this.$refs.cesiumMapNoSelect.clearMap() diff --git a/src/views/system/project/components/addPorjectDialog.vue b/src/views/system/project/components/addPorjectDialog.vue index fa4de99..bed4cfe 100644 --- a/src/views/system/project/components/addPorjectDialog.vue +++ b/src/views/system/project/components/addPorjectDialog.vue @@ -10,12 +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-button @click="test"> 杞崲</el-button> - <el-button @click="huixian"> 0.0</el-button> <el-table :data="tableData" max-height = '180' @@ -75,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, @@ -85,257 +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": "197f211797aa9f32", - "label": "鍦伴潰鐐�0", - "longitude": 125.01254690233337, - "latitude": 46.408037041988585, - "height": 5.517266389025914, - "children": [ - { - "id": "197f211797afb196", - "label": "绌轰腑鐐�0", - "longitude": 125.01240358310912, - "latitude": 46.40814584281285, - "height": 6.971525719304772 - } - ] - }, - { - "id": "197f211797af91d9", - "label": "鍦伴潰鐐�1", - "longitude": 125.01254808759698, - "latitude": 46.4080365594918, - "height": 7.385339183474696, - "children": [ - { - "id": "197f211797afdb9a", - "label": "绌轰腑鐐�1", - "longitude": 125.0125163640242, - "latitude": 46.407960727919516, - "height": 10.451384666363694 - } - ] - }, - { - "id": "197f211797afab31", - "label": "鍦伴潰鐐�2", - "longitude": 125.01255947706582, - "latitude": 46.408036885119245, - "height": 7.42469267651616, - "children": [ - { - "id": "197f211797a61300", - "label": "绌轰腑鐐�2", - "longitude": 125.0128655208287, - "latitude": 46.4080332165472, - "height": 14.51791089195843 - } - ] - }, - { - "id": "197f211797af21e7", - "label": "鍦伴潰鐐�3", - "longitude": 125.01256023273389, - "latitude": 46.408036999460684, - "height": 5.5171023712317435, - "children": [ - { - "id": "197f211797a19b34", - "label": "绌轰腑鐐�3", - "longitude": 125.01277085845463, - "latitude": 46.40822397536244, - "height": 16.06139535507995 - } - ] - } - ] - }, - { - "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": "197f2157b83d1d1e", - "label": "鍦伴潰鐐�0", - "longitude": 124.98495046473204, - "latitude": 46.60913764437918, - "height": 5.517192953851729, - "children": [ - { - "id": "197f2157b833e7e6", - "label": "绌轰腑鐐�0", - "longitude": 124.98487290823232, - "latitude": 46.609159110536, - "height": 8.492315413669576 - } - ] - }, - { - "id": "197f2157b83cb37c", - "label": "鍦伴潰鐐�1", - "longitude": 124.98495132002881, - "latitude": 46.609137518901555, - "height": 7.424720940488529, - "children": [ - { - "id": "197f2157b83dbf31", - "label": "绌轰腑鐐�1", - "longitude": 124.984847808066, - "latitude": 46.60911367086078, - "height": 8.37839897370324 - } - ] - }, - { - "id": "197f2157b831259d", - "label": "鍦伴潰鐐�2", - "longitude": 124.98496295996078, - "latitude": 46.60913752946039, - "height": 7.424330357264399, - "children": [ - { - "id": "197f2157b837245b", - "label": "绌轰腑鐐�2", - "longitude": 124.98502199892675, - "latitude": 46.60913926099941, - "height": 12.416325107963392 - } - ] - }, - { - "id": "197f2157b83112ee", - "label": "鍦伴潰鐐�3", - "longitude": 124.9849638899571, - "latitude": 46.60913769557282, - "height": 5.51721178277007, - "children": [ - { - "id": "197f2157b8349c7d", - "label": "绌轰腑鐐�3", - "longitude": 124.98502033157477, - "latitude": 46.609152323278046, - "height": 4.804689162058357 - } - ] - } - ] - }, - { - "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": "197f21d1d1a28cf6", - "label": "鍦伴潰鐐�0", - "longitude": 125.14335344922452, - "latitude": 46.558982037049276, - "height": 5.556334669315725, - "children": [ - { - "id": "197f21d1d1adcbe6", - "label": "绌轰腑鐐�0", - "longitude": 125.14330233595797, - "latitude": 46.55904743869546, - "height": 6.468726016875199 - } - ] - }, - { - "id": "197f21d1d1a4aa12", - "label": "鍦伴潰鐐�1", - "longitude": 125.14335458905991, - "latitude": 46.558981268478746, - "height": 7.384477227891685, - "children": [ - { - "id": "197f21d1d1a846ae", - "label": "绌轰腑鐐�1", - "longitude": 125.14298096389273, - "latitude": 46.558969173376134, - "height": 22.10867400719622 - } - ] - }, - { - "id": "197f21d1d1a52190", - "label": "鍦伴潰鐐�2", - "longitude": 125.14336589537841, - "latitude": 46.558981709304724, - "height": 7.424676991507425, - "children": [ - { - "id": "197f21d1d1a6a4fe", - "label": "绌轰腑鐐�2", - "longitude": 125.14339720378332, - "latitude": 46.5590446327473, - "height": 16.720685909327106 - } - ] - }, - { - "id": "197f21d1d1a272b1", - "label": "鍦伴潰鐐�3", - "longitude": 125.14336689453488, - "latitude": 46.558981604123645, - "height": 5.516875737104807, - "children": [ - { - "id": "197f21d1d1af7638", - "label": "绌轰腑鐐�3", - "longitude": 125.14397230855407, - "latitude": 46.55882377669704, - "height": 45.87173852318548 - } - ] - } -] - } -], + treeData:[], defaultProps: { children: 'children', label: 'label' @@ -348,15 +96,11 @@ }, 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); - const position = Cesium.Cartesian3.fromDegrees(0,0,0); + const position = Cesium.Cartesian3.fromDegrees(row.longitude,row.latitude, row.altitude); // 璁剧疆妯″瀷鏂瑰悜锛堝彲閫夛級 const heading = Cesium.Math.toRadians(row.face); // 鏈濅笢鍗楁柟鍚� @@ -373,7 +117,7 @@ position: position, orientation: orientation, model: { - uri: "http://192.168.1.5:9000/tower/2025/07/11/閾佸_20250711093701A001.glb", // 鏇挎崲鎴愪綘鐨勬ā鍨嬭矾寰� + uri: row?.ardTowerModel.modelRoute, // 鏇挎崲鎴愪綘鐨勬ā鍨嬭矾寰� scale: 1, }, label: { @@ -421,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 @@ -455,117 +197,67 @@ 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))); } }); - }, - drawConnectionsWithLabels1111(devices) { - const airPoints = []; - - 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 - ); - - // 鉁� 鍦伴潰鐐癸細娣诲姞瀹炰綋 + label - viewer.entities.add({ - position: groundPos, - point: { - pixelSize: 6, - color: Cesium.Color.BLUE - }, - label: { - text: groundPoint.label || '', - font: '14px sans-serif', - fillColor: Cesium.Color.WHITE, - style: Cesium.LabelStyle.FILL_AND_OUTLINE, - outlineWidth: 2, - outlineColor: Cesium.Color.BLACK, - 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 - ); - - // 鉁� 绌轰腑鐐癸細娣诲姞瀹炰綋 + label - viewer.entities.add({ - position: airPos, - point: { - pixelSize: 6, - color: Cesium.Color.YELLOW - }, - label: { - text: airPoint.label || '', - font: '14px sans-serif', - fillColor: Cesium.Color.YELLOW, - style: Cesium.LabelStyle.FILL_AND_OUTLINE, - outlineWidth: 2, - outlineColor: Cesium.Color.BLACK, - verticalOrigin: Cesium.VerticalOrigin.BOTTOM, - pixelOffset: new Cesium.Cartesian2(0, -12) - } - }); - - // 鉁� 鍦伴潰鐐� 鉃� 绌轰腑鐐� 钃濊壊铏氱嚎 - viewer.entities.add({ - polyline: { - positions: [groundPos, airPos], - width: 2, - material: new Cesium.PolylineDashMaterialProperty({ - color: Cesium.Color.BLUE, - dashLength: 8 - }) - } - }); - - airPoints.push(airPos); - }); - } - }); - }); - - // 鉁� 鎵�鏈夌┖涓偣 鉃� 榛勮壊瀹炵嚎杩炴帴 - if (airPoints.length > 1) { - viewer.entities.add({ - polyline: { - positions: airPoints, - width: 3, - material: Cesium.Color.YELLOW - } - }); - } }, drawConnectionsWithLabels(devices) { const airPoints = []; @@ -657,183 +349,57 @@ }); } }, - draw(){ - this.drawConnectionsWithLabels(this.treeData) - }, - test(){ - this.treeData = this.swapGroundAir(this.treeData); - }, - swapGroundAir(data) { - - return data.map(device => { - const newChildren = []; - - device.children.forEach(ground => { - const air = ground.children && ground.children[0]; - if (air) { - newChildren.push({ - ...air, - children: [ - { - ...ground, - children: undefined - } - ] - }); - } - }); - - return { - ...device, - children: newChildren + 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 }; - }); - }, - huixian(){ - let data=[ - { - "altitude": 35.09683139439875, - "ardGroundPoint": [ - { - "height": 35.0960134603141, - "latitude": 0.000032899894086000126, - "longitude": 3.2789183307897707e-7, - "pointNumber": 1, - "targetName": "鍦伴潰鐐�0" - } - ], - "latitude": 0.0009372188427979371, - "longitude": 0.000009340650264268872, - "pointNumber": 1, - "targetName": "绌轰腑鐐�0" - }, - { - "altitude": 40.057437157900914, - "ardGroundPoint": [ - { - "height": 40.05662385374772, - "latitude": 0.00002759265968150938, - "longitude": 7.877836487599675e-7, - "pointNumber": 1, - "targetName": "鍦伴潰鐐�1" - } - ], - "latitude": 0.0009315830781716235, - "longitude": 0.000026597143043885405, - "pointNumber": 2, - "targetName": "绌轰腑鐐�1" - }, - { - "altitude": 90.05743715790092, - "ardGroundPoint": [ - { - "height": 40.05662385374772, - "latitude": 0.00002759265968150938, - "longitude": 7.877836487599675e-7, - "pointNumber": 1, - "targetName": "鍦伴潰鐐�1-鍔犻珮" - } - ], - "latitude": 0.0009315830781716235, - "longitude": 0.000026597143043885405, - "pointNumber": 3, - "targetName": "绌轰腑鐐�1-鍔犻珮" - }, - { - "altitude": 85.4017386642163, - "ardGroundPoint": [ - { - "height": 35.09000336658791, - "latitude": -0.0000329911085806409, - "longitude": 4.656954257439534e-7, - "pointNumber": 1, - "targetName": "鍦伴潰鐐�2" - } - ], - "latitude": -0.0009372610742669285, - "longitude": 0.000013144727598247196, - "pointNumber": 4, - "targetName": "绌轰腑鐐�2-鍔犻珮" - }, - { - "altitude": 35.401738664216296, - "ardGroundPoint": [ - { - "height": 35.09000336658791, - "latitude": -0.0000329911085806409, - "longitude": 4.656954257439534e-7, - "pointNumber": 1, - "targetName": "鍦伴潰鐐�2" - } - ], - "latitude": -0.0009372610742669285, - "longitude": 0.000013144727598247196, - "pointNumber": 5, - "targetName": "绌轰腑鐐�2" - } -] - let aaa = this.convertToTree(data) - console.log(aaa) - this.drawLines(aaa) - }, - convertToTree(data) { - return data.map((item, index) => { - const parentId = 'air_' + index; - return { - id: parentId, - label: item.targetName, - longitude: item.longitude, - latitude: item.latitude, - height: item.altitude, - children: (item.ardGroundPoint || []).map((g, i) => { - return { - id: parentId + '_ground_' + i, - label: g.targetName, - longitude: g.longitude, - latitude: g.latitude, - height: g.height - } - }) - } - }); - }, - drawLines(treeData) { - console.log(treeData) - // 鏀堕泦绌轰腑鐐逛綅缃� - const airPositions = treeData.map(point => { - return Cesium.Cartesian3.fromDegrees( - point.longitude, - point.latitude, - point.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); - // 1. 绌轰腑鐐逛箣闂寸敤榛勮壊瀹炵嚎杩炴帴 - viewer.entities.add({ - polyline: { - positions: airPositions, - width: 2, - material: Cesium.Color.YELLOW - } - }); - - // 2. 姣忎釜绌轰腑鐐逛笌鍦伴潰鐐圭敤钃濊壊铏氱嚎杩炴帴 - treeData.forEach(point => { - const airPos = Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.height); - point.children.forEach(child => { - const groundPos = Cesium.Cartesian3.fromDegrees(child.longitude, child.latitude, child.height); - viewer.entities.add({ - polyline: { - positions: [airPos, groundPos], - width: 1, - material: new Cesium.PolylineDashMaterialProperty({ - color: Cesium.Color.BLUE, - dashLength: 8 - }) - } - }); + 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()); } } } diff --git a/src/views/system/project/components/chooseModelDialog.vue b/src/views/system/project/components/chooseModelDialog.vue index a601599..ec172e3 100644 --- a/src/views/system/project/components/chooseModelDialog.vue +++ b/src/views/system/project/components/chooseModelDialog.vue @@ -1,17 +1,17 @@ <template> <el-dialog - title="閫夋嫨妯℃澘" + title="閫夋嫨椋炶妯℃澘" :visible.sync="dialogVisible" @close="cancel" width="20%"> <el-form ref="form" :model="form" label-width="80px" :rules="rules"> - <el-form-item label="妯℃澘"> - <el-select v-model="form.modelObj" placeholder="璇烽�夋嫨妯℃澘"> + <el-form-item label="椋炶妯℃澘"> + <el-select v-model="form.modelObj" placeholder="璇烽�夋嫨椋炶妯℃澘" @change="handleChange"> <el-option v-for="item in templateArr" :key="item.id" - :label="item.name" - :value="item"> + :label="item.templateName" + :value="item.id"> </el-option> </el-select> </el-form-item> @@ -22,7 +22,9 @@ </el-form> </el-dialog> </template> + <script> +import { flyDataInfo} from "@/api/system/template" export default { name:'chooseModelDialog', components: { @@ -47,21 +49,9 @@ }, ], selectArr:[], - form:{}, - templateArr:[ - { - id:111, - name:'妯℃澘1' - }, - { - id:222, - name:'妯℃澘2' - }, - { - id:333, - name:'妯℃澘3' - } - ], + form:{ + }, + templateArr:[], rules:{ modelObj: [ { required: true, message: '璇烽�夋嫨妯℃澘', trigger: 'change' } @@ -72,6 +62,12 @@ mounted() { console.log(this.deviceId) if(this.deviceId){ + flyDataInfo(this.deviceId).then(res=>{ + console.log(res) + if(res.code == 200 ) { + this.templateArr = res.rows + } + }) //鐐瑰嚮妯℃澘鏌ヨ璁惧涓嬬殑鍏宠仈妯″瀷鐨勬墍鏈夋ā鏉� } }, @@ -79,11 +75,15 @@ cancel(){ this.$emit('cancelModel') }, + handleChange(value){ + this.form.deviceId = this.deviceId + this.form.modelObj =this.templateArr.find(item => item.id === value) + }, submit(){ // this.selectArr - //鍙嶆樉鍙傛暟浼犻�抩ption瀵硅薄 - this.form.deviceId = this.deviceId - console.log(this.form) + // //鍙嶆樉鍙傛暟浼犻�抩ption瀵硅薄 + // this.form.deviceId = this.deviceId + // console.log(this.form) this.$emit('receiveModel',this.form) this.$emit('cancelModel') }, diff --git a/src/views/system/project/index.vue b/src/views/system/project/index.vue index 1eb8747..1c14cb7 100644 --- a/src/views/system/project/index.vue +++ b/src/views/system/project/index.vue @@ -2,7 +2,7 @@ <div class="app-container"> <el-row :gutter="20"> <el-col :span=24 :xs="24"> - <AppTable ref="AppTable" selection :showDeptSearch="false" :url="'tower/point/list'" :tableColumns="tableColumns" + <AppTable ref="AppTable" selection :showDeptSearch="false" :url="'tower/project/list'" :tableColumns="tableColumns" :tableFilter="tableFilter"> <template #operatorBox="{ row }"> <el-button type="primary" plain icon="el-icon-plus" size="mini" diff --git a/src/views/system/shootPoint/components/shootPointDialog.vue b/src/views/system/shootPoint/components/shootPointDialog.vue index c33bac6..3f2f6a8 100644 --- a/src/views/system/shootPoint/components/shootPointDialog.vue +++ b/src/views/system/shootPoint/components/shootPointDialog.vue @@ -51,22 +51,28 @@ </div> </template> <script> +import { compileToFunctions } from "vue-template-compiler"; import CesiumMap from "../../../../utils/components/cesium-map.vue"; import InitMap from "../../../../utils/components/init-map.vue"; import ChooseModelDialog from './chooseModelDialog.vue'; -import { addPoint} from "@/api/system/template" - let globalon = 0 +import { addPoint , getPointInfo} from "@/api/system/template" +let globalon = 0 let globalat = 0 let towerHeight = 47.47 -const centerCartesian = Cesium.Cartesian3.fromDegrees(globalon,globalat , 0) +//濉旂殑鏈濆悜绠楁硶鎵�鐢ㄥ埌鐨� 鏃嬭浆搴︽暟 let rotationAngle = Cesium.Math.toRadians(0) -let relativeData export default{ name:'shootPointDialog', components: { CesiumMap, ChooseModelDialog, InitMap + }, + props: { + templateId: { + type: String, + defaule: null + } }, data(){ return{ @@ -90,8 +96,84 @@ } }, mounted(){ + if(this.templateId) { + //棰勮閫昏緫 + getPointInfo(this.templateId).then(res=>{ + if(res.code == 200 ) { + this.getRowData(res.data) + let drawArr = this.convertToTree(res.data.ardListWayPointsLS) + setTimeout(() => { + //娓叉煋鏃堕棿闂 鍔犱釜寤舵椂鍣� + this.drawLines(drawArr) + }, 500); + } + }) + } }, methods:{ + convertToTree(data) { + return data.map((item, index) => { + const parentId = 'air_' + index; + return { + id: parentId, + label: item.targetName, + longitude: item.longitude, + latitude: item.latitude, + height: item.altitude, + children: (item.ardGroundPoint || []).map((g, i) => { + return { + id: parentId + '_ground_' + i, + label: g.targetName, + longitude: g.longitude, + latitude: g.latitude, + height: g.height + } + }) + } + }); + }, + drawLines(treeData) { + console.log(treeData) + console.log(window) + console.log(window.viewerM) + let viewer = window.viewerM + + // 鏀堕泦绌轰腑鐐逛綅缃� + const airPositions = treeData.map(point => { + return Cesium.Cartesian3.fromDegrees( + point.longitude, + point.latitude, + point.height + ); + }); + + // 1. 绌轰腑鐐逛箣闂寸敤榛勮壊瀹炵嚎杩炴帴 + viewer.entities.add({ + polyline: { + positions: airPositions, + width: 2, + material: Cesium.Color.YELLOW + } + }); + + // 2. 姣忎釜绌轰腑鐐逛笌鍦伴潰鐐圭敤钃濊壊铏氱嚎杩炴帴 + treeData.forEach(point => { + const airPos = Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.height); + point.children.forEach(child => { + const groundPos = Cesium.Cartesian3.fromDegrees(child.longitude, child.latitude, child.height); + viewer.entities.add({ + polyline: { + positions: [airPos, groundPos], + width: 1, + material: new Cesium.PolylineDashMaterialProperty({ + color: Cesium.Color.BLUE, + dashLength: 8 + }) + } + }); + }); + }); + }, addPoint(viewer, position, color, label) { viewer.entities.add({ name: label, @@ -170,6 +252,7 @@ return newGround; }); }, + //鍚堝苟閫昏緫 灏嗛檮杩憂绫宠寖鍥村唴鐨勭偣鍚堝苟 骞朵笖澶勭悊鎴愭暟鎹� mergePoint(arr,mergeNumber,viewer){ this.treeData = arr const result = this.replaceCloseChildrenWithHighestPoint(this.treeData,mergeNumber); @@ -359,10 +442,14 @@ console.log(row) this.modelName = row.modelName this.templateType = row.modelType + if(this.templateId){ + this.form.templateName = row.templateName || '' + } this.chooseModelId = row.id towerHeight = row.towerHeight || 47.47 this.showMap =false this.$nextTick(()=>{ + // this.towerUrl = row.modelRoute this.towerUrl = row.modelRoute this.showMap = true }) diff --git a/src/views/system/shootPoint/index.vue b/src/views/system/shootPoint/index.vue index 8ad757b..03f2833 100644 --- a/src/views/system/shootPoint/index.vue +++ b/src/views/system/shootPoint/index.vue @@ -9,6 +9,8 @@ @click="handleAdd">鏂板妯℃澘</el-button> </template> <template #operator="{ row }"> + <el-button size="mini" type="text" icon="el-icon-view" + @click="preview(row)">棰勮</el-button> <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(row)">鍒犻櫎</el-button> </template> @@ -19,7 +21,7 @@ </el-col> </el-row> - <shootPointDialog @on-submit="$refs.AppTable.getData()" v-if="showDialog" @close="close"></shootPointDialog> + <shootPointDialog @on-submit="$refs.AppTable.getData()" v-if="showDialog" @close="close" :templateId="templateId"></shootPointDialog> </div> </template> @@ -67,7 +69,8 @@ } ], showMap:false, - showDialog:false + showDialog:false, + templateId:null }; }, watch: { @@ -79,6 +82,7 @@ methods: { // 娣诲姞鏁版嵁 handleAdd() { + this.templateId = null this.showMap = false this.showDialog = true // this.$refs.shootPointDialog.show() @@ -107,7 +111,11 @@ // }, close(){ this.showDialog =false - this + }, + preview(row){ + console.log(row) + this.templateId = row.id + this.showDialog = true } }, }; -- Gitblit v1.9.3