PostGIS  3.3.9dev-r@@SVN_REVISION@@

◆ RASTER_getBandNoDataValue()

Datum RASTER_getBandNoDataValue ( PG_FUNCTION_ARGS  )

Definition at line 185 of file rtpg_band_properties.c.

186 {
187  rt_pgraster *pgraster = NULL;
188  rt_raster raster = NULL;
189  rt_band band = NULL;
190  int32_t bandindex;
191  double nodata;
192 
193  /* Deserialize raster */
194  if (PG_ARGISNULL(0)) PG_RETURN_NULL();
195  pgraster = (rt_pgraster *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
196 
197  /* Index is 1-based */
198  bandindex = PG_GETARG_INT32(1);
199  if ( bandindex < 1 ) {
200  elog(NOTICE, "Invalid band index (must use 1-based). Returning NULL");
201  PG_FREE_IF_COPY(pgraster, 0);
202  PG_RETURN_NULL();
203  }
204 
205  raster = rt_raster_deserialize(pgraster, FALSE);
206  if ( ! raster ) {
207  PG_FREE_IF_COPY(pgraster, 0);
208  elog(ERROR, "RASTER_getBandNoDataValue: Could not deserialize raster");
209  PG_RETURN_NULL();
210  }
211 
212  /* Fetch requested band and its nodata value */
213  band = rt_raster_get_band(raster, bandindex - 1);
214  if ( ! band ) {
215  elog(NOTICE, "Could not find raster band of index %d when getting band nodata value. Returning NULL", bandindex);
217  PG_FREE_IF_COPY(pgraster, 0);
218  PG_RETURN_NULL();
219  }
220 
221  if ( ! rt_band_get_hasnodata_flag(band) ) {
222  /* Raster does not have a nodata value set so we return NULL */
224  PG_FREE_IF_COPY(pgraster, 0);
225  PG_RETURN_NULL();
226  }
227 
228  rt_band_get_nodata(band, &nodata);
229 
231  PG_FREE_IF_COPY(pgraster, 0);
232 
233  PG_RETURN_FLOAT8(nodata);
234 }
#define FALSE
Definition: dbfopen.c:72
int rt_band_get_hasnodata_flag(rt_band band)
Get hasnodata flag value.
Definition: rt_band.c:674
void rt_raster_destroy(rt_raster raster)
Release memory associated to a raster.
Definition: rt_raster.c:86
rt_errorstate rt_band_get_nodata(rt_band band, double *nodata)
Get NODATA value.
Definition: rt_band.c:1887
rt_raster rt_raster_deserialize(void *serialized, int header_only)
Return a raster from a serialized form.
Definition: rt_serialize.c:725
rt_band rt_raster_get_band(rt_raster raster, int bandNum)
Return Nth band, or NULL if unavailable.
Definition: rt_raster.c:385
band
Definition: ovdump.py:58
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:2396

References ovdump::band, FALSE, rtrowdump::raster, rt_band_get_hasnodata_flag(), rt_band_get_nodata(), rt_raster_deserialize(), rt_raster_destroy(), and rt_raster_get_band().

Here is the call graph for this function: