From: Paul Ramsey Date: Tue, 17 Sep 2019 20:00:09 +0000 (+0000) Subject: Remove tolerance in point-in-ring stabline tests X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2b2d6f3008fe6047a85459e7c5b35bb086b7da0c;p=postgis Remove tolerance in point-in-ring stabline tests References #4506 git-svn-id: http://svn.osgeo.org/postgis/branches/2.5@17816 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/NEWS b/NEWS index 3966cc1d5..ddf6d59cc 100644 --- a/NEWS +++ b/NEWS @@ -11,6 +11,8 @@ XXXX/XX/XX - #4493, Fix ST_RemoveRepeatedPoints output having an outdated bbox (Raúl Marín) - #4495, Fix ST_SnapToGrid output having an outdated bbox (Raúl Marín) - #4496, Make ST_Simplify(TRIANGLE) collapse if requested (Raúl Marín) + - #4506, Remove tolerance in point-in-ring tests (Paul Ramsey) + PostGIS 2.5.3 2019/08/11 diff --git a/postgis/lwgeom_functions_analytic.c b/postgis/lwgeom_functions_analytic.c index 0b67975d9..88ff1f4a6 100644 --- a/postgis/lwgeom_functions_analytic.c +++ b/postgis/lwgeom_functions_analytic.c @@ -743,7 +743,7 @@ static int point_in_ring_rtree(RTREE_NODE *root, const POINT2D *point) * then the line is to the right of the point and * circling counter-clockwise, so increment. */ - if (FP_CONTAINS_BOTTOM(seg1->y, point->y, seg2->y) && side>0) + if ((seg1->y <= point->y) && (point->y < seg2->y) && (side > 0)) { POSTGIS_DEBUG(3, "incrementing winding number."); @@ -754,7 +754,7 @@ static int point_in_ring_rtree(RTREE_NODE *root, const POINT2D *point) * then the line is to the right of the point and circling * clockwise, so decrement. */ - else if (FP_CONTAINS_BOTTOM(seg2->y, point->y, seg1->y) && side<0) + else if ((seg2->y <= point->y) && (point->y < seg1->y) && (side < 0)) { POSTGIS_DEBUG(3, "decrementing winding number."); @@ -798,7 +798,7 @@ static int point_in_ring(POINTARRAY *pts, const POINT2D *point) POSTGIS_DEBUGF(3, "counterclockwise wrap %d, clockwise wrap %d", FP_CONTAINS_BOTTOM(seg1->y, point->y, seg2->y), FP_CONTAINS_BOTTOM(seg2->y, point->y, seg1->y)); /* zero length segments are ignored. */ - if (((seg2->x - seg1->x)*(seg2->x - seg1->x) + (seg2->y - seg1->y)*(seg2->y - seg1->y)) < 1e-12*1e-12) + if ((seg2->x == seg1->x) && (seg2->y == seg1->y)) { POSTGIS_DEBUG(3, "segment is zero length... ignoring."); @@ -822,7 +822,7 @@ static int point_in_ring(POINTARRAY *pts, const POINT2D *point) * then the line is to the right of the point and * circling counter-clockwise, so increment. */ - if (FP_CONTAINS_BOTTOM(seg1->y, point->y, seg2->y) && side>0) + if ((seg1->y <= point->y) && (point->y < seg2->y) && (side > 0)) { POSTGIS_DEBUG(3, "incrementing winding number."); @@ -833,7 +833,7 @@ static int point_in_ring(POINTARRAY *pts, const POINT2D *point) * then the line is to the right of the point and circling * clockwise, so decrement. */ - else if (FP_CONTAINS_BOTTOM(seg2->y, point->y, seg1->y) && side<0) + else if ((seg2->y <= point->y) && (point->y < seg1->y) && (side < 0)) { POSTGIS_DEBUG(3, "decrementing winding number.");