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

◆ test_raster_iterator()

static void test_raster_iterator ( )
static

Definition at line 495 of file cu_mapalgebra.c.

495 {
496 rt_raster rast1;
497 rt_raster rast2;
498 rt_raster rast3;
499
500 int num = 2;
501
502 rt_raster rtn = NULL;
504 int maxX = 5;
505 int maxY = 5;
506 rt_iterator itrset;
507 _callback_userargs userargs;
508 int noerr = 0;
509 int x = 0;
510 int y = 0;
511
512 rast1 = rt_raster_new(maxX, maxY);
513 CU_ASSERT(rast1 != NULL);
514
515 rt_raster_set_offsets(rast1, 0, 0);
516 rt_raster_set_scale(rast1, 1, -1);
517
518 band = cu_add_band(rast1, PT_32BUI, 1, 6);
519 CU_ASSERT(band != NULL);
520
521 for (y = 0; y < maxY; y++) {
522 for (x = 0; x < maxX; x++) {
523 rt_band_set_pixel(band, x, y, x + (y * maxX), NULL);
524 }
525 }
526
527 rast2 = rt_raster_new(maxX, maxY);
528 CU_ASSERT(rast2 != NULL);
529
530 rt_raster_set_offsets(rast2, 1, -1);
531 rt_raster_set_scale(rast2, 1, -1);
532
533 band = cu_add_band(rast2, PT_32BUI, 1, 110);
534 CU_ASSERT(band != NULL);
535
536 for (y = 0; y < maxY; y++) {
537 for (x = 0; x < maxX; x++) {
538 rt_band_set_pixel(band, x, y, (x + (y * maxX)) + 100, NULL);
539 }
540 }
541
542 rast3 = rt_raster_new(2, 2);
543 CU_ASSERT(rast3 != NULL);
544
545 rt_raster_set_offsets(rast3, 1, -3);
546 rt_raster_set_scale(rast3, 1, -1);
547
548 /* allocate user args */
549 userargs = rtalloc(sizeof(struct _callback_userargs_t));
550 CU_ASSERT(userargs != NULL);
551
552 /* allocate itrset */
553 itrset = rtalloc(sizeof(struct rt_iterator_t) * num);
554 CU_ASSERT(itrset != NULL);
555 itrset[0].raster = rast1;
556 itrset[0].nband = 0;
557 itrset[0].nbnodata = 1;
558 itrset[1].raster = rast2;
559 itrset[1].nband = 0;
560 itrset[1].nbnodata = 1;
561
562 /* 1 raster, 0 distance, FIRST or SECOND or LAST or UNION or INTERSECTION */
563 userargs->rasters = 1;
564 userargs->rows = 1;
565 userargs->columns = 1;
566
567 noerr = rt_raster_iterator(
568 itrset, 1,
569 ET_INTERSECTION, NULL,
570 PT_32BUI,
571 1, 0,
572 0, 0,
573 NULL,
574 userargs,
576 &rtn
577 );
578 CU_ASSERT_EQUAL(noerr, ES_NONE);
579 CU_ASSERT_EQUAL(rt_raster_get_width(rtn), 5);
580 CU_ASSERT_EQUAL(rt_raster_get_height(rtn), 5);
581 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_offset(rtn), 0, DBL_EPSILON);
582 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_offset(rtn), 0, DBL_EPSILON);
583 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_scale(rtn), 1, DBL_EPSILON);
584 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_scale(rtn), -1, DBL_EPSILON);
585 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_skew(rtn), 0, DBL_EPSILON);
586 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_skew(rtn), 0, DBL_EPSILON);
587 CU_ASSERT_EQUAL(rt_raster_get_srid(rtn), 0);
588
589 if (rtn != NULL) cu_free_raster(rtn);
590 rtn = NULL;
591
592 /* 1 raster, 0 distance, FIRST or SECOND or LAST or UNION or INTERSECTION */
593 userargs->rasters = 1;
594 userargs->rows = 1;
595 userargs->columns = 1;
596
597 noerr = rt_raster_iterator(
598 itrset, 1,
599 ET_UNION, NULL,
600 PT_32BUI,
601 1, 0,
602 0, 0,
603 NULL,
604 userargs,
606 &rtn
607 );
608 CU_ASSERT_EQUAL(noerr, ES_NONE);
609 CU_ASSERT_EQUAL(rt_raster_get_width(rtn), 5);
610 CU_ASSERT_EQUAL(rt_raster_get_height(rtn), 5);
611 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_offset(rtn), 0, DBL_EPSILON);
612 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_offset(rtn), 0, DBL_EPSILON);
613 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_scale(rtn), 1, DBL_EPSILON);
614 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_scale(rtn), -1, DBL_EPSILON);
615 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_skew(rtn), 0, DBL_EPSILON);
616 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_skew(rtn), 0, DBL_EPSILON);
617 CU_ASSERT_EQUAL(rt_raster_get_srid(rtn), 0);
618
619 if (rtn != NULL) cu_free_raster(rtn);
620 rtn = NULL;
621
622 /* 2 raster, 0 distance, UNION */
623 userargs->rasters = 2;
624 userargs->rows = 1;
625 userargs->columns = 1;
626
627 noerr = rt_raster_iterator(
628 itrset, 2,
629 ET_UNION, NULL,
630 PT_32BUI,
631 1, 0,
632 0, 0,
633 NULL,
634 userargs,
636 &rtn
637 );
638 CU_ASSERT_EQUAL(noerr, ES_NONE);
639 CU_ASSERT_EQUAL(rt_raster_get_width(rtn), 6);
640 CU_ASSERT_EQUAL(rt_raster_get_height(rtn), 6);
641 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_offset(rtn), 0, DBL_EPSILON);
642 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_offset(rtn), 0, DBL_EPSILON);
643 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_scale(rtn), 1, DBL_EPSILON);
644 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_scale(rtn), -1, DBL_EPSILON);
645 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_skew(rtn), 0, DBL_EPSILON);
646 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_skew(rtn), 0, DBL_EPSILON);
647 CU_ASSERT_EQUAL(rt_raster_get_srid(rtn), 0);
648
649 if (rtn != NULL) cu_free_raster(rtn);
650 rtn = NULL;
651
652 /* 2 raster, 0 distance, INTERSECTION */
653 noerr = rt_raster_iterator(
654 itrset, 2,
655 ET_INTERSECTION, NULL,
656 PT_32BUI,
657 1, 0,
658 0, 0,
659 NULL,
660 userargs,
662 &rtn
663 );
664 CU_ASSERT_EQUAL(noerr, ES_NONE);
665 CU_ASSERT_EQUAL(rt_raster_get_width(rtn), 4);
666 CU_ASSERT_EQUAL(rt_raster_get_height(rtn), 4);
667 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_offset(rtn), 1, DBL_EPSILON);
668 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_offset(rtn), -1, DBL_EPSILON);
669 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_scale(rtn), 1, DBL_EPSILON);
670 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_scale(rtn), -1, DBL_EPSILON);
671 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_skew(rtn), 0, DBL_EPSILON);
672 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_skew(rtn), 0, DBL_EPSILON);
673 CU_ASSERT_EQUAL(rt_raster_get_srid(rtn), 0);
674
675 if (rtn != NULL) cu_free_raster(rtn);
676 rtn = NULL;
677
678 /* 2 raster, 0 distance, FIRST */
679 noerr = rt_raster_iterator(
680 itrset, 2,
681 ET_FIRST, NULL,
682 PT_32BUI,
683 1, 0,
684 0, 0,
685 NULL,
686 userargs,
688 &rtn
689 );
690 CU_ASSERT_EQUAL(noerr, ES_NONE);
691 CU_ASSERT_EQUAL(rt_raster_get_width(rtn), 5);
692 CU_ASSERT_EQUAL(rt_raster_get_height(rtn), 5);
693 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_offset(rtn), 0, DBL_EPSILON);
694 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_offset(rtn), 0, DBL_EPSILON);
695 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_scale(rtn), 1, DBL_EPSILON);
696 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_scale(rtn), -1, DBL_EPSILON);
697 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_skew(rtn), 0, DBL_EPSILON);
698 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_skew(rtn), 0, DBL_EPSILON);
699 CU_ASSERT_EQUAL(rt_raster_get_srid(rtn), 0);
700
701 if (rtn != NULL) cu_free_raster(rtn);
702 rtn = NULL;
703
704 /* 2 raster, 0 distance, LAST or SECOND */
705 noerr = rt_raster_iterator(
706 itrset, 2,
707 ET_LAST, NULL,
708 PT_32BUI,
709 1, 0,
710 0, 0,
711 NULL,
712 userargs,
714 &rtn
715 );
716 CU_ASSERT_EQUAL(noerr, ES_NONE);
717 CU_ASSERT_EQUAL(rt_raster_get_width(rtn), 5);
718 CU_ASSERT_EQUAL(rt_raster_get_height(rtn), 5);
719 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_offset(rtn), 1, DBL_EPSILON);
720 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_offset(rtn), -1, DBL_EPSILON);
721 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_scale(rtn), 1, DBL_EPSILON);
722 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_scale(rtn), -1, DBL_EPSILON);
723 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_skew(rtn), 0, DBL_EPSILON);
724 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_skew(rtn), 0, DBL_EPSILON);
725 CU_ASSERT_EQUAL(rt_raster_get_srid(rtn), 0);
726
727 if (rtn != NULL) cu_free_raster(rtn);
728 rtn = NULL;
729
730 /* 2 raster, 0 distance, CUSTOM */
731 noerr = rt_raster_iterator(
732 itrset, 2,
733 ET_CUSTOM, rast3,
734 PT_32BUI,
735 1, 0,
736 0, 0,
737 NULL,
738 userargs,
740 &rtn
741 );
742 CU_ASSERT_EQUAL(noerr, ES_NONE);
743 CU_ASSERT_EQUAL(rt_raster_get_width(rtn), 2);
744 CU_ASSERT_EQUAL(rt_raster_get_height(rtn), 2);
745 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_offset(rtn), 1, DBL_EPSILON);
746 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_offset(rtn), -3, DBL_EPSILON);
747 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_scale(rtn), 1, DBL_EPSILON);
748 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_scale(rtn), -1, DBL_EPSILON);
749 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_skew(rtn), 0, DBL_EPSILON);
750 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_skew(rtn), 0, DBL_EPSILON);
751 CU_ASSERT_EQUAL(rt_raster_get_srid(rtn), 0);
752
753 if (rtn != NULL) cu_free_raster(rtn);
754 rtn = NULL;
755
756 /* 2 raster, 1 distance, CUSTOM */
757 userargs->rasters = 2;
758 userargs->rows = 3;
759 userargs->columns = 3;
760
761 noerr = rt_raster_iterator(
762 itrset, 2,
763 ET_CUSTOM, rast3,
764 PT_32BUI,
765 1, 0,
766 1, 1,
767 NULL,
768 userargs,
770 &rtn
771 );
772 CU_ASSERT_EQUAL(noerr, ES_NONE);
773 CU_ASSERT_EQUAL(rt_raster_get_width(rtn), 2);
774 CU_ASSERT_EQUAL(rt_raster_get_height(rtn), 2);
775 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_offset(rtn), 1, DBL_EPSILON);
776 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_offset(rtn), -3, DBL_EPSILON);
777 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_scale(rtn), 1, DBL_EPSILON);
778 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_scale(rtn), -1, DBL_EPSILON);
779 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_skew(rtn), 0, DBL_EPSILON);
780 CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_skew(rtn), 0, DBL_EPSILON);
781 CU_ASSERT_EQUAL(rt_raster_get_srid(rtn), 0);
782
783 if (rtn != NULL) cu_free_raster(rtn);
784 rtn = NULL;
785
786 rtdealloc(userargs);
787 rtdealloc(itrset);
788
789 cu_free_raster(rast1);
790 cu_free_raster(rast2);
791 cu_free_raster(rast3);
792
793 if (rtn != NULL) cu_free_raster(rtn);
794}
static int testRasterIterator5_callback(rt_iterator_arg arg, void *userarg, double *value, int *nodata)
static int testRasterIterator7_callback(rt_iterator_arg arg, void *userarg, double *value, int *nodata)
static int testRasterIterator2_callback(rt_iterator_arg arg, void *userarg, double *value, int *nodata)
static int testRasterIterator1_callback(rt_iterator_arg arg, void *userarg, double *value, int *nodata)
static int testRasterIterator3_callback(rt_iterator_arg arg, void *userarg, double *value, int *nodata)
static int testRasterIterator4_callback(rt_iterator_arg arg, void *userarg, double *value, int *nodata)
static int testRasterIterator6_callback(rt_iterator_arg arg, void *userarg, double *value, int *nodata)
void * rtalloc(size_t size)
Wrappers used for managing memory.
Definition rt_context.c:191
int32_t rt_raster_get_srid(rt_raster raster)
Get raster's SRID.
Definition rt_raster.c:360
double rt_raster_get_x_skew(rt_raster raster)
Get skew about the X axis.
Definition rt_raster.c:185
double rt_raster_get_x_offset(rt_raster raster)
Get raster x offset, in projection units.
Definition rt_raster.c:217
void rt_raster_set_scale(rt_raster raster, double scaleX, double scaleY)
Set scale in projection units.
Definition rt_raster.c:141
@ PT_32BUI
Definition librtcore.h:197
rt_raster rt_raster_new(uint32_t width, uint32_t height)
Construct a raster with given dimensions.
Definition rt_raster.c:52
double rt_raster_get_x_scale(rt_raster raster)
Get scale X in projection units.
Definition rt_raster.c:154
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_height(rt_raster raster)
Definition rt_raster.c:133
rt_errorstate rt_raster_iterator(rt_iterator itrset, uint16_t itrcount, rt_extenttype extenttype, rt_raster customextent, rt_pixtype pixtype, uint8_t hasnodata, double nodataval, uint16_t distancex, uint16_t distancey, rt_mask mask, void *userarg, int(*callback)(rt_iterator_arg arg, void *userarg, double *value, int *nodata), rt_raster *rtnraster)
n-raster iterator.
@ ET_CUSTOM
Definition librtcore.h:210
@ ET_LAST
Definition librtcore.h:209
@ ET_INTERSECTION
Definition librtcore.h:205
@ ET_UNION
Definition librtcore.h:206
@ ET_FIRST
Definition librtcore.h:207
uint16_t rt_raster_get_width(rt_raster raster)
Definition rt_raster.c:125
void rtdealloc(void *mem)
Definition rt_context.c:206
double rt_raster_get_y_scale(rt_raster raster)
Get scale Y in projection units.
Definition rt_raster.c:163
double rt_raster_get_y_skew(rt_raster raster)
Get skew about the Y axis.
Definition rt_raster.c:194
void rt_raster_set_offsets(rt_raster raster, double x, double y)
Set insertion points in projection units.
Definition rt_raster.c:203
double rt_raster_get_y_offset(rt_raster raster)
Get raster y offset, in projection units.
Definition rt_raster.c:226
rt_band cu_add_band(rt_raster raster, rt_pixtype pixtype, int hasnodata, double nodataval)
void cu_free_raster(rt_raster raster)
rt_raster raster
Definition librtcore.h:2659
uint16_t nband
Definition librtcore.h:2660
uint8_t nbnodata
Definition librtcore.h:2661

References _callback_userargs_t::columns, cu_add_band(), cu_free_raster(), ES_NONE, ET_CUSTOM, ET_FIRST, ET_INTERSECTION, ET_LAST, ET_UNION, rt_iterator_t::nband, rt_iterator_t::nbnodata, PT_32BUI, rt_iterator_t::raster, _callback_userargs_t::rasters, _callback_userargs_t::rows, rt_band_set_pixel(), rt_raster_get_height(), rt_raster_get_srid(), rt_raster_get_width(), rt_raster_get_x_offset(), rt_raster_get_x_scale(), rt_raster_get_x_skew(), rt_raster_get_y_offset(), rt_raster_get_y_scale(), rt_raster_get_y_skew(), rt_raster_iterator(), rt_raster_new(), rt_raster_set_offsets(), rt_raster_set_scale(), rtalloc(), rtdealloc(), testRasterIterator1_callback(), testRasterIterator2_callback(), testRasterIterator3_callback(), testRasterIterator4_callback(), testRasterIterator5_callback(), testRasterIterator6_callback(), and testRasterIterator7_callback().

Referenced by mapalgebra_suite_setup().

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