PostGIS  3.0.6dev-r@@SVN_REVISION@@

◆ ST_Split()

Datum ST_Split ( PG_FUNCTION_ARGS  )

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

3184 {
3185  GSERIALIZED *in, *blade_in, *out;
3186  LWGEOM *lwgeom_in, *lwblade_in, *lwgeom_out;
3187 
3188  in = PG_GETARG_GSERIALIZED_P(0);
3189  blade_in = PG_GETARG_GSERIALIZED_P(1);
3190  gserialized_error_if_srid_mismatch(in, blade_in, __func__);
3191 
3192  lwgeom_in = lwgeom_from_gserialized(in);
3193  lwblade_in = lwgeom_from_gserialized(blade_in);
3194 
3195  if (!lwgeom_isfinite(lwgeom_in))
3196  {
3197  lwpgerror("Input Geometry contains invalid coordinates");
3198  PG_RETURN_NULL();
3199  }
3200 
3201  if (!lwgeom_isfinite(lwblade_in))
3202  {
3203  lwpgerror("Blade Geometry contains invalid coordinates");
3204  PG_RETURN_NULL();
3205  }
3206 
3207 
3208  lwgeom_out = lwgeom_split(lwgeom_in, lwblade_in);
3209  lwgeom_free(lwgeom_in);
3210  lwgeom_free(lwblade_in);
3211 
3212  if ( ! lwgeom_out )
3213  {
3214  PG_FREE_IF_COPY(in, 0); /* possibly referenced by lwgeom_out */
3215  PG_FREE_IF_COPY(blade_in, 1);
3216  PG_RETURN_NULL();
3217  }
3218 
3219  out = geometry_serialize(lwgeom_out);
3220  lwgeom_free(lwgeom_out);
3221  PG_FREE_IF_COPY(in, 0); /* possibly referenced by lwgeom_out */
3222  PG_FREE_IF_COPY(blade_in, 1);
3223 
3224  PG_RETURN_POINTER(out);
3225 }
void gserialized_error_if_srid_mismatch(const GSERIALIZED *g1, const GSERIALIZED *g2, const char *funcname)
Definition: gserialized.c:404
LWGEOM * lwgeom_from_gserialized(const GSERIALIZED *g)
Allocate a new LWGEOM from a GSERIALIZED.
Definition: gserialized.c:239
void lwgeom_free(LWGEOM *geom)
Definition: lwgeom.c:1138
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:2529
GSERIALIZED * geometry_serialize(LWGEOM *lwgeom)

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

Here is the call graph for this function: