120{
125 size_t gser_size;
127
128 bool minhull =
FALSE;
129
130 if (PG_ARGISNULL(0))
131 PG_RETURN_NULL();
132
133
134 if (PG_NARGS() > 1)
136
137 if (!minhull) {
140 }
141 else {
142 pgraster = (
rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
144 }
145
146 if (!raster) {
147 PG_FREE_IF_COPY(pgraster, 0);
148 elog(ERROR, "RASTER_convex_hull: Could not deserialize raster");
149 PG_RETURN_NULL();
150 }
151
152 if (!minhull)
154 else {
156
157
158 if (!PG_ARGISNULL(1)) {
159 nband = PG_GETARG_INT32(1);
161 elog(NOTICE, "Invalid band index (must use 1-based). Returning NULL");
163 PG_FREE_IF_COPY(pgraster, 0);
164 PG_RETURN_NULL();
165 }
167 }
168
170 }
171
173 PG_FREE_IF_COPY(pgraster, 0);
174
176 elog(ERROR, "RASTER_convex_hull: Could not get raster's convex hull");
177 PG_RETURN_NULL();
178 }
179 else if (geom == NULL) {
180 elog(NOTICE, "Raster's convex hull is NULL");
181 PG_RETURN_NULL();
182 }
183
186
187 SET_VARSIZE(gser, gser_size);
188 PG_RETURN_POINTER(gser);
189}
GSERIALIZED * gserialized_from_lwgeom(LWGEOM *geom, size_t *size)
Allocate a new GSERIALIZED from an LWGEOM.
void lwgeom_free(LWGEOM *geom)
void rt_raster_destroy(rt_raster raster)
Release memory associated to a raster.
int rt_raster_has_band(rt_raster raster, int nband)
Return TRUE if the raster has a band of this number.
rt_errorstate rt_raster_get_convex_hull(rt_raster raster, LWGEOM **hull)
Get raster's convex hull.
rt_errorstate rt_raster_get_perimeter(rt_raster raster, int nband, LWGEOM **perimeter)
Get raster perimeter.
rt_raster rt_raster_deserialize(void *serialized, int header_only)
Return a raster from a serialized form.
raster
Be careful!! Zeros function's input parameter can be a (height x width) array, not (width x height): ...