PostGIS  2.4.9dev-r@@SVN_REVISION@@

◆ LWGEOM_endpoint_linestring()

Datum LWGEOM_endpoint_linestring ( PG_FUNCTION_ARGS  )

Definition at line 749 of file lwgeom_ogc.c.

References CIRCSTRINGTYPE, COMPOUNDTYPE, geometry_serialize(), LINETYPE, lwcompound_get_endpoint(), lwgeom_free(), lwgeom_from_gserialized(), LWGEOM_from_text(), lwline_get_lwpoint(), lwpoint_as_lwgeom(), POINTARRAY::npoints, PG_FUNCTION_INFO_V1(), LWLINE::points, ovdump::type, and LWGEOM::type.

Referenced by LWGEOM_startpoint_linestring().

750 {
751  GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
752  LWGEOM *lwgeom = lwgeom_from_gserialized(geom);
753  LWPOINT *lwpoint = NULL;
754  int type = lwgeom->type;
755 
756  if ( type == LINETYPE || type == CIRCSTRINGTYPE )
757  {
758  LWLINE *line = (LWLINE*)lwgeom;
759  if ( line->points )
760  lwpoint = lwline_get_lwpoint((LWLINE*)lwgeom, line->points->npoints - 1);
761  }
762  else if ( type == COMPOUNDTYPE )
763  {
764  lwpoint = lwcompound_get_endpoint((LWCOMPOUND*)lwgeom);
765  }
766 
767  lwgeom_free(lwgeom);
768  PG_FREE_IF_COPY(geom, 0);
769 
770  if ( ! lwpoint )
771  PG_RETURN_NULL();
772 
773  PG_RETURN_POINTER(geometry_serialize(lwpoint_as_lwgeom(lwpoint)));
774 }
#define LINETYPE
Definition: liblwgeom.h:86
LWGEOM * lwgeom_from_gserialized(const GSERIALIZED *g)
Allocate a new LWGEOM from a GSERIALIZED.
int npoints
Definition: liblwgeom.h:371
void lwgeom_free(LWGEOM *geom)
Definition: lwgeom.c:1099
#define COMPOUNDTYPE
Definition: liblwgeom.h:93
LWPOINT * lwcompound_get_endpoint(const LWCOMPOUND *lwcmp)
Definition: lwcompound.c:254
GSERIALIZED * geometry_serialize(LWGEOM *lwgeom)
LWPOINT * lwline_get_lwpoint(const LWLINE *line, int where)
Returns freshly allocated LWPOINT that corresponds to the index where.
Definition: lwline.c:324
uint8_t type
Definition: liblwgeom.h:396
type
Definition: ovdump.py:41
LWGEOM * lwpoint_as_lwgeom(const LWPOINT *obj)
Definition: lwgeom.c:303
#define CIRCSTRINGTYPE
Definition: liblwgeom.h:92
POINTARRAY * points
Definition: liblwgeom.h:422
Here is the call graph for this function:
Here is the caller graph for this function: