PostGIS  3.3.9dev-r@@SVN_REVISION@@

◆ LWGEOM_FilterByM()

Datum LWGEOM_FilterByM ( PG_FUNCTION_ARGS  )

Definition at line 3241 of file lwgeom_functions_basic.c.

3242 {
3243  GSERIALIZED *geom_in;
3244  GSERIALIZED *geom_out;
3245  LWGEOM *lwgeom_in;
3246  LWGEOM *lwgeom_out;
3247  double min, max;
3248  int returnm;
3249  int hasm;
3250 
3251  if (PG_NARGS() > 0 && !PG_ARGISNULL(0))
3252  {
3253  geom_in = PG_GETARG_GSERIALIZED_P(0);
3254  }
3255  else
3256  {
3257  PG_RETURN_NULL();
3258  }
3259 
3260  if (PG_NARGS() > 1 && !PG_ARGISNULL(1))
3261  min = PG_GETARG_FLOAT8(1);
3262  else
3263  {
3264  min = DBL_MIN;
3265  }
3266  if (PG_NARGS() > 2 && !PG_ARGISNULL(2))
3267  max = PG_GETARG_FLOAT8(2);
3268  else
3269  {
3270  max = DBL_MAX;
3271  }
3272  if (PG_NARGS() > 3 && !PG_ARGISNULL(3) && PG_GETARG_BOOL(3))
3273  returnm = 1;
3274  else
3275  {
3276  returnm = 0;
3277  }
3278 
3279  if (min > max)
3280  {
3281  elog(ERROR, "Min-value cannot be larger than Max value\n");
3282  PG_RETURN_NULL();
3283  }
3284 
3285  lwgeom_in = lwgeom_from_gserialized(geom_in);
3286 
3287  hasm = lwgeom_has_m(lwgeom_in);
3288 
3289  if (!hasm)
3290  {
3291  elog(NOTICE, "No M-value, No vertex removed\n");
3292  PG_RETURN_POINTER(geom_in);
3293  }
3294 
3295  lwgeom_out = lwgeom_filter_m(lwgeom_in, min, max, returnm);
3296 
3297  geom_out = geometry_serialize(lwgeom_out);
3298  lwgeom_free(lwgeom_out);
3299  PG_RETURN_POINTER(geom_out);
3300 }
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:1155
LWGEOM * lwgeom_filter_m(LWGEOM *geom, double min, double max, int returnm)
Definition: lwmval.c:221
int lwgeom_has_m(const LWGEOM *geom)
Return LW_TRUE if geometry has M ordinates.
Definition: lwgeom.c:941

References lwgeom_filter_m(), lwgeom_free(), lwgeom_from_gserialized(), and lwgeom_has_m().

Here is the call graph for this function: