PostGIS  2.2.7dev-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 204 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().

205 {
206  if ( ! lwin ) return NULL;
207 
208  if ( ! lwgeom_has_m(lwin) )
209  lwerror("Input geometry does not have a measure dimension");
210 
211  switch (lwin->type)
212  {
213  case POINTTYPE:
214  return (LWGEOM*)lwpoint_locate_along((LWPOINT*)lwin, m, offset);
215  case MULTIPOINTTYPE:
216  return (LWGEOM*)lwmpoint_locate_along((LWMPOINT*)lwin, m, offset);
217  case LINETYPE:
218  return (LWGEOM*)lwline_locate_along((LWLINE*)lwin, m, offset);
219  case MULTILINETYPE:
220  return (LWGEOM*)lwmline_locate_along((LWMLINE*)lwin, m, offset);
221  /* Only line types supported right now */
222  /* TO DO: CurveString, CompoundCurve, MultiCurve */
223  /* TO DO: Point, MultiPoint */
224  default:
225  lwerror("Only linear geometries are supported, %s provided.",lwtype_name(lwin->type));
226  return NULL;
227  }
228  return NULL;
229 }
#define LINETYPE
Definition: liblwgeom.h:71
static LWMPOINT * lwline_locate_along(const LWLINE *lwline, double m, double offset)
#define MULTIPOINTTYPE
Definition: liblwgeom.h:73
const char * lwtype_name(uint8_t type)
Return the type name string associated with a type number (e.g.
Definition: lwutil.c:188
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:70
uint8_t type
Definition: liblwgeom.h:380
#define MULTILINETYPE
Definition: liblwgeom.h:74
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
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: