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

◆ test_gdal_to_raster()

static void test_gdal_to_raster ( )
static

Definition at line 377 of file cu_gdal.c.

377 {
378 rt_pixtype pixtype = PT_64BF;
379 rt_band band = NULL;
380
383 const uint32_t width = 100;
384 const uint32_t height = 100;
385 uint32_t x;
386 uint32_t y;
387 int v;
388 double values[width][height];
389 int rtn = 0;
390 double value;
391
392 GDALDriverH gddrv = NULL;
393 int destroy = 0;
394 GDALDatasetH gdds = NULL;
395
396 raster = rt_raster_new(width, height);
397 CU_ASSERT(raster != NULL); /* or we're out of virtual memory */
398
399 band = cu_add_band(raster, pixtype, 1, 0);
400 CU_ASSERT(band != NULL);
401
402 for (x = 0; x < width; x++) {
403 for (y = 0; y < height; y++) {
404 values[x][y] = (((double) x * y) + (x + y) + (x + y * x)) / (x + y + 1);
405 rt_band_set_pixel(band, x, y, values[x][y], NULL);
406 }
407 }
408
409 gdds = rt_raster_to_gdal_mem(raster, NULL, NULL, NULL, 0, &gddrv, &destroy);
410 CU_ASSERT(gddrv != NULL);
411 CU_ASSERT(gdds != NULL);
412 CU_ASSERT_EQUAL((uint32_t)GDALGetRasterXSize(gdds), width);
413 CU_ASSERT_EQUAL((uint32_t)GDALGetRasterYSize(gdds), height);
414
416 CU_ASSERT(rast != NULL);
417 CU_ASSERT_EQUAL(rt_raster_get_num_bands(rast), 1);
418
419 band = rt_raster_get_band(rast, 0);
420 CU_ASSERT(band != NULL);
421
422 for (x = 0; x < width; x++) {
423 for (y = 0; y < height; y++) {
424 rtn = rt_band_get_pixel(band, x, y, &value, NULL);
425 CU_ASSERT_EQUAL(rtn, ES_NONE);
426 CU_ASSERT_DOUBLE_EQUAL(value, values[x][y], DBL_EPSILON);
427 }
428 }
429
430 if (destroy && gddrv) {
431 GDALDeregisterDriver(gddrv);
432 GDALDestroyDriver(gddrv);
433 }
434 GDALClose(gdds);
435 gdds = NULL;
436 gddrv = NULL;
437
438 cu_free_raster(rast);
439 cu_free_raster(raster);
440
441 raster = rt_raster_new(width, height);
442 CU_ASSERT(raster != NULL); /* or we're out of virtual memory */
443
444 pixtype = PT_8BSI;
445 band = cu_add_band(raster, pixtype, 1, 0);
446 CU_ASSERT(band != NULL);
447
448 v = -127;
449 for (x = 0; x < width; x++) {
450 for (y = 0; y < height; y++) {
451 values[x][y] = v++;
452 rt_band_set_pixel(band, x, y, values[x][y], NULL);
453 if (v == 128)
454 v = -127;
455 }
456 }
457
458 gdds = rt_raster_to_gdal_mem(raster, NULL, NULL, NULL, 0, &gddrv, &destroy);
459 CU_ASSERT(gddrv != NULL);
460 CU_ASSERT(gdds != NULL);
461 CU_ASSERT_EQUAL((uint32_t)GDALGetRasterXSize(gdds), width);
462 CU_ASSERT_EQUAL((uint32_t)GDALGetRasterYSize(gdds), height);
463
465 CU_ASSERT(rast != NULL);
466 CU_ASSERT_EQUAL(rt_raster_get_num_bands(rast), 1);
467
468 band = rt_raster_get_band(rast, 0);
469 CU_ASSERT(band != NULL);
470#if POSTGIS_GDAL_VERSION < 30700
471 CU_ASSERT_EQUAL(rt_band_get_pixtype(band), PT_16BSI);
472#else
473 CU_ASSERT_EQUAL(rt_band_get_pixtype(band), PT_8BSI);
474#endif
475 for (x = 0; x < width; x++) {
476 for (y = 0; y < height; y++) {
477 rtn = rt_band_get_pixel(band, x, y, &value, NULL);
478#if POSTGIS_GDAL_VERSION < 30700
479 CU_ASSERT_DOUBLE_EQUAL(value, values[x][y], 1.);
480 CU_ASSERT_DOUBLE_EQUAL(value, values[x][y], DBL_EPSILON);
481#else
482 CU_ASSERT_EQUAL(rtn, ES_NONE);
483 CU_ASSERT_DOUBLE_EQUAL(value, values[x][y], DBL_EPSILON);
484#endif
485 }
486 }
487 if (destroy && gddrv) {
488 GDALDeregisterDriver(gddrv);
489 GDALDestroyDriver(gddrv);
490 }
491
492 GDALClose(gdds);
493 gdds = NULL;
494 gddrv = NULL;
495
496 cu_free_raster(rast);
497 cu_free_raster(raster);
498}
rt_errorstate rt_band_get_pixel(rt_band band, int x, int y, double *value, int *nodata)
Get pixel value.
Definition rt_band.c:1551
rt_pixtype
Definition librtcore.h:188
@ PT_8BSI
Definition librtcore.h:192
@ PT_16BSI
Definition librtcore.h:194
@ PT_64BF
Definition librtcore.h:200
rt_raster rt_raster_new(uint32_t width, uint32_t height)
Construct a raster with given dimensions.
Definition rt_raster.c:52
rt_raster rt_raster_from_gdal_dataset(GDALDatasetH ds)
Return a raster from a GDAL dataset.
Definition rt_raster.c:2175
rt_errorstate rt_band_set_pixel(rt_band band, int x, int y, double val, int *converted)
Set single pixel's value.
Definition rt_band.c:1140
@ ES_NONE
Definition librtcore.h:182
uint16_t rt_raster_get_num_bands(rt_raster raster)
Definition rt_raster.c:376
rt_pixtype rt_band_get_pixtype(rt_band band)
Return pixeltype of this band.
Definition rt_band.c:790
GDALDatasetH rt_raster_to_gdal_mem(rt_raster raster, const char *srs, uint32_t *bandNums, int *excludeNodataValues, int count, GDALDriverH *rtn_drv, int *destroy_rtn_drv)
Return GDAL dataset using GDAL MEM driver from raster.
Definition rt_raster.c:1813
rt_band rt_raster_get_band(rt_raster raster, int bandNum)
Return Nth band, or NULL if unavailable.
Definition rt_raster.c:385
int value
Definition genraster.py:62
raster
Be careful!! Zeros function's input parameter can be a (height x width) array, not (width x height): ...
Definition rtrowdump.py:125
rt_band cu_add_band(rt_raster raster, rt_pixtype pixtype, int hasnodata, double nodataval)
void cu_free_raster(rt_raster raster)

References cu_add_band(), cu_free_raster(), ES_NONE, PT_16BSI, PT_64BF, PT_8BSI, rt_band_get_pixel(), rt_band_get_pixtype(), rt_band_set_pixel(), rt_raster_from_gdal_dataset(), rt_raster_get_band(), rt_raster_get_num_bands(), rt_raster_new(), and rt_raster_to_gdal_mem().

Referenced by gdal_suite_setup().

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