<div dir="ltr">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.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Jun 11, 2024 at 1:00 PM Marco Boeringa <<a href="mailto:marco@boeringa.demon.nl">marco@boeringa.demon.nl</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><u></u>

  

    
  
  <div>
    <p>Hi,</p>
    <p>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:</p>
    <p><i>"Returns a valid geometry with all points rounded to the
        provided grid tolerance, and features below the tolerance
        removed.<br>
        <br>
        Unlike ST_SnapToGrid the returned geometry will be valid, with
        no ring self-intersections or collapsed components.</i></p>
    <p> <i>Precision reduction can be used to: </i></p>
    <div>
      <ul style="list-style-type:disc">
        <li>
          <p><i> match coordinate precision to the data accuracy </i></p>
        </li>
        <li>
          <p><i> reduce the number of coordinates needed to represent a
              geometry </i></p>
        </li>
        <li>
          <p><i> 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). </i></p>
        </li>
        <li>
          <p><i> export valid geometry to systems which use lower or
              limited precision (e.g. SDE, Oracle tolerance value)"</i></p>
        </li>
      </ul>
    </div>
    <p>However, a first test replacing:</p>
    <p>ST_CollectionExtract(ST_MakeValid(<SOME OTHER GENERALIZATION
      CODE>),3)</p>
    <p>with:</p>
    <p>ST_ReducePrecision(<SOME OTHER GENERALIZATION
      CODE>),<GRID SIZE>)</p>
    <p>failed on some geometries with a processing error. <br>
    </p>
    <p>Replacing the first try with:<br>
    </p>
    <p>ST_ReducePrecision(ST_CollectionExtract(ST_MakeValid(<SOME
      OTHER GENERALIZATION CODE>),3),<GRID SIZE>)</p>
    <p>did succeed.</p>
    <p>This suggest to me that the help page should actually read
      something like:</p>
    <p><i>"Returns a geometry with all points rounded to the provided
        grid tolerance, and features below the tolerance removed.<br>
        <br>
        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."</i></p>
    <p>Is my interpretation of how<i> </i>ST_ReducePrecision handles
      validity as reflected by this suggested updated help text correct?<i><br>
      </i></p>
    <p>Marco<i><br>
      </i></p>
  </div>

</blockquote></div>