Files
gnss-tool-kit/src/render/page/SignalMonitorPage.vue
2024-03-25 14:52:39 +08:00

100 lines
3.4 KiB
Vue

<template>
<full-screen-container>
<TheHeader title="卫星信号监控平台" />
<div class="main-content flex-1 grid grid-cols-2 grid-rows-2">
<div class="w-11/12 justify-self-end">
<SNRView ref="BDSNRView" color="rgb(255,50,50)" title="北斗" />
</div>
<div class="w-11/12 justify-self-start">
<SNRView ref="GPSNRView" color="rgb(0,204,255)" title="GPS" />
</div>
<div class="w-11/12 justify-self-end">
<SNRView ref="GLSNRView" color="rgb(102,0,255)" title="GLONASS" />
</div>
<div class="w-11/12 justify-self-start">
<SNRView ref="GASNRView" color="rgb(0,204,102)" title="Galileo" />
</div>
</div>
</full-screen-container>
</template>
<script lang="ts" setup>
import FullScreenContainer from '../components/Layout/FullScreenContainer.vue'
import TheHeader from '../components/Layout/TheHeader.vue'
import SNRView from '../components/SNRView.vue'
import { ref, onMounted } from 'vue'
import { getNMEAObj } from '../api/util'
const BDSNRView = ref(null)
const GPSNRView = ref(null)
const GLSNRView = ref(null)
const GASNRView = ref(null)
const update = (nmeaStr: string) => {
const data: any = getMonitoringData(nmeaStr)
if (!data) return
const { bd, gp, gl, ga } = data
const bd_gp_satellite_count = getSatelliteCount(bd.GSVArr)>getSatelliteCount(gp.GSVArr)?getSatelliteCount(bd.GSVArr):getSatelliteCount(gp.GSVArr)
const gl_ga_satellite_count = getSatelliteCount(gl.GSVArr)>getSatelliteCount(ga.GSVArr)?getSatelliteCount(gl.GSVArr):getSatelliteCount(ga.GSVArr)
const lineMax=bd_gp_satellite_count>gl_ga_satellite_count?bd_gp_satellite_count:gl_ga_satellite_count
// TODO: 找到bdgsv语句有7条的原因以及gsa语句配置talker_id为各个卫星导航系统自己的名字
BDSNRView.value.update(bd.GSVArr, bd.GSAArr, lineMax)
GPSNRView.value.update(gp.GSVArr, gp.GSAArr, lineMax)
GLSNRView.value.update(gl.GSVArr, gl.GSAArr, lineMax)
GASNRView.value.update(ga.GSVArr, ga.GSAArr, lineMax)
}
onMounted(() => {
if ('ipcRenderer' in window) {
ipcRenderer.receive('nmea', update)
ipcRenderer.send('APP_MOUNTED')
}
})
const getSatelliteCount = (GSVArr: Array<any>) => {
if (!GSVArr) return
const count = GSVArr.reduce((total, gsv) => {
return total + gsv.satellites.length
}, 0)
return count
}
const getMonitoringData = (nmeaStr: string) => {
const nmeaObj: any = getNMEAObj(nmeaStr)
console.log(nmeaObj, '================')
if (!nmeaObj || !nmeaObj.GSV || !nmeaObj.GSA) return null
const { GSV, GSA } = nmeaObj
const bd = {
// NMEA 1083 3.x $BDGSV,...*
// NMEA 1083 4.0x $GBGSV,...*
// NMEA 1083 4.1x $GBGSV,...,1* | $GBGSV,...,0*
// GSVArr: GSV.filter((gsv: any) => gsv.talker_id === 'BD'),
// GSAArr: GSA.filter((gsa: any) => gsa.talker_id === 'BD')
GSVArr: GSV.filter((gsv: any) => gsv.talker_id === 'GB'),
GSAArr: GSA.filter((gsa: any) => gsa.talker_id === 'GB')
}
const gp = {
GSVArr: GSV.filter((gsv: any) => gsv.talker_id === 'GP'),
GSAArr: GSA.filter((gsa: any) => gsa.talker_id === 'GP')
}
const gl = {
GSVArr: GSV.filter((gsv: any) => gsv.talker_id === 'GL'),
GSAArr: GSA.filter((gsa: any) => gsa.talker_id === 'GL')
}
const ga = {
GSVArr: GSV.filter((gsv: any) => gsv.talker_id === 'GA'),
GSAArr: GSA.filter((gsa: any) => gsa.talker_id === 'GA')
}
return { bd, gp, gl, ga }
}
</script>