Definition at line 695 of file lwgeom_functions_analytic.c.
704 POSTGIS_DEBUG(2,
"point_in_ring called.");
710 for (i=0; i<lines->
ngeoms; i++)
717 POSTGIS_DEBUGF(3,
"segment: (%.8f, %.8f),(%.8f, %.8f)", seg1->
x, seg1->
y, seg2->
x, seg2->
y);
718 POSTGIS_DEBUGF(3,
"side result: %.8f", side);
722 if (((seg2->
x - seg1->
x)*(seg2->
x - seg1->
x) + (seg2->
y - seg1->
y)*(seg2->
y - seg1->
y)) < 1e-12*1e-12)
724 POSTGIS_DEBUG(3,
"segment is zero length... ignoring.");
735 POSTGIS_DEBUGF(3,
"point on ring boundary between points %d, %d", i, i+1);
746 if ((seg1->
y <= point->
y) && (point->
y < seg2->
y) && (side > 0))
748 POSTGIS_DEBUG(3,
"incrementing winding number.");
757 else if ((seg2->
y <= point->
y) && (point->
y < seg1->
y) && (side < 0))
759 POSTGIS_DEBUG(3,
"decrementing winding number.");
765 POSTGIS_DEBUGF(3,
"winding number %d", wn);
const POINT2D * getPoint2d_cp(const POINTARRAY *pa, uint32_t n)
Returns a POINT2D pointer into the POINTARRAY serialized_ptlist, suitable for reading from.
#define FP_CONTAINS_BOTTOM(A, X, B)
static int isOnSegment(const POINT2D *seg1, const POINT2D *seg2, const POINT2D *point)
static double determineSide(const POINT2D *seg1, const POINT2D *seg2, const POINT2D *point)
LWMLINE * RTreeFindLineSegments(RTREE_NODE *root, double value)
Retrieves a collection of line segments given the root and crossing value.
References determineSide(), FP_CONTAINS_BOTTOM, LWMLINE::geoms, getPoint2d_cp(), isOnSegment(), LWMLINE::ngeoms, LWLINE::points, RTreeFindLineSegments(), POINT2D::x, and POINT2D::y.
Referenced by point_in_multipolygon_rtree(), and point_in_polygon_rtree().