From bec1a5e6532575b221b24094471fce8c814fc7ae Mon Sep 17 00:00:00 2001 From: jihongshun <1151753686@qq.com> Date: 星期三, 09 七月 2025 17:26:59 +0800 Subject: [PATCH] 优化算法 --- src/views/system/project/components/addPorjectDialog.vue | 518 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 506 insertions(+), 12 deletions(-) diff --git a/src/views/system/project/components/addPorjectDialog.vue b/src/views/system/project/components/addPorjectDialog.vue index cf5606f..c336406 100644 --- a/src/views/system/project/components/addPorjectDialog.vue +++ b/src/views/system/project/components/addPorjectDialog.vue @@ -13,6 +13,7 @@ <!-- <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' @@ -23,15 +24,16 @@ width="150"> </el-table-column> <el-table-column - prop="muban" + prop="mode" label="妯℃澘" - width="150"> + width="120"> </el-table-column> <el-table-column fixed="right" label="鎿嶄綔" - width="100"> + width="130"> <template slot-scope="scope"> + <el-button type="text" size="small" @click="chooseModel(scope.row)">妯℃澘</el-button> <el-button type="text" size="small" @click="flyToLocal(scope.row)">瀹氫綅</el-button> <el-button type="text" size="small" @click="deleteData(scope.row)">绉婚櫎</el-button> </template> @@ -63,28 +65,379 @@ <el-button type="primary" @click="submit()" >鐢熸垚鑸嚎浠诲姟</el-button> </span> </el-dialog> - <chooseDeviceDialog v-if="showModel" @cancel ='cancel' @dealChooseArr="dealChooseArr" ></chooseDeviceDialog> + <chooseDeviceDialog v-if="showDevice" @cancel ='cancel' @dealChooseArr="dealChooseArr" ></chooseDeviceDialog> + <chooseModelDialog v-if="showModel" @cancelModel ='cancelModel' @receiveModel="receiveModel" :deviceId="deviceId"></chooseModelDialog> </div> </template> <script> import CesiumMap from "../../../../utils/components/cesium-map.vue"; import chooseDeviceDialog from './chooseDeviceDialog.vue'; +import chooseModelDialog from './chooseModelDialog.vue'; export default{ components: { CesiumMap, - chooseDeviceDialog + chooseDeviceDialog, + chooseModelDialog }, data(){ return{ dialogVisible :true, tableData: [], - treeData:[], + 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 + } + ] + } +] + } +], defaultProps: { children: 'children', label: 'label' }, + showDevice:false, + multipleSelection: [], showModel:false, - multipleSelection: [] + deviceId:null } }, methods:{ @@ -114,18 +467,34 @@ orientation: orientation, model: { uri: "http://192.168.1.5:9000/tower/2025/07/01/tower_20250701145739A004.glb", // 鏇挎崲鎴愪綘鐨勬ā鍨嬭矾寰� - scale: 1000, + scale: 1, }, + label: { + show: true, + verticalOrigin: Cesium.VerticalOrigin.BOTTOM, + horizontalOrigin: Cesium.HorizontalOrigin.CENTER, + font: '28px Helvetica', + outlineColor: Cesium.Color.BLUE, + outlineWidth: 3, + fillColor: Cesium.Color.fromCssColorString('#FFFFFF'), //44c3cc + text: row.deviceName, + style: Cesium.LabelStyle.FILL_AND_OUTLINE, + pixelOffset: new Cesium.Cartesian2(0.0, -56.0), + scaleByDistance: new Cesium.NearFarScalar(1000, 0.6, 10000, 0.4), + pixelOffsetScaleByDistance: new Cesium.NearFarScalar(1000, 0.4, 10000, 0.4), + disableDepthTestDistance: 100000000 + } }); console.log(entity) // 椋炶鍒版ā鍨嬩綅缃� + console.log(this.treeData) viewer.flyTo(entity) }, addDevice(){ - this.showModel = true + this.showDevice = true }, cancel(){ - this.showModel = false + this.showDevice = false }, hasSameId(array1, array2) { const ids1 = new Set(array1.map(item => item.id)); @@ -148,7 +517,7 @@ this.tableData = this.tableData.concat(arr) } const dealTreeData =this.dealTee() - this.treeData = dealTreeData + // this.treeData = dealTreeData console.log(this.treeData) }, dealTee(){ @@ -167,7 +536,132 @@ this.tableData.splice(index, 1); } const dealTreeData = this.dealTee() - this.treeData = dealTreeData + // this.treeData = dealTreeData + }, + chooseModel(row){ + this.deviceId = row.id + this.showModel = true + }, + cancelModel(){ + this.showModel = false + }, + receiveModel(obj){ + //deal閫昏緫 + console.log(obj) + this.dealTableTemplate(obj) + // this.dealTreeMerge(obj) + }, + dealTableTemplate(obj){ + const target = this.tableData.find(item => item.id === obj.deviceId) + if (target) { + this.$set(target, 'mode', obj.modelObj.name) // 鉁� Vue2 闇�瑕佷娇鐢� $set 浠ョ‘淇濆搷搴斿紡 + } + }, + dealTreeMerge(obj){ + let newChildrenData= [ + { id: 100, label: '鏂板瓙鑺傜偣A',children:[{id: 1001,label: '鏂板瓙鑺傜偣A-1'}]}, + { id: 101, label: '鏂板瓙鑺傜偣B' } + ] + this.treeData.forEach(item => { + if(item.id == obj.deviceId) { + // 鏇挎崲绗竴灞傛瘡涓妭鐐圭殑 children + this.$set(item, 'children', JSON.parse(JSON.stringify(newChildrenData))); + } + }); + }, + drawConnectionsWithLabels(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 + } + }); + } + }, + draw(){ + this.drawConnectionsWithLabels(this.treeData) } } } -- Gitblit v1.9.3