PostGIS  2.5.0dev-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 858 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().

859 {
860  POINT4D p, p_proj;
861  double ret = 0.0;
863  if ( ! lwin )
864  lwerror("lwgeom_interpolate_point: null input geometry!");
866  if ( ! lwgeom_has_m(lwin) )
867  lwerror("Input geometry does not have a measure dimension");
869  if ( lwgeom_is_empty(lwin) || lwpoint_is_empty(lwpt) )
870  lwerror("Input geometry is empty");
872  switch ( lwin->type )
873  {
874  case LINETYPE:
875  {
876  LWLINE *lwline = lwgeom_as_lwline(lwin);
877  lwpoint_getPoint4d_p(lwpt, &p);
878  ret = ptarray_locate_point(lwline->points, &p, NULL, &p_proj);
879  ret = p_proj.m;
880  break;
881  }
882  default:
883  lwerror("This function does not accept %s geometries.", lwtype_name(lwin->type));
884  }
885  return ret;
886 }
#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:1298
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: