PostGIS  3.7.0dev-r@@SVN_REVISION@@

◆ ST_Split()

Datum ST_Split ( PG_FUNCTION_ARGS  )

Definition at line 2356 of file postgis/lwgeom_geos.c.

2357 {
2358  GSERIALIZED *in, *blade_in, *out;
2359  LWGEOM *lwgeom_in, *lwblade_in, *lwgeom_out;
2360 
2361  in = PG_GETARG_GSERIALIZED_P(0);
2362  blade_in = PG_GETARG_GSERIALIZED_P(1);
2363  gserialized_error_if_srid_mismatch(in, blade_in, __func__);
2364 
2365  lwgeom_in = lwgeom_from_gserialized(in);
2366  lwblade_in = lwgeom_from_gserialized(blade_in);
2367 
2368  if (!lwgeom_isfinite(lwgeom_in))
2369  {
2370  lwpgerror("Input Geometry contains invalid coordinates");
2371  PG_RETURN_NULL();
2372  }
2373 
2374  if (!lwgeom_isfinite(lwblade_in))
2375  {
2376  lwpgerror("Blade Geometry contains invalid coordinates");
2377  PG_RETURN_NULL();
2378  }
2379 
2380 
2381  lwgeom_out = lwgeom_split(lwgeom_in, lwblade_in);
2382  lwgeom_free(lwgeom_in);
2383  lwgeom_free(lwblade_in);
2384 
2385  if ( ! lwgeom_out )
2386  {
2387  PG_FREE_IF_COPY(in, 0); /* possibly referenced by lwgeom_out */
2388  PG_FREE_IF_COPY(blade_in, 1);
2389  PG_RETURN_NULL();
2390  }
2391 
2392  out = geometry_serialize(lwgeom_out);
2393  lwgeom_free(lwgeom_out);
2394  PG_FREE_IF_COPY(in, 0); /* possibly referenced by lwgeom_out */
2395  PG_FREE_IF_COPY(blade_in, 1);
2396 
2397  PG_RETURN_POINTER(out);
2398 }
void gserialized_error_if_srid_mismatch(const GSERIALIZED *g1, const GSERIALIZED *g2, const char *funcname)
Definition: gserialized.c:432
LWGEOM * lwgeom_from_gserialized(const GSERIALIZED *g)
Allocate a new LWGEOM from a GSERIALIZED.
Definition: gserialized.c:268
void lwgeom_free(LWGEOM *geom)
Definition: lwgeom.c:1218
LWGEOM * lwgeom_split(const LWGEOM *lwgeom_in, const LWGEOM *blade_in)
int lwgeom_isfinite(const LWGEOM *lwgeom)
Check if a LWGEOM has any non-finite (NaN or Inf) coordinates.
Definition: lwgeom.c:2807

References gserialized_error_if_srid_mismatch(), lwgeom_free(), lwgeom_from_gserialized(), lwgeom_isfinite(), and lwgeom_split().

Here is the call graph for this function: