PostGIS  3.6.1dev-r@@SVN_REVISION@@

◆ lw_dist2d_pt_ptarray()

int lw_dist2d_pt_ptarray ( const POINT2D p,
POINTARRAY pa,
DISTPTS dl 
)

search all the segments of pointarray to see which one is closest to p1 Returns minimum distance between point and pointarray

Definition at line 1112 of file measures.c.

1113 {
1114  const POINT2D *start, *end;
1115  int twist = dl->twisted;
1116 
1117  start = getPoint2d_cp(pa, 0);
1118 
1119  LWDEBUG(2, "lw_dist2d_pt_ptarray enter");
1120 
1121  if (!lw_dist2d_pt_pt(p, start, dl))
1122  return LW_FALSE;
1123 
1124  LWDEBUGF(2, "lw_dist2d_pt_ptarray: distance from first point ? : %.15g", dl->distance);
1125 
1126  for (uint32_t t = 1; t < pa->npoints; t++)
1127  {
1128  dl->twisted = twist;
1129  end = getPoint2d_cp(pa, t);
1130  if (!lw_dist2d_pt_seg(p, start, end, dl))
1131  return LW_FALSE;
1132 
1133  LWDEBUGF(2, "lw_dist2d_pt_ptarray: distance from seg %u ? : %.15g", t, dl->distance);
1134 
1135  if (dl->distance <= dl->tolerance && dl->mode == DIST_MIN)
1136  return LW_TRUE; /*just a check if the answer is already given*/
1137  start = end;
1138  }
1139 
1140  return LW_TRUE;
1141 }
#define LW_FALSE
Definition: liblwgeom.h:94
#define LW_TRUE
Return types for functions with status returns.
Definition: liblwgeom.h:93
#define LWDEBUG(level, msg)
Definition: lwgeom_log.h:101
#define LWDEBUGF(level, msg,...)
Definition: lwgeom_log.h:106
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
int lw_dist2d_pt_seg(const POINT2D *p, const POINT2D *A, const POINT2D *B, DISTPTS *dl)
lw_dist2d_comp from p to line A->B This one is now sending every occasion to lw_dist2d_pt_pt Before i...
Definition: measures.c:2217
int lw_dist2d_pt_pt(const POINT2D *thep1, const POINT2D *thep2, DISTPTS *dl)
Compares incoming points and stores the points closest to each other or most far away from each other...
Definition: measures.c:2312
#define DIST_MIN
Definition: measures.h:44
int twisted
Definition: measures.h:55
double tolerance
Definition: measures.h:56
int mode
Definition: measures.h:54
double distance
Definition: measures.h:51
uint32_t npoints
Definition: liblwgeom.h:427

References DIST_MIN, DISTPTS::distance, getPoint2d_cp(), lw_dist2d_pt_pt(), lw_dist2d_pt_seg(), LW_FALSE, LW_TRUE, LWDEBUG, LWDEBUGF, DISTPTS::mode, POINTARRAY::npoints, DISTPTS::tolerance, and DISTPTS::twisted.

Referenced by lw_dist2d_point_line(), lw_dist2d_point_poly(), and lw_dist2d_point_tri().

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