PostGIS 3.7.0dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches

◆ ST_Split()

Datum ST_Split ( PG_FUNCTION_ARGS  )

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

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

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

Here is the call graph for this function: