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

◆ rt_raster_from_band()

rt_raster rt_raster_from_band ( rt_raster  raster,
uint32_t *  bandNums,
int  count 
)

Construct a new rt_raster from an existing rt_raster and an array of band numbers.

Parameters
raster: the source raster
bandNums: array of band numbers to extract from source raster and add to the new raster (0 based)
count: number of elements in bandNums
Returns
a new rt_raster or NULL on error

Definition at line 1341 of file rt_raster.c.

1341 {
1342 rt_raster rast = NULL;
1343 int i = 0;
1344 int j = 0;
1345 int idx;
1346 int32_t flag;
1347 double gt[6] = {0.};
1348
1349 assert(NULL != raster);
1350 assert(NULL != bandNums);
1351
1352 RASTER_DEBUGF(3, "rt_raster_from_band: source raster has %d bands",
1353 rt_raster_get_num_bands(raster));
1354
1355 /* create new raster */
1356 rast = rt_raster_new(raster->width, raster->height);
1357 if (NULL == rast) {
1358 rterror("rt_raster_from_band: Out of memory allocating new raster");
1359 return NULL;
1360 }
1361
1362 /* copy raster attributes */
1365
1366 /* srid */
1367 rt_raster_set_srid(rast, raster->srid);
1368
1369 /* copy bands */
1370 for (i = 0; i < count; i++) {
1371 idx = bandNums[i];
1372 flag = rt_raster_copy_band(rast, raster, idx, i);
1373
1374 if (flag < 0) {
1375 rterror("rt_raster_from_band: Could not copy band");
1376 for (j = 0; j < i; j++) rt_band_destroy(rast->bands[j]);
1377 rt_raster_destroy(rast);
1378 return NULL;
1379 }
1380
1381 RASTER_DEBUGF(3, "rt_raster_from_band: band created at index %d",
1382 flag);
1383 }
1384
1385 RASTER_DEBUGF(3, "rt_raster_from_band: new raster has %d bands",
1387 return rast;
1388}
void rterror(const char *fmt,...) __attribute__((format(printf
Wrappers used for reporting errors and info.
#define RASTER_DEBUGF(level, msg,...)
Definition librtcore.h:308
void rt_band_destroy(rt_band band)
Destroy a raster band.
Definition rt_band.c:499
int count
Definition genraster.py:57
raster
Be careful!! Zeros function's input parameter can be a (height x width) array, not (width x height): ...
Definition rtrowdump.py:125
void rt_raster_set_geotransform_matrix(rt_raster raster, double *gt)
Set raster's geotransform using 6-element array.
Definition rt_raster.c:609
void rt_raster_destroy(rt_raster raster)
Release memory associated to a raster.
Definition rt_raster.c:86
rt_raster rt_raster_new(uint32_t width, uint32_t height)
Construct a raster with given dimensions.
Definition rt_raster.c:52
uint16_t rt_raster_get_num_bands(rt_raster raster)
Definition rt_raster.c:376
void rt_raster_set_srid(rt_raster raster, int32_t srid)
Set raster's SRID.
Definition rt_raster.c:367
int rt_raster_copy_band(rt_raster torast, rt_raster fromrast, int fromindex, int toindex)
Copy one band from one raster to another.
Definition rt_raster.c:1276
void rt_raster_get_geotransform_matrix(rt_raster raster, double *gt)
Get 6-element array of raster geotransform matrix.
Definition rt_raster.c:588

References RASTER_DEBUGF, rt_band_destroy(), rt_raster_copy_band(), rt_raster_destroy(), rt_raster_get_geotransform_matrix(), rt_raster_get_num_bands(), rt_raster_new(), rt_raster_set_geotransform_matrix(), rt_raster_set_srid(), and rterror().

Referenced by RASTER_addBandRasterArray(), RASTER_band(), RASTER_InterpolateRaster(), RASTER_union_finalfn(), rt_raster_clone(), and test_raster_from_band().

Here is the call graph for this function:
Here is the caller graph for this function: