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

◆ 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.
void lwgeom_free(LWGEOM *geom)
Definition lwgeom.c:1138
int lwgeom_has_m(const LWGEOM *geom)
Return LW_TRUE if geometry has M ordinates.
Definition lwgeom.c:923
LWGEOM * lwgeom_filter_m(LWGEOM *geom, double min, double max, int returnm)
Definition lwmval.c:221
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: