PostGIS 3.7.0dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches

◆ ptarray_closest_segment_2d()

int ptarray_closest_segment_2d ( const POINTARRAY pa,
const POINT2D qp,
double *  dist 
)
extern
Parameters
pathe subject pointarray
qpthe query point
distoptional output for actual distance from segment
Returns
0-based segment index for the closest segment (earliest segment in case of same distance)

Definition at line 1452 of file ptarray.c.

1453{
1454 const POINT2D *start = getPoint2d_cp(pa, 0), *end = NULL;
1455 uint32_t t, seg=0;
1456 double mindist=DBL_MAX;
1457
1458 /* Loop through pointarray looking for nearest segment */
1459 for (t=1; t<pa->npoints; t++)
1460 {
1461 double dist_sqr;
1462 end = getPoint2d_cp(pa, t);
1463 dist_sqr = distance2d_sqr_pt_seg(qp, start, end);
1464
1465 if (dist_sqr < mindist)
1466 {
1467 mindist = dist_sqr;
1468 seg=t-1;
1469 if ( mindist == 0 )
1470 {
1471 LWDEBUG(3, "Breaking on mindist=0");
1472 break;
1473 }
1474 }
1475
1476 start = end;
1477 }
1478
1479 if ( dist ) *dist = sqrt(mindist);
1480 return seg;
1481}
double distance2d_sqr_pt_seg(const POINT2D *p, const POINT2D *A, const POINT2D *B)
Definition measures.c:2354
#define LWDEBUG(level, msg)
Definition lwgeom_log.h:101
static const POINT2D * getPoint2d_cp(const POINTARRAY *pa, uint32_t n)
Returns a POINT2D pointer into the POINTARRAY serialized_ptlist, suitable for reading from.
Definition lwinline.h:97
uint32_t npoints
Definition liblwgeom.h:427

References distance2d_sqr_pt_seg(), getPoint2d_cp(), LWDEBUG, and POINTARRAY::npoints.

Referenced by lwt_GetFaceContainingPoint(), and test_ptarray_closest_segment_2d().

Here is the call graph for this function:
Here is the caller graph for this function: