So if anyone cares this is what I came up with:

CREATE OR REPLACE FUNCTION movingaveragepoints(num integer, id integer)
  RETURNS SETOF geometry AS
$BODY$
/*
 * num - number of points in the moving average
 * id  - did for the device we want the path for
*/
DECLARE
    i    integer;
    cnt  integer;
    p    record;

BEGIN
    SELECT INTO cnt COUNT(*) FROM gpspoints WHERE did=id;

    -- assumes seq values are in the range 1..n
    FOR i IN 1..cnt LOOP
        SELECT INTO p AVG(lat) as y, AVG(lon) as x FROM
            (SELECT lat, lon FROM gpspoints
              WHERE did=id and seq > i-num and seq <= i) as foo;

        RETURN NEXT setsrid(makepoint(p.x, p.y),4326);
    END LOOP;

    RETURN;
END;
$BODY$
  LANGUAGE plpgsql STABLE
  COST 10;

-- this works great! get results
SELECT asewkt(movingaveragepoints) from movingaveragepoints(5, 1);

-- and so does this
SELECT astext(makeline(p1)) from
  (SELECT movingaveragepoints as p1
     from movingaveragepoints(5, 1)) as foo;

Open to better ideas if anyone has them.

Thanks,
  -Steve

On 2/23/2011 1:51 PM, Stephen Woodbridge wrote:
Hi All,

I have a table of points and I would like to generate a path from these
points.

This works very well for the raw points:

select device, makeline(p) as the_geom from
(select device, p from gpspoints order by seq) as foo
group by device;


I would like to smooth these points using a moving average where if the
number of points in the average is say 3 then the points are:

p[1]
(p[1]+p[2])/2
(p[1]+p[2]+p[3])/3
(p[2]+p[3]+p[4])/3
...
(p[n-2]+p[n-1]+p[n])/3

and these points are then used in makeline().

So I can do a brute force iterative function, but it seems like there
should be a more elegant solution.

Thoughts, code snippets, etc?

I'm working with postgresql 8.3, 8.4 and postgis 1.5 at the moment.

-Steve
_______________________________________________
postgis-users mailing list
[email protected]
http://postgis.refractions.net/mailman/listinfo/postgis-users

_______________________________________________
postgis-users mailing list
[email protected]
http://postgis.refractions.net/mailman/listinfo/postgis-users

Reply via email to