<div dir="ltr">Can the original query be added to regress.sql, at least in trunk?</div><br><div class="gmail_quote"><div dir="ltr">пн, 26 февр. 2018 г. в 21:27, Paul Ramsey <<a href="mailto:pramsey@cleverelephant.ca">pramsey@cleverelephant.ca</a>>:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: pramsey<br>
Date: 2018-02-26 10:27:03 -0800 (Mon, 26 Feb 2018)<br>
New Revision: 16421<br>
<br>
Modified:<br>
   branches/2.3/NEWS<br>
   branches/2.3/liblwgeom/lwlinearreferencing.c<br>
Log:<br>
Use more precise bounds when testing overlap of temporal ranges.<br>
For 2.3, references #4025<br>
<br>
<br>
Modified: branches/2.3/NEWS<br>
===================================================================<br>
--- branches/2.3/NEWS   2018-02-26 18:25:45 UTC (rev 16420)<br>
+++ branches/2.3/NEWS   2018-02-26 18:27:03 UTC (rev 16421)<br>
@@ -7,6 +7,7 @@<br>
   - #4003, lwpoly_construct_circle: Avoid division by zero (Raúl Marín Rodríguez)<br>
   - #4020, Casting from box3d to geometry now returns correctly connected<br>
            PolyhedralSurface (Matthias Bay)<br>
+  - #4025, Incorrect answers for temporally "amost overlapping" ranges<br>
<br>
 PostGIS 2.3.6<br>
 2018/01/17<br>
<br>
Modified: branches/2.3/liblwgeom/lwlinearreferencing.c<br>
===================================================================<br>
--- branches/2.3/liblwgeom/lwlinearreferencing.c        2018-02-26 18:25:45 UTC (rev 16420)<br>
+++ branches/2.3/liblwgeom/lwlinearreferencing.c        2018-02-26 18:27:03 UTC (rev 16421)<br>
@@ -1073,7 +1073,7 @@<br>
 {<br>
        LWLINE *l1, *l2;<br>
        int i;<br>
-       const GBOX *gbox1, *gbox2;<br>
+       GBOX gbox1, gbox2;<br>
        double tmin, tmax;<br>
        double *mvals;<br>
        int nmvals = 0;<br>
@@ -1101,20 +1101,19 @@<br>
                return -1;<br>
        }<br>
<br>
-       /* WARNING: these ranges may be wider than real ones */<br>
-       gbox1 = lwgeom_get_bbox(g1);<br>
-       gbox2 = lwgeom_get_bbox(g2);<br>
+       /* We use lwgeom_calculate_gbox() instead of lwgeom_get_gbox() */<br>
+       /* because we cannot afford the float rounding inaccuracy when */<br>
+       /* we compare the ranges for overlap below */<br>
+       lwgeom_calculate_gbox(g1, &gbox1);<br>
+       lwgeom_calculate_gbox(g2, &gbox2);<br>
<br>
-       assert(gbox1); /* or the npoints check above would have failed */<br>
-       assert(gbox2); /* or the npoints check above would have failed */<br>
-<br>
        /*<br>
         * Find overlapping M range<br>
         * WARNING: may be larger than the real one<br>
         */<br>
<br>
-       tmin = FP_MAX(gbox1->mmin, gbox2->mmin);<br>
-       tmax = FP_MIN(gbox1->mmax, gbox2->mmax);<br>
+       tmin = FP_MAX(gbox1.mmin, gbox2.mmin);<br>
+       tmax = FP_MIN(gbox1.mmax, gbox2.mmax);<br>
<br>
        if ( tmax < tmin )<br>
        {<br>
<br>
_______________________________________________<br>
postgis-tickets mailing list<br>
<a href="mailto:postgis-tickets@lists.osgeo.org" target="_blank">postgis-tickets@lists.osgeo.org</a><br>
<a href="https://lists.osgeo.org/mailman/listinfo/postgis-tickets" rel="noreferrer" target="_blank">https://lists.osgeo.org/mailman/listinfo/postgis-tickets</a></blockquote></div>