'use strict' const {toGeoJSON} = require('@mapbox/polyline') const distance = require('gps-distance') const createParsePolyline = (profile, {locations}) => { // todo: what is p.delta? // todo: what is p.type? // todo: what is p.crdEncS? // todo: what is p.crdEncF? const parsePolyline = (p) => { const shape = toGeoJSON(p.crdEncYX) if (shape.coordinates.length === 0) return null const res = shape.coordinates.map(crd => ({ type: 'Feature', properties: {}, geometry: { type: 'Point', coordinates: crd } })) if (Array.isArray(p.ppLocRefL)) { for (let ref of p.ppLocRefL) { const p = res[ref.ppIdx] const loc = locations[ref.locX] if (p && loc) p.properties = loc } // Often there is one more point right next to each point at a station. // We filter them here if they are < 5m from each other. for (let i = 1; i < res.length; i++) { const p1 = res[i - 1].geometry.coordinates const p2 = res[i].geometry.coordinates const d = distance(p1[1], p1[0], p2[1], p2[0]) if (d >= .005) continue const l1 = Object.keys(res[i - 1].properties).length const l2 = Object.keys(res[i].properties).length if (l1 === 0 && l2 > 0) res.splice(i - 1, 1) else if (l2 === 0 && l1 > 0) res.splice(i, 1) } } return { type: 'FeatureCollection', features: res } } return parsePolyline } module.exports = createParsePolyline