Confusion about ST_ReducePrecision and geometry validity

Martin Davis mtnclimb at gmail.com
Tue Jun 11 13:14:33 PDT 2024


Yes, your interpretation is correct.  ST_ReducePrecision is only guaranteed
to work on VALID geometries.  It will also work on *some* invalid
geometries (such as ones which are invalid due to containing adjacent - but
not overlapping - polygons).  So the safest thing is to use ST_MakeValid if
there is doubt about whether the inputs are valid.

On Tue, Jun 11, 2024 at 1:00 PM Marco Boeringa <marco at boeringa.demon.nl>
wrote:

> Hi,
>
> Currently, the help page of PostGIS's ST_ReducePrecision command more or
> less suggests that ST_ReducePrecision can be used as kind of "drop-in"
> replacement of ST_MakeValid. The actual text reads:
>
>
>
> *"Returns a valid geometry with all points rounded to the provided grid
> tolerance, and features below the tolerance removed. Unlike ST_SnapToGrid
> the returned geometry will be valid, with no ring self-intersections or
> collapsed components.*
>
> *Precision reduction can be used to: *
>
>    -
>
>    * match coordinate precision to the data accuracy *
>    -
>
>    * reduce the number of coordinates needed to represent a geometry *
>    -
>
>    * ensure valid geometry output to formats which use lower precision
>    (e.g. text formats such as WKT, GeoJSON or KML when the number of output
>    decimal places is limited). *
>    -
>
>    * export valid geometry to systems which use lower or limited
>    precision (e.g. SDE, Oracle tolerance value)"*
>
> However, a first test replacing:
>
> ST_CollectionExtract(ST_MakeValid(<SOME OTHER GENERALIZATION CODE>),3)
>
> with:
>
> ST_ReducePrecision(<SOME OTHER GENERALIZATION CODE>),<GRID SIZE>)
>
> failed on some geometries with a processing error.
>
> Replacing the first try with:
>
> ST_ReducePrecision(ST_CollectionExtract(ST_MakeValid(<SOME OTHER
> GENERALIZATION CODE>),3),<GRID SIZE>)
>
> did succeed.
>
> This suggest to me that the help page should actually read something like:
>
>
>
> *"Returns a geometry with all points rounded to the provided grid
> tolerance, and features below the tolerance removed. Unlike ST_SnapToGrid
> the returned geometry is guaranteed to be valid, with no ring
> self-intersections or collapsed components, if the input geometry itself is
> valid. If the input geometry is invalid, there is no guarantee the output
> will be valid. Use ST_MakeValid to ensure the input is valid before running
> this command if the input data may contain invalid geometries."*
>
> Is my interpretation of how ST_ReducePrecision handles validity as
> reflected by this suggested updated help text correct?
>
> Marco
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20240611/c2d64028/attachment.htm>


More information about the postgis-users mailing list