轨迹纠偏函数

作者: AllanHao | 来源:发表于2018-09-21 14:24 被阅读31次

    轨迹纠偏函数

    --平滑轨迹
    CREATE OR REPLACE FUNCTION GetSmoothGpsPt () RETURNS void AS $$
    DECLARE vSmoothSpan integer;
    declare rec  record;
    declare tempRec record;
    declare Wi float;
    declare Wx float;
    declare Wy float;
    declare Wa float;
    declare sumWX float;
    declare sumWY float;
    declare sumWA float;
    declare sumW float;
    declare Latitude float;
    declare Longitude float;
    declare TimeGap integer;
    declare angle float;
    BEGIN
    vSmoothSpan := 30 ; 
    for rec in select *,ST_Azimuth(LAG (the_geom) OVER ( ORDER BY update_time),LEAD (the_geom) OVER (ORDER BY update_time))/(2 * pi()) * 360 angle from nts_io_postgis_2d order by update_time loop
    sumWX:= 0; sumWY:= 0; sumWA:= 0;sumW:=0;
    --高斯滤波,已Gps点位前后三十秒的数据进行加权平滑
    for tempRec in select  *,ST_Azimuth(LAG (the_geom) OVER (ORDER BY update_time),LEAD (the_geom) OVER (ORDER BY update_time))/(2 * pi()) * 360 angle from nts_io_postgis_2d t where t.update_time::time BETWEEN rec.update_time::time- interval '10 S' and  rec.update_time::time+ '10 S' loop
    --raise notice '正在处理Longitude:%',tempRec.angle;
    TimeGap:=extract(epoch FROM (rec.update_time :: TIME - tempRec.update_time :: TIME ));
    Wi:=exp((-1) * TimeGap * TimeGap / (2 * vSmoothSpan * vSmoothSpan));
    Wx:= Wi * st_x(tempRec.the_geom);
    Wy:= Wi * st_y(tempRec.the_geom);
    Wa:=Wi*coalesce(tempRec.angle,0);
    sumWX = sumWX+Wx;
    sumWY = sumWY+Wy;
    sumWA=sumWA+Wa;
    
    sumW=sumW+ Wi;
    end loop;
    Longitude:= sumWX / sumW;
    Latitude:= sumWY / sumW;
    angle:=sumWA/sumW;
    
    --raise notice '正在处理angle:%',sumWA;
    --raise notice '正在处理Longitude:%,Latitude:%,angle:%',Longitude,Latitude,tempRec.angle;
    --raise notice '正在处理geom:%',st_astext(ST_GeomFromText('POINT('||Longitude||' '||Latitude||')',4326));
    --平滑后的数据入库
    INSERT INTO public.gps_data_smooth ("datetime","geom","angle") VALUES ( rec.update_time,ST_GeomFromText('POINT('||Longitude||' '||Latitude||')',4326),angle);
    end loop; 
    END ; 
    $$ LANGUAGE plpgsql; 
    

    相关文章

      网友评论

        本文标题:轨迹纠偏函数

        本文链接:https://www.haomeiwen.com/subject/vzianftx.html