[postgis-users] Reducing the number of points in a GPS track

Birgit Laggner birgit.laggner at vti.bund.de
Thu Oct 25 00:27:58 PDT 2012


Hi Alexandre,

perhaps you could run ST_Simplify in a function with a while loop 
testing over ST_NPoints:

CREATE OR REPLACE FUNCTION simplify_npoints(geometry, integer)
   RETURNS geometry AS
$BODY$

DECLARE
   InGeom alias for $1;
   maxpoints alias for $2;
   npoints integer;
   tolerance float;
   outGeom geometry;

Begin

npoints:=ST_NPoints(InGeom);
outGeom:=InGeom;
tolerance:=0.0;

while npoints > maxpoints loop
   tolerance:=tolerance + 0.001;
   outGeom:=ST_Simplify(InGeom, tolerance);
   npoints:=ST_NPoints(outGeom);
end loop;

return outGeom;

End;
$BODY$
   LANGUAGE plpgsql VOLATILE
   COST 100;
ALTER FUNCTION simplify_npoints(geometry, integer) OWNER TO postgres;



I don't know if it will work (didn't test). And perhaps bigger iteration 
steps would be sufficient, too...

Good luck! Regards,

Birgit.


Am 24.10.2012 14:29, schrieb Alexandre Saunier:
> Hello.
>
> I would like to know if some tools are available in PostGIS to
> simplify a linestring to a given maximum number of points.
> A bit like the "simplify,count=<...>" filter in GPSBabel:
> http://www.gpsbabel.org/htmldoc-development/filter_simplify.html
>
> ST_Simplify is close to what I need but I don't know in advance what
> tolerance to use, only the final maximal number of points.
>
> Is there a way to do that kind of simplification with PostGIS?
>
> Thanks!
> Alexandre
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
>



More information about the postgis-users mailing list