PostGIS  3.0.6dev-r@@SVN_REVISION@@

◆ LWGEOM_FilterByM()

Datum LWGEOM_FilterByM ( PG_FUNCTION_ARGS  )

Definition at line 3115 of file lwgeom_functions_basic.c.

3116 {
3117  GSERIALIZED *geom_in;
3118  GSERIALIZED *geom_out;
3119  LWGEOM *lwgeom_in;
3120  LWGEOM *lwgeom_out;
3121  double min, max;
3122  int returnm;
3123  int hasm;
3124 
3125  if (PG_NARGS() > 0 && !PG_ARGISNULL(0))
3126  {
3127  geom_in = PG_GETARG_GSERIALIZED_P(0);
3128  }
3129  else
3130  {
3131  PG_RETURN_NULL();
3132  }
3133 
3134  if (PG_NARGS() > 1 && !PG_ARGISNULL(1))
3135  min = PG_GETARG_FLOAT8(1);
3136  else
3137  {
3138  min = DBL_MIN;
3139  }
3140  if (PG_NARGS() > 2 && !PG_ARGISNULL(2))
3141  max = PG_GETARG_FLOAT8(2);
3142  else
3143  {
3144  max = DBL_MAX;
3145  }
3146  if (PG_NARGS() > 3 && !PG_ARGISNULL(3) && PG_GETARG_BOOL(3))
3147  returnm = 1;
3148  else
3149  {
3150  returnm = 0;
3151  }
3152 
3153  if (min > max)
3154  {
3155  elog(ERROR, "Min-value cannot be larger than Max value\n");
3156  PG_RETURN_NULL();
3157  }
3158 
3159  lwgeom_in = lwgeom_from_gserialized(geom_in);
3160 
3161  hasm = lwgeom_has_m(lwgeom_in);
3162 
3163  if (!hasm)
3164  {
3165  elog(NOTICE, "No M-value, No vertex removed\n");
3166  PG_RETURN_POINTER(geom_in);
3167  }
3168 
3169  lwgeom_out = lwgeom_filter_m(lwgeom_in, min, max, returnm);
3170 
3171  geom_out = geometry_serialize(lwgeom_out);
3172  lwgeom_free(lwgeom_out);
3173  PG_RETURN_POINTER(geom_out);
3174 }
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:923
GSERIALIZED * geometry_serialize(LWGEOM *lwgeom)

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

Here is the call graph for this function: