From 718756ad841386cb6d3eab3b5ae5a8eb2a09c010 Mon Sep 17 00:00:00 2001 From: LiuJiaNan Date: Tue, 16 Apr 2024 15:30:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=A5=E8=AD=A6=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/map/index.vue | 119 ++++++++++++++++++++++------------------ 1 file changed, 66 insertions(+), 53 deletions(-) diff --git a/src/views/map/index.vue b/src/views/map/index.vue index fe409e2..194373d 100644 --- a/src/views/map/index.vue +++ b/src/views/map/index.vue @@ -1116,8 +1116,8 @@ export default { }, subscription: { // '+'是通配符 - // topic: '+/+/+/alarm', topic: '+/UwbBQ/+/prop', + topic1: '+/+/+/alarm', qos: 0 }, @@ -1484,6 +1484,7 @@ export default { const point_id = pick.id._monitoItems.data.id const corpInfoId = pick.id._monitoItems.data.corpInfoId if (point_type === '标记点peoplePositionOne') { + this.removeTrajectory() this.addTrajectory(point_id, corpInfoId) } } else { @@ -1499,22 +1500,24 @@ export default { corpId: corpInfoId } ).then((data) => { - console.log(data.list) - const positions = [] - for (let i = 0; i < data.list.length; i++) { - positions.push(Cesium.Cartesian3.fromDegrees(data.list[i].XAxis, data.list[i].YAxis)) + if (data.list) { + const positions = [] + for (let i = 0; i < data.list.length; i++) { + positions.push(Cesium.Cartesian3.fromDegrees(data.list[i].XAxis, data.list[i].YAxis)) + } + const entity = new Cesium.Entity({ + id: 'trajectory', + polyline: { positions, width: 5.0, material: Cesium.Color.RED } + }) + const collection = new Cesium.CustomDataSource('trajectoryEntityCollection') + collection.entities.add(entity) + viewer.dataSources.add(collection) + this.trajectoryEntityCollection = collection } - const entity = new Cesium.Entity({ - id: 'trajectory', - polyline: { positions, width: 5.0, material: Cesium.Color.RED } - }) - const collection = new Cesium.CustomDataSource('trajectoryEntityCollection') - collection.entities.add(entity) - viewer.dataSources.add(collection) - this.trajectoryEntityCollection = collection }) }, removeTrajectory() { + if (Object.keys(this.trajectoryEntityCollection).length === 0) return viewer.dataSources.remove(this.trajectoryEntityCollection) this.trajectoryEntityCollection = {} }, @@ -2584,45 +2587,55 @@ export default { }, mqttMessage(CORP_INFO_ID) { this.client.on('message', (topic, message) => { - // created by liu jun mqtt返回的参数可能是一个数组 - let peopleList = JSON.parse(message) - if (!Array.isArray(peopleList)) { - peopleList = [peopleList] - } - for (let i = 0; i < peopleList.length; i++) { - const item = peopleList[i] - // 如果不是人员信息则跳过 - // UwbBQ是人员定位卡的id(UwbJiZhan这是基站的id) - if (item.productKey !== 'UwbBQ') { - continue + if (topic.indexOf('UwbBQ') !== -1 && topic.indexOf('prop') !== -1) { + // created by liu jun mqtt返回的参数可能是一个数组 + let peopleList = JSON.parse(message) + if (!Array.isArray(peopleList)) { + peopleList = [peopleList] } - // 将地图上剩余的点与最新的定位人员点进行对比更新地图上已存在的点新增地图上之前没有的点 - const index = this.onePerLocArr.findIndex(item1 => { - return item1.id.toString() === item.deviceCode.toString() - }) - const x = item.properties[2].value - const y = item.properties[3].value - const pointColor = this.isPointxyWithinTheArea(this.pointBox, x, y) - if (index !== -1) { - this.onePerLocArr[index].x = x - this.onePerLocArr[index].y = y - this.onePerLocArr[index].icon_type = 'img4_0' + pointColor - ry_drag.getPosition(this.onePerLocArr[index]) - } else { - const perLoc = { - id: item.deviceCode, - x: x, - y: y, - icon_type: 'img4_0' + pointColor, - data_id: item.deviceCode, - point_type: '标记点peoplePositionOne', - label: '人员定位', - corpInfoId: CORP_INFO_ID + for (let i = 0; i < peopleList.length; i++) { + const item = peopleList[i] + // 如果不是人员信息则跳过 + // UwbBQ是人员定位卡的id(UwbJiZhan这是基站的id) + if (item.productKey !== 'UwbBQ') { + continue + } + // 将地图上剩余的点与最新的定位人员点进行对比更新地图上已存在的点新增地图上之前没有的点 + const index = this.onePerLocArr.findIndex(item1 => { + return item1.id.toString() === item.deviceCode.toString() + }) + const x = item.properties[2].value + const y = item.properties[3].value + const pointColor = this.isPointxyWithinTheArea(this.pointBox, x, y) + if (index !== -1) { + this.onePerLocArr[index].x = x + this.onePerLocArr[index].y = y + this.onePerLocArr[index].icon_type = 'img4_0' + pointColor + ry_drag.getPosition(this.onePerLocArr[index]) + } else { + const perLoc = { + id: item.deviceCode, + x: x, + y: y, + icon_type: 'img4_0' + pointColor, + data_id: item.deviceCode, + point_type: '标记点peoplePositionOne', + label: '人员定位', + corpInfoId: CORP_INFO_ID + } + this.onePerLocArr.push(perLoc) + ry_drag.addEntity(perLoc) + this.mqttPoint[this.subscription.topic.substring(0, this.subscription.topic.lastIndexOf('+')) + item.deviceCode] = item.deviceCode } - this.onePerLocArr.push(perLoc) - ry_drag.addEntity(perLoc) - this.mqttPoint[this.subscription.topic.substring(0, this.subscription.topic.lastIndexOf('+')) + item.deviceCode] = item.deviceCode } + } else if (topic.indexOf('alarm') !== -1) { + const formatMessage = JSON.parse(message) + this.$notify({ + title: '报警信息', + dangerouslyUseHTMLString: true, + message: `部门:${formatMessage.deptName}
类型:${formatMessage.identifierName}`, + type: 'error' + }) } }) }, @@ -2644,8 +2657,8 @@ export default { }, // 订阅 doSubscribe() { - const { topic, qos } = this.subscription - this.client.subscribe(topic, { qos }, (error, res) => { + const { topic, topic1, qos } = this.subscription + this.client.subscribe([topic, topic1], { qos }, (error, res) => { if (error) { console.log('Subscribe to topics error', error) return @@ -2656,8 +2669,8 @@ export default { }, // 取消订阅 doUnSubscribe() { - const { topic } = this.subscription - this.client.unsubscribe(topic, error => { + const { topic, topic1 } = this.subscription + this.client.unsubscribe([topic, topic1], error => { if (error) { console.log('Subscribe to topics error', error) }