PostGIS  2.1.10dev-r@@SVN_REVISION@@
LWGEOM* lwgeom_locate_along ( const LWGEOM lwin,
double  m,
double  offset 
)

Determine the location(s) along a measured line where m occurs and return as a multipoint.

Offset to left (positive) or right (negative).

Definition at line 195 of file lwlinearreferencing.c.

References LINETYPE, lwerror(), lwgeom_has_m(), lwline_locate_along(), lwmline_locate_along(), lwmpoint_locate_along(), lwpoint_locate_along(), lwtype_name(), MULTILINETYPE, MULTIPOINTTYPE, POINTTYPE, and LWGEOM::type.

Referenced by ST_LocateAlong(), and test_lwgeom_locate_along().

196 {
197  if ( ! lwin ) return NULL;
198 
199  if ( ! lwgeom_has_m(lwin) )
200  lwerror("Input geometry does not have a measure dimension");
201 
202  switch (lwin->type)
203  {
204  case POINTTYPE:
205  return (LWGEOM*)lwpoint_locate_along((LWPOINT*)lwin, m, offset);
206  case MULTIPOINTTYPE:
207  return (LWGEOM*)lwmpoint_locate_along((LWMPOINT*)lwin, m, offset);
208  case LINETYPE:
209  return (LWGEOM*)lwline_locate_along((LWLINE*)lwin, m, offset);
210  case MULTILINETYPE:
211  return (LWGEOM*)lwmline_locate_along((LWMLINE*)lwin, m, offset);
212  /* Only line types supported right now */
213  /* TO DO: CurveString, CompoundCurve, MultiCurve */
214  /* TO DO: Point, MultiPoint */
215  default:
216  lwerror("Only linear geometries are supported, %s provided.",lwtype_name(lwin->type));
217  return NULL;
218  }
219  return NULL;
220 }
#define LINETYPE
Definition: liblwgeom.h:61
static LWMPOINT * lwline_locate_along(const LWLINE *lwline, double m, double offset)
#define MULTIPOINTTYPE
Definition: liblwgeom.h:63
void lwerror(const char *fmt,...)
Write a notice out to the error handler.
Definition: lwutil.c:67
const char * lwtype_name(uint8_t type)
Return the type name string associated with a type number (e.g.
Definition: lwutil.c:164
static LWMPOINT * lwmline_locate_along(const LWMLINE *lwmline, double m, double offset)
static LWMPOINT * lwmpoint_locate_along(const LWMPOINT *lwin, double m, double offset)
#define POINTTYPE
LWTYPE numbers, used internally by PostGIS.
Definition: liblwgeom.h:60
uint8_t type
Definition: liblwgeom.h:352
#define MULTILINETYPE
Definition: liblwgeom.h:64
int lwgeom_has_m(const LWGEOM *geom)
Return LW_TRUE if geometry has M ordinates.
Definition: lwgeom.c:799
static LWMPOINT * lwpoint_locate_along(const LWPOINT *lwpoint, double m, double offset)

Here is the call graph for this function:

Here is the caller graph for this function: