Simplifies geom with a distance tolerance of distance ensuring
that the result is a valid geometry (if the input is) having the
same dimension and number of components as the input, and with the
components having the same topological relationship.
Uses a maximum-distance difference algorithm similar to the
Douglas-Peuker algorithm.
If the input is a POLYGON or a MULTIPOLYGON:
The result has the same number of shells and holes as the input,
with the same topological structure
The result rings touch at no more than the number of touching
points in the input (although they may touch at fewer points).
The key implication of this statement is that if the input is
topologically valid, so is the simplified output.
For linear geometries, if the input does not contain any
intersecting line segments, this property will be preserved in the
output.
For all geometry types, the result will contain enough vertices to
ensure validity. For polygons and closed linear geometries, the
result will have at least 4 vertices; for open linestrings the
result will have at least 2 vertices.
All geometry types are handled. Empty and point geometries are
returned unchanged.
KNOWN BUGS
If a small hole is very near an edge, it is possible for the
edge to be moved by a relatively large tolerance value and end
up with the hole outside the result shell. Similarly, it is
possible for a small polygon component to end up inside a nearby
larger polygon. A workaround is to test for this situation in
post-processing and remove any invalid holes or polygons.