PostGIS  2.3.8dev-r@@SVN_REVISION@@

◆ lwgeom_locate_along()

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 217 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, LWGEOM::type, and LWMLINE::type.

Referenced by ST_LocateAlong(), and test_lwgeom_locate_along().

218 {
219  if ( ! lwin ) return NULL;
220 
221  if ( ! lwgeom_has_m(lwin) )
222  lwerror("Input geometry does not have a measure dimension");
223 
224  switch (lwin->type)
225  {
226  case POINTTYPE:
227  return (LWGEOM*)lwpoint_locate_along((LWPOINT*)lwin, m, offset);
228  case MULTIPOINTTYPE:
229  return (LWGEOM*)lwmpoint_locate_along((LWMPOINT*)lwin, m, offset);
230  case LINETYPE:
231  return (LWGEOM*)lwline_locate_along((LWLINE*)lwin, m, offset);
232  case MULTILINETYPE:
233  return (LWGEOM*)lwmline_locate_along((LWMLINE*)lwin, m, offset);
234  /* Only line types supported right now */
235  /* TO DO: CurveString, CompoundCurve, MultiCurve */
236  /* TO DO: Point, MultiPoint */
237  default:
238  lwerror("Only linear geometries are supported, %s provided.",lwtype_name(lwin->type));
239  return NULL;
240  }
241  return NULL;
242 }
#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: