PostGIS  2.3.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 218 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().

219 {
220  if ( ! lwin ) return NULL;
221 
222  if ( ! lwgeom_has_m(lwin) )
223  lwerror("Input geometry does not have a measure dimension");
224 
225  switch (lwin->type)
226  {
227  case POINTTYPE:
228  return (LWGEOM*)lwpoint_locate_along((LWPOINT*)lwin, m, offset);
229  case MULTIPOINTTYPE:
230  return (LWGEOM*)lwmpoint_locate_along((LWMPOINT*)lwin, m, offset);
231  case LINETYPE:
232  return (LWGEOM*)lwline_locate_along((LWLINE*)lwin, m, offset);
233  case MULTILINETYPE:
234  return (LWGEOM*)lwmline_locate_along((LWMLINE*)lwin, m, offset);
235  /* Only line types supported right now */
236  /* TO DO: CurveString, CompoundCurve, MultiCurve */
237  /* TO DO: Point, MultiPoint */
238  default:
239  lwerror("Only linear geometries are supported, %s provided.",lwtype_name(lwin->type));
240  return NULL;
241  }
242  return NULL;
243 }
#define LINETYPE
Definition: liblwgeom.h:85
static LWMPOINT * lwline_locate_along(const LWLINE *lwline, double m, double offset)
#define MULTIPOINTTYPE
Definition: liblwgeom.h:87
const char * lwtype_name(uint8_t type)
Return the type name string associated with a type number (e.g.
Definition: lwutil.c:216
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:84
uint8_t type
Definition: liblwgeom.h:395
#define MULTILINETYPE
Definition: liblwgeom.h:88
int lwgeom_has_m(const LWGEOM *geom)
Return LW_TRUE if geometry has M ordinates.
Definition: lwgeom.c:856
void lwerror(const char *fmt,...)
Write a notice out to the error handler.
Definition: lwutil.c:102
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: