PostGIS  2.1.10dev-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 829 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 ST_InterpolatePoint().

830 {
831  POINT4D p, p_proj;
832  double ret = 0.0;
833 
834  if ( ! lwin )
835  lwerror("lwgeom_interpolate_point: null input geometry!");
836 
837  if ( ! lwgeom_has_m(lwin) )
838  lwerror("Input geometry does not have a measure dimension");
839 
840  if ( lwgeom_is_empty(lwin) || lwpoint_is_empty(lwpt) )
841  lwerror("Input geometry is empty");
842 
843  switch ( lwin->type )
844  {
845  case LINETYPE:
846  {
847  LWLINE *lwline = lwgeom_as_lwline(lwin);
848  lwpoint_getPoint4d_p(lwpt, &p);
849  ret = ptarray_locate_point(lwline->points, &p, NULL, &p_proj);
850  ret = p_proj.m;
851  break;
852  }
853  default:
854  lwerror("This function does not accept %s geometries.", lwtype_name(lwin->type));
855  }
856  return ret;
857 }
#define LINETYPE
Definition: liblwgeom.h:61
double m
Definition: liblwgeom.h:308
void lwerror(const char *fmt,...)
Write a notice out to the error handler.
Definition: lwutil.c:67
double ptarray_locate_point(const POINTARRAY *pa, const POINT4D *pt, double *dist, POINT4D *p_located)
Definition: ptarray.c:1267
const char * lwtype_name(uint8_t type)
Return the type name string associated with a type number (e.g.
Definition: lwutil.c:164
int lwpoint_getPoint4d_p(const LWPOINT *point, POINT4D *out)
Definition: lwpoint.c:42
LWLINE * lwgeom_as_lwline(const LWGEOM *lwgeom)
Definition: lwgeom.c:89
int lwpoint_is_empty(const LWPOINT *point)
Definition: lwpoint.c:258
uint8_t type
Definition: liblwgeom.h:352
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:1229
int lwgeom_has_m(const LWGEOM *geom)
Return LW_TRUE if geometry has M ordinates.
Definition: lwgeom.c:799
POINTARRAY * points
Definition: liblwgeom.h:378

Here is the call graph for this function:

Here is the caller graph for this function: