PostGIS  3.1.6dev-r@@SVN_REVISION@@

◆ LWGEOM_FilterByM()

Datum LWGEOM_FilterByM ( PG_FUNCTION_ARGS  )

Definition at line 3129 of file lwgeom_functions_basic.c.

3130 {
3131  GSERIALIZED *geom_in;
3132  GSERIALIZED *geom_out;
3133  LWGEOM *lwgeom_in;
3134  LWGEOM *lwgeom_out;
3135  double min, max;
3136  int returnm;
3137  int hasm;
3138 
3139  if (PG_NARGS() > 0 && !PG_ARGISNULL(0))
3140  {
3141  geom_in = PG_GETARG_GSERIALIZED_P(0);
3142  }
3143  else
3144  {
3145  PG_RETURN_NULL();
3146  }
3147 
3148  if (PG_NARGS() > 1 && !PG_ARGISNULL(1))
3149  min = PG_GETARG_FLOAT8(1);
3150  else
3151  {
3152  min = DBL_MIN;
3153  }
3154  if (PG_NARGS() > 2 && !PG_ARGISNULL(2))
3155  max = PG_GETARG_FLOAT8(2);
3156  else
3157  {
3158  max = DBL_MAX;
3159  }
3160  if (PG_NARGS() > 3 && !PG_ARGISNULL(3) && PG_GETARG_BOOL(3))
3161  returnm = 1;
3162  else
3163  {
3164  returnm = 0;
3165  }
3166 
3167  if (min > max)
3168  {
3169  elog(ERROR, "Min-value cannot be larger than Max value\n");
3170  PG_RETURN_NULL();
3171  }
3172 
3173  lwgeom_in = lwgeom_from_gserialized(geom_in);
3174 
3175  hasm = lwgeom_has_m(lwgeom_in);
3176 
3177  if (!hasm)
3178  {
3179  elog(NOTICE, "No M-value, No vertex removed\n");
3180  PG_RETURN_POINTER(geom_in);
3181  }
3182 
3183  lwgeom_out = lwgeom_filter_m(lwgeom_in, min, max, returnm);
3184 
3185  geom_out = geometry_serialize(lwgeom_out);
3186  lwgeom_free(lwgeom_out);
3187  PG_RETURN_POINTER(geom_out);
3188 }
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_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:924

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

Here is the call graph for this function: