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: