PostGIS  2.3.7dev-r@@SVN_REVISION@@
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 852 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().

853 {
854  POINT4D p, p_proj;
855  double ret = 0.0;
857  if ( ! lwin )
858  lwerror("lwgeom_interpolate_point: null input geometry!");
860  if ( ! lwgeom_has_m(lwin) )
861  lwerror("Input geometry does not have a measure dimension");
863  if ( lwgeom_is_empty(lwin) || lwpoint_is_empty(lwpt) )
864  lwerror("Input geometry is empty");
866  switch ( lwin->type )
867  {
868  case LINETYPE:
869  {
870  LWLINE *lwline = lwgeom_as_lwline(lwin);
871  lwpoint_getPoint4d_p(lwpt, &p);
872  ret = ptarray_locate_point(lwline->points, &p, NULL, &p_proj);
873  ret = p_proj.m;
874  break;
875  }
876  default:
877  lwerror("This function does not accept %s geometries.", lwtype_name(lwin->type));
878  }
879  return ret;
880 }
#define LINETYPE
Definition: liblwgeom.h:85
double m
Definition: liblwgeom.h:351
double ptarray_locate_point(const POINTARRAY *pa, const POINT4D *pt, double *dist, POINT4D *p_located)
Definition: ptarray.c:1303
const char * lwtype_name(uint8_t type)
Return the type name string associated with a type number (e.g.
Definition: lwutil.c:216
int lwpoint_getPoint4d_p(const LWPOINT *point, POINT4D *out)
Definition: lwpoint.c:57
LWLINE * lwgeom_as_lwline(const LWGEOM *lwgeom)
Definition: lwgeom.c:102
int lwpoint_is_empty(const LWPOINT *point)
Definition: lwpoint.c:273
uint8_t type
Definition: liblwgeom.h:395
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:1310
int lwgeom_has_m(const LWGEOM *geom)
Return LW_TRUE if geometry has M ordinates.
Definition: lwgeom.c:856
void lwerror(const char *fmt,...)
Write a notice out to the error handler.
Definition: lwutil.c:102
Definition: liblwgeom.h:421

Here is the call graph for this function:

Here is the caller graph for this function: