PostGIS  2.2.8dev-r@@SVN_REVISION@@

◆ ST_LineCrossingDirection()

Datum ST_LineCrossingDirection ( PG_FUNCTION_ARGS  )

Definition at line 431 of file lwgeom_functions_analytic.c.

References error_if_srid_mismatch(), gserialized_get_srid(), gserialized_get_type(), LINETYPE, lwgeom_as_lwline(), lwgeom_from_gserialized(), LWGEOM_line_substring(), lwline_crossing_direction(), and PG_FUNCTION_INFO_V1().

Referenced by LWGEOM_snaptogrid_pointoff().

432 {
433  int type1, type2, rv;
434  LWLINE *l1 = NULL;
435  LWLINE *l2 = NULL;
436  GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0);
437  GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1);
438 
440 
441  type1 = gserialized_get_type(geom1);
442  type2 = gserialized_get_type(geom2);
443 
444  if ( type1 != LINETYPE || type2 != LINETYPE )
445  {
446  elog(ERROR,"This function only accepts LINESTRING as arguments.");
447  PG_RETURN_NULL();
448  }
449 
452 
453  rv = lwline_crossing_direction(l1, l2);
454 
455  PG_FREE_IF_COPY(geom1, 0);
456  PG_FREE_IF_COPY(geom2, 1);
457 
458  PG_RETURN_INT32(rv);
459 
460 }
#define LINETYPE
Definition: liblwgeom.h:71
uint32_t gserialized_get_type(const GSERIALIZED *s)
Extract the geometry type from the serialized form (it hides in the anonymous data area...
Definition: g_serialized.c:55
LWGEOM * lwgeom_from_gserialized(const GSERIALIZED *g)
Allocate a new LWGEOM from a GSERIALIZED.
int lwline_crossing_direction(const LWLINE *l1, const LWLINE *l2)
Given two lines, characterize how (and if) they cross each other.
Definition: lwalgorithm.c:446
void error_if_srid_mismatch(int srid1, int srid2)
Definition: lwutil.c:341
LWLINE * lwgeom_as_lwline(const LWGEOM *lwgeom)
Definition: lwgeom.c:89
int32_t gserialized_get_srid(const GSERIALIZED *s)
Extract the SRID from the serialized form (it is packed into three bytes so this is a handy function)...
Definition: g_serialized.c:69
Here is the call graph for this function:
Here is the caller graph for this function: