PostGIS  3.1.6dev-r@@SVN_REVISION@@

◆ LWGEOM_removepoint()

Datum LWGEOM_removepoint ( PG_FUNCTION_ARGS  )

Definition at line 2268 of file lwgeom_functions_basic.c.

2269 {
2270  GSERIALIZED *pglwg1, *result;
2271  LWLINE *line, *outline;
2272  int32 which;
2273 
2274  POSTGIS_DEBUG(2, "LWGEOM_removepoint called.");
2275 
2276  pglwg1 = PG_GETARG_GSERIALIZED_P(0);
2277  which = PG_GETARG_INT32(1);
2278 
2279  if (gserialized_get_type(pglwg1) != LINETYPE)
2280  {
2281  elog(ERROR, "First argument must be a LINESTRING");
2282  PG_RETURN_NULL();
2283  }
2284 
2285  line = lwgeom_as_lwline(lwgeom_from_gserialized(pglwg1));
2286 
2287  if (which < 0 || (uint32_t)which > line->points->npoints - 1)
2288  {
2289  elog(ERROR, "Point index out of range (%u..%u)", 0, line->points->npoints - 1);
2290  PG_RETURN_NULL();
2291  }
2292 
2293  if (line->points->npoints < 3)
2294  {
2295  elog(ERROR, "Can't remove points from a single segment line");
2296  PG_RETURN_NULL();
2297  }
2298 
2299  outline = lwline_removepoint(line, (uint32_t)which);
2300  /* Release memory */
2301  lwline_free(line);
2302 
2303  result = geometry_serialize((LWGEOM *)outline);
2305 
2306  PG_FREE_IF_COPY(pglwg1, 0);
2307  PG_RETURN_POINTER(result);
2308 }
char result[OUT_DOUBLE_BUFFER_SIZE]
Definition: cu_print.c:267
LWGEOM * lwgeom_from_gserialized(const GSERIALIZED *g)
Allocate a new LWGEOM from a GSERIALIZED.
Definition: gserialized.c:239
uint32_t gserialized_get_type(const GSERIALIZED *g)
Extract the geometry type from the serialized form (it hides in the anonymous data area,...
Definition: gserialized.c:89
LWLINE * lwgeom_as_lwline(const LWGEOM *lwgeom)
Definition: lwgeom.c:162
#define LINETYPE
Definition: liblwgeom.h:117
LWLINE * lwline_removepoint(LWLINE *line, uint32_t which)
Definition: lwline.c:347
void lwline_free(LWLINE *line)
Definition: lwline.c:67
unsigned int int32
Definition: shpopen.c:54
POINTARRAY * points
Definition: liblwgeom.h:497
uint32_t npoints
Definition: liblwgeom.h:441

References gserialized_get_type(), LINETYPE, lwgeom_as_lwline(), lwgeom_from_gserialized(), lwline_free(), lwline_removepoint(), POINTARRAY::npoints, genraster::outline, LWLINE::points, and result.

Here is the call graph for this function: