gnss-tool-kit/src/render/api/util.js

65 lines
1.5 KiB
JavaScript

export function filterNonNumber (array) {
return array.filter(n => typeof n === 'number')
}
export function mulAdd (nums) {
nums = filterNonNumber(nums)
return nums.reduce((all, num) => all + num, 0)
}
export function getTwoPointDistance (pointOne, pointTwo) {
const minusX = Math.abs(pointOne[0] - pointTwo[0])
const minusY = Math.abs(pointOne[1] - pointTwo[1])
return Math.sqrt(minusX * minusX + minusY * minusY)
}
export function getPolylineLength(points) {
const lineSegments = new Array(points.length - 1)
.fill(0)
.map((foo, i) => [points[i], points[i + 1]])
const lengths = lineSegments.map(item => getTwoPointDistance(...item))
return mulAdd(lengths)
}
export function get_in_positioning_id(GSAArr) {
let in_positioning_id = []
GSAArr.forEach(({ satellites }) => {
in_positioning_id.push(...satellites)
});
return in_positioning_id
}
export function getNMEAObj(nmeaStr) {
if (!nmeaStr) return
return JSON.parse(nmeaStr)
}
export function getGSV (nmeaStr) {
const nmeaObj = getNMEAObj(nmeaStr)
console.log(nmeaObj, '================')
if (!nmeaObj || !nmeaObj.GSV) return null
const { GSV } = nmeaObj
const bd = {
GSVArr: GSV.filter((gsv) => gsv.talker_id === 'BD')
}
const gp = {
GSVArr: GSV.filter((gsv) => gsv.talker_id === 'GP')
}
const gl = {
GSVArr: GSV.filter((gsv) => gsv.talker_id === 'GL')
}
const ga = {
GSVArr: GSV.filter((gsv) => gsv.talker_id === 'GA')
}
return { bd, gp, gl, ga }
}