PostGIS  3.0.6dev-r@@SVN_REVISION@@

◆ RASTER_envelope()

Datum RASTER_envelope ( PG_FUNCTION_ARGS  )

Definition at line 63 of file rtpg_geometry.c.

64 {
65  rt_pgraster *pgraster;
67  LWGEOM *geom = NULL;
68  GSERIALIZED* gser = NULL;
69  size_t gser_size;
70  int err = ES_NONE;
71 
72  if (PG_ARGISNULL(0))
73  PG_RETURN_NULL();
74 
75  pgraster = (rt_pgraster *) PG_DETOAST_DATUM_SLICE(
76  PG_GETARG_DATUM(0),
77  0,
78  sizeof(struct rt_raster_serialized_t)
79  );
80  raster = rt_raster_deserialize(pgraster, TRUE);
81 
82  if (!raster) {
83  PG_FREE_IF_COPY(pgraster, 0);
84  elog(ERROR, "RASTER_envelope: Could not deserialize raster");
85  PG_RETURN_NULL();
86  }
87 
88  err = rt_raster_get_envelope_geom(raster, &geom);
89 
91  PG_FREE_IF_COPY(pgraster, 0);
92 
93  if (err != ES_NONE) {
94  elog(ERROR, "RASTER_envelope: Could not get raster's envelope");
95  PG_RETURN_NULL();
96  }
97  else if (geom == NULL) {
98  elog(NOTICE, "Raster's envelope is NULL");
99  PG_RETURN_NULL();
100  }
101 
102  gser = gserialized_from_lwgeom(geom, &gser_size);
103  lwgeom_free(geom);
104 
105  SET_VARSIZE(gser, gser_size);
106  PG_RETURN_POINTER(gser);
107 }
#define TRUE
Definition: dbfopen.c:169
GSERIALIZED * gserialized_from_lwgeom(LWGEOM *geom, size_t *size)
Allocate a new GSERIALIZED from an LWGEOM.
Definition: gserialized.c:222
void lwgeom_free(LWGEOM *geom)
Definition: lwgeom.c:1138
void rt_raster_destroy(rt_raster raster)
Release memory associated to a raster.
Definition: rt_raster.c:82
@ ES_NONE
Definition: librtcore.h:180
rt_errorstate rt_raster_get_envelope_geom(rt_raster raster, LWGEOM **env)
Get raster's envelope as a geometry.
Definition: rt_geometry.c:670
rt_raster rt_raster_deserialize(void *serialized, int header_only)
Return a raster from a serialized form.
Definition: rt_serialize.c:725
raster
Be careful!! Zeros function's input parameter can be a (height x width) array, not (width x height): ...
Definition: rtrowdump.py:121
Struct definitions.
Definition: librtcore.h:2251

References ES_NONE, gserialized_from_lwgeom(), lwgeom_free(), rtrowdump::raster, rt_raster_deserialize(), rt_raster_destroy(), rt_raster_get_envelope_geom(), and TRUE.

Here is the call graph for this function: