地图轨迹内插采集点

有时候地图轨迹采集点不均匀,在做轨迹回放时速度很不均匀,忽快忽慢,通过内插采集点可以平滑播放,原理是把轨迹中每条直线分割成若干等长的线段,代码如下

function interpolation(points){
    const options={units: 'kilometers'}
    //线转点集合,结果放到points中
    const line2points=(p1,p2,distance,points)=>{
        if(turf.distance(p1,p2,options)>distance){
            const along=turf.along(turf.lineString([p1.geometry.coordinates,p2.geometry.coordinates]),distance,options)
            points.push(along)
            line2points(along,p2,distance,points)            
            return;
        }
        points.push(p2);
    }
    //获取points相邻点间最短距离
    const getMinDistance=(points)=>{
        // const distances=[]
        // points.reduce((prev,curr)=>{distances.push(turf.distance(prev,curr,options));return curr;}) 
        // return Math.min(...distances.filter(distance=>distance>0))
        return 0.01
    }
    const minDistance=getMinDistance(points)
    //在points所有相邻点间进行插入点操作
    const result=[]
    points.reduce((prev,curr)=>{
        const points=[]
        line2points(prev,curr,minDistance,points)
        result=[...result,...points];
        return curr;
    })
    return result
}

 

posted @ 2020-08-26 09:02  朱现国  阅读(357)  评论(0编辑  收藏  举报