[postgis-devel] ST_MakeValid and geometry fixing
Paul Ramsey
pramsey at cleverelephant.ca
Tue Apr 27 12:11:13 PDT 2021
As discussed on the geos-devel list, there is now a second option for geometry repair in the GEOS code base, and I have just merged a patch that exposes it in PostGIS, for testing and evaluation about whether we want to make it the default.
CREATE OR REPLACE FUNCTION ST_MakeValid(geom geometry, params text)
RETURNS geometry
AS 'MODULE_PATHNAME', 'ST_MakeValid'
LANGUAGE 'c' IMMUTABLE STRICT PARALLEL SAFE
_COST_HIGH;
The "params" argument can be used to supply an options
string to select the method to use for building valid geometry.
The options string is in the format "key1=value2 key2=value2".
* The "method" key has two values. "linework" is the original
algorithm, and builds valid geometries by first extracting all lines,
noding that linework together, then building a value output from the
linework. "structure" is an algorithm that distinguishes between
interior and exterior rings, building new geometry by unioning
exterior rings, and then differencing all interior rings.
* The "keepcollapsed" is only valid for the "structure" algorithm,
and takes a value of "true" or "false". When set to "false",
geometry components that collapse to a lower dimensionality,
for example a one-point linestring would be dropped.
Interested in folks running them side-by-side and seeing what the results are like.
We are also cooking up a third (or maybe just an enhancement to the current structure method) method that does not accept the shell/hole categorizations of the input, but instead revalidates them using containment rules. This might result in the ultimate "tastes good" validated output.
P.
More information about the postgis-devel
mailing list