<div dir="ltr"><div dir="ltr"><div>Hi Paul,</div><div>thanks a lot for following up. Comments inline below.</div><div><br></div></div><div class="gmail_quote gmail_quote_container"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>These are literally CurvePolygon type? </div></blockquote><div><br></div><div>The column type is just "geometry(Geometry,3879)", while ST_GeometryType returns "multisurface" for both.</div><div>When doing a ST_AsText instead, you'll get something like:</div><div><br></div><div>MULTISURFACE(CURVEPOLYGON(COMPOUNDCURVE((...</div><div><br></div><div>for both.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>It’s probably getting caught in our lack of full curve support.<div>I would be interested in the ST_Distance between the point and those two CurvePolygons. (Because, for distance, we have a postgis-native implementation that supports curves). </div></div></blockquote><div><br></div><div>=# SELECT ogc_fid, ST_Distance(ST_GeomFromText('POINT (25492818 6677399.98)', 3879), geom) FROM testdata;<br></div><div><br></div><div> ogc_fid |     st_distance     <br>---------+---------------------<br>    1258 | 0.01234572446598792<br>   12875 |                   0<br>(2 rows)<br></div><div><br></div><div>Indeed, the correct answer, 12875 contains the point, while the other polygon is close to it.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div>Whereas for intersection, the calculation is delegated to GEOS *after linearizing the inputs*. In that linearization, could sit the logically problem you’re seeing.</div></div></blockquote><div><br></div><div>Let's check with different tolerances... yes, changing the tolerance changes the result:</div><div><br></div><div>=#  SELECT ogc_fid FROM testdata WHERE ST_Intersects(ST_CurveToLine(geom, 0.01, 1, 1), ST_GeomFromText('POINT (25492818 6677399.98)', 3879));<br> ogc_fid <br>---------<br>   12875<br>(1 row)<br><br>#  SELECT ogc_fid FROM testdata WHERE ST_Intersects(ST_CurveToLine(geom, 0.02, 1, 1), ST_GeomFromText('POINT (25492818 6677399.98)', 3879));<br> ogc_fid <br>---------<br>    1258<br>(1 row)</div><div><br></div><div>In the immediate future, I guess I could have the GeoTools PostGIS store use either approach, when knowing curves are involved... </div><div>First using && to perform a first rough filter, and then either use either</div><div>* ST_Distance equals to 0</div><div>* An explicit linearization with a target tolerance (this is an urban application, so I'm guessing they will need centimeter, if not millimeter, precision)</div><div>.</div><div>Is there a clear winner here in terms of performance, or performance of distance vs linearized intersection is more contextual to the geometries involved?</div><div><br></div><div>Cheers</div><div>Andrea</div></div></div>