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;
834  if ( ! lwin )
835  lwerror("lwgeom_interpolate_point: null input geometry!");
837  if ( ! lwgeom_has_m(lwin) )
838  lwerror("Input geometry does not have a measure dimension");
840  if ( lwgeom_is_empty(lwin) || lwpoint_is_empty(lwpt) )
841  lwerror("Input geometry is empty");
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
Definition: liblwgeom.h:378

Here is the call graph for this function:

Here is the caller graph for this function: