Simplifying geometries (generalization)

As glennon mentioned, the standard algorithm for doing this is Douglas-Peucker, which is the default algorithm used in software such as PostGIS (i.e. GEOS) via St_Simplify, ArcGIS via Generalize and GRASS via v.generalize. The Wikipedia article also links to a Python implementation.

GRASS supports a number of different algorithms, as explained in the help page for v.generalize.

On the projection issue, I think in this case its a red herring which can be ignored. The only issue which comes to mind is potentially densifying lines to prevent them from being oversimplified.


You might investigage the Douglas–Peucker algorithm--a method for reducing the number of points in a curve approximated by a series of points. See: http://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm

Whether you overwrite your original geometry or create a secondary store will vary by use.


If by "simplification", you mean a simple reduction of point number, use a basic filtering algorithm, like Douglass peucker filter such as provided by mapshaper or ArcGIS generalize.

If you are looking for a more advanced generalisation tools, which deals for example with the enlargement of two small islands, amalgamation of land patches, etc., have a look at RegionSimplify. Here is an example of output:

simplification generalisation boundaries