PostGIS  2.5.2dev-r@@SVN_REVISION@@

## ◆ lw_dist3d_point_poly()

 int lw_dist3d_point_poly ( LWPOINT * point, LWPOLY * poly, DISTPTS3D * dl )

Computes point to polygon distance For mindistance that means: 1)find the plane of the polygon 2)projecting the point to the plane of the polygon 3)finding if that projected point is inside the polygon, if so the distance is measured to that projected point 4) if not in polygon above, check the distance against the boundary of the polygon for max distance it is always point against boundary.

Definition at line 619 of file measures3d.c.

Referenced by lw_dist3d_distribute_bruteforce().

620 {
621  POINT3DZ p, projp;/*projp is "point projected on plane"*/
622  PLANE3D plane;
623  LWDEBUG(2, "lw_dist3d_point_poly is called");
624  getPoint3dz_p(point->point, 0, &p);
625
626  /*If we are looking for max distance, longestline or dfullywithin*/
627  if (dl->mode == DIST_MAX)
628  {
629  LWDEBUG(3, "looking for maxdistance");
630  return lw_dist3d_pt_ptarray(&p, poly->rings[0], dl);
631  }
632
633  /*Find the plane of the polygon, the "holes" have to be on the same plane. so we only care about the boudary*/
634  if(!define_plane(poly->rings[0], &plane))
635  {
636  /* Polygon does not define a plane: Return distance point -> line */
637  return lw_dist3d_pt_ptarray(&p, poly->rings[0], dl);
638  }
639
640  /*get our point projected on the plane of the polygon*/
641  project_point_on_plane(&p, &plane, &projp);
642
643  return lw_dist3d_pt_poly(&p, poly,&plane, &projp, dl);
644 }
#define LWDEBUG(level, msg)
Definition: lwgeom_log.h:83
POINTARRAY * point
Definition: liblwgeom.h:413
double project_point_on_plane(POINT3DZ *p, PLANE3D *pl, POINT3DZ *p0)
Finds a point on a plane from where the original point is perpendicular to the plane.
Definition: measures3d.c:1231
int lw_dist3d_pt_poly(POINT3DZ *p, LWPOLY *poly, PLANE3D *plane, POINT3DZ *projp, DISTPTS3D *dl)
Checking if the point projected on the plane of the polygon actually is inside that polygon...
Definition: measures3d.c:1040
POINTARRAY ** rings
Definition: liblwgeom.h:459
int mode
Definition: measures3d.h:44
int define_plane(POINTARRAY *pa, PLANE3D *pl)
Definition: measures3d.c:1167
int getPoint3dz_p(const POINTARRAY *pa, uint32_t n, POINT3DZ *point)
Definition: lwgeom_api.c:215
#define DIST_MAX
Definition: measures.h:43
int lw_dist3d_pt_ptarray(POINT3DZ *p, POINTARRAY *pa, DISTPTS3D *dl)
search all the segments of pointarray to see which one is closest to p Returns distance between point...
Definition: measures3d.c:737
Here is the call graph for this function:
Here is the caller graph for this function: