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') GSVArr: GSV.filter((gsv) => gsv.talker_id === 'GB') } 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 } }