PostGIS  2.5.1dev-r@@SVN_REVISION@@

◆ lwgeom_interpolate_point()

double lwgeom_interpolate_point ( const LWGEOM lwin,
const LWPOINT lwpt 

Find the measure value at the location on the line closest to the point.

Definition at line 857 of file lwlinearreferencing.c.

References LINETYPE, lwerror(), lwgeom_as_lwline(), lwgeom_has_m(), lwgeom_is_empty(), lwpoint_getPoint4d_p(), lwpoint_is_empty(), lwtype_name(), POINT4D::m, LWLINE::points, ptarray_locate_point(), and LWGEOM::type.

Referenced by gserialized_distance_nd(), and ST_InterpolatePoint().

858 {
859  POINT4D p, p_proj;
860  double ret = 0.0;
862  if ( ! lwin )
863  lwerror("lwgeom_interpolate_point: null input geometry!");
865  if ( ! lwgeom_has_m(lwin) )
866  lwerror("Input geometry does not have a measure dimension");
868  if ( lwgeom_is_empty(lwin) || lwpoint_is_empty(lwpt) )
869  lwerror("Input geometry is empty");
871  switch ( lwin->type )
872  {
873  case LINETYPE:
874  {
875  LWLINE *lwline = lwgeom_as_lwline(lwin);
876  lwpoint_getPoint4d_p(lwpt, &p);
877  ret = ptarray_locate_point(lwline->points, &p, NULL, &p_proj);
878  ret = p_proj.m;
879  break;
880  }
881  default:
882  lwerror("This function does not accept %s geometries.", lwtype_name(lwin->type));
883  }
884  return ret;
885 }
#define LINETYPE
Definition: liblwgeom.h:85
double m
Definition: liblwgeom.h:354
double ptarray_locate_point(const POINTARRAY *pa, const POINT4D *pt, double *dist, POINT4D *p_located)
Definition: ptarray.c:1305
const char * lwtype_name(uint8_t type)
Return the type name string associated with a type number (e.g.
Definition: lwutil.c:218
int lwpoint_getPoint4d_p(const LWPOINT *point, POINT4D *out)
Definition: lwpoint.c:57
LWLINE * lwgeom_as_lwline(const LWGEOM *lwgeom)
Definition: lwgeom.c:170
int lwpoint_is_empty(const LWPOINT *point)
Definition: lwpoint.c:291
uint8_t type
Definition: liblwgeom.h:398
int lwgeom_is_empty(const LWGEOM *geom)
Return true or false depending on whether a geometry is an "empty" geometry (no vertices members) ...
Definition: lwgeom.c:1393
int lwgeom_has_m(const LWGEOM *geom)
Return LW_TRUE if geometry has M ordinates.
Definition: lwgeom.c:937
void lwerror(const char *fmt,...)
Write a notice out to the error handler.
Definition: lwutil.c:190
Definition: liblwgeom.h:424
Here is the call graph for this function:
Here is the caller graph for this function: