Confusion about ST_ReducePrecision and geometry validity

Marco Boeringa marco at boeringa.demon.nl
Tue Jun 11 13:21:32 PDT 2024


Thanks Martin, that confirmation is really helpful. Should be a simple 
fix now to amend the help text and avoid the confusion.

Op 11-6-2024 om 22:14 schreef Martin Davis:
> 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/1f375244/attachment.htm>


More information about the postgis-users mailing list