PostGIS  2.2.8dev-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 838 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().

839 {
840  POINT4D p, p_proj;
841  double ret = 0.0;
843  if ( ! lwin )
844  lwerror("lwgeom_interpolate_point: null input geometry!");
846  if ( ! lwgeom_has_m(lwin) )
847  lwerror("Input geometry does not have a measure dimension");
849  if ( lwgeom_is_empty(lwin) || lwpoint_is_empty(lwpt) )
850  lwerror("Input geometry is empty");
852  switch ( lwin->type )
853  {
854  case LINETYPE:
855  {
856  LWLINE *lwline = lwgeom_as_lwline(lwin);
857  lwpoint_getPoint4d_p(lwpt, &p);
858  ret = ptarray_locate_point(lwline->points, &p, NULL, &p_proj);
859  ret = p_proj.m;
860  break;
861  }
862  default:
863  lwerror("This function does not accept %s geometries.", lwtype_name(lwin->type));
864  }
865  return ret;
866 }
#define LINETYPE
Definition: liblwgeom.h:71
double m
Definition: liblwgeom.h:336
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:188
int lwpoint_getPoint4d_p(const LWPOINT *point, POINT4D *out)
Definition: lwpoint.c:44
LWLINE * lwgeom_as_lwline(const LWGEOM *lwgeom)
Definition: lwgeom.c:89
int lwpoint_is_empty(const LWPOINT *point)
Definition: lwpoint.c:260
uint8_t type
Definition: liblwgeom.h:380
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:1297
int lwgeom_has_m(const LWGEOM *geom)
Return LW_TRUE if geometry has M ordinates.
Definition: lwgeom.c:843
void lwerror(const char *fmt,...)
Write a notice out to the error handler.
Definition: lwutil.c:74
Definition: liblwgeom.h:406
Here is the call graph for this function:
Here is the caller graph for this function: