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

◆ test_lwline_clip()

static void test_lwline_clip ( void  )
static

Definition at line 599 of file cu_algorithm.c.

600{
601 LWCOLLECTION *c;
602 LWGEOM *line = NULL;
603 LWGEOM *l51 = NULL;
604 char *ewkt;
605
606 /* Vertical line with vertices at y integers */
607 l51 = lwgeom_from_wkt("LINESTRING(0 0, 0 1, 0 2, 0 3, 0 4)", LW_PARSER_CHECK_NONE);
608
609 /* Clip in the middle, mid-range. */
610 c = lwgeom_clip_to_ordinate_range(l51, 'Y', 1.5, 2.5, 0);
611 ewkt = lwgeom_to_ewkt((LWGEOM*)c);
612 //printf("c = %s\n", ewkt);
613 ASSERT_STRING_EQUAL(ewkt, "MULTILINESTRING((0 1.5,0 2,0 2.5))");
614 lwfree(ewkt);
616
617 /* Clip off the top. */
618 c = lwgeom_clip_to_ordinate_range(l51, 'Y', 3.5, 5.5, 0);
619 ewkt = lwgeom_to_ewkt((LWGEOM*)c);
620 //printf("c = %s\n", ewkt);
621 ASSERT_STRING_EQUAL(ewkt, "MULTILINESTRING((0 3.5,0 4))");
622 lwfree(ewkt);
624
625 /* Clip off the bottom. */
626 c = lwgeom_clip_to_ordinate_range(l51, 'Y', -1.5, 2.5, 0);
627 ewkt = lwgeom_to_ewkt((LWGEOM*)c);
628 //printf("c = %s\n", ewkt);
629 ASSERT_STRING_EQUAL(ewkt, "MULTILINESTRING((0 0,0 1,0 2,0 2.5))");
630 lwfree(ewkt);
632
633 /* Range holds entire object. */
634 c = lwgeom_clip_to_ordinate_range(l51, 'Y', -1.5, 5.5, 0);
635 ewkt = lwgeom_to_ewkt((LWGEOM*)c);
636 //printf("c = %s\n", ewkt);
637 ASSERT_STRING_EQUAL(ewkt, "MULTILINESTRING((0 0,0 1,0 2,0 3,0 4))");
638 lwfree(ewkt);
640
641 /* Clip on vertices. */
642 c = lwgeom_clip_to_ordinate_range(l51, 'Y', 1.0, 2.0, 0);
643 ewkt = lwgeom_to_ewkt((LWGEOM*)c);
644 //printf("c = %s\n", ewkt);
645 ASSERT_STRING_EQUAL(ewkt, "MULTILINESTRING((0 1,0 2))");
646 lwfree(ewkt);
648
649 /* Clip on vertices off the bottom. */
650 c = lwgeom_clip_to_ordinate_range(l51, 'Y', -1.0, 2.0, 0);
651 ewkt = lwgeom_to_ewkt((LWGEOM*)c);
652 //printf("c = %s\n", ewkt);
653 ASSERT_STRING_EQUAL(ewkt, "MULTILINESTRING((0 0,0 1,0 2))");
654 lwfree(ewkt);
656
657 /* Clip on top. */
658 c = lwgeom_clip_to_ordinate_range(l51, 'Y', -1.0, 0.0, 0);
659 ewkt = lwgeom_to_ewkt((LWGEOM*)c);
660 //printf("c = %s\n", ewkt);
661 ASSERT_STRING_EQUAL(ewkt, "GEOMETRYCOLLECTION(POINT(0 0))");
662 lwfree(ewkt);
664
665 /* ST_LocateBetweenElevations(ST_GeomFromEWKT('LINESTRING(1 2 3, 4 5 6, 6 6 6, 1 1 1)'), 1, 2)) */
666 line = lwgeom_from_wkt("LINESTRING(1 2 3, 4 5 6, 6 6 6, 1 1 1)", LW_PARSER_CHECK_NONE);
667 c = lwgeom_clip_to_ordinate_range(line, 'Z', 1.0, 2.0, 0);
668 ewkt = lwgeom_to_ewkt((LWGEOM*)c);
669 ASSERT_STRING_EQUAL(ewkt, "MULTILINESTRING((2 2 2,1 1 1))");
670 lwfree(ewkt);
672 lwgeom_free(line);
673
674 /* ST_LocateBetweenElevations('LINESTRING(1 2 3, 4 5 6, 6 6 6, 1 1 1)', 1, 2)) */
675 line = lwgeom_from_wkt("LINESTRING(1 2 3, 4 5 6, 6 6 6, 1 1 1)", LW_PARSER_CHECK_NONE);
676 c = lwgeom_clip_to_ordinate_range(line, 'Z', 1.0, 2.0, 0);
677 ewkt = lwgeom_to_ewkt((LWGEOM*)c);
678 //printf("a = %s\n", ewkt);
679 ASSERT_STRING_EQUAL(ewkt, "MULTILINESTRING((2 2 2,1 1 1))");
680 lwfree(ewkt);
682 lwgeom_free(line);
683
684 /* ST_LocateBetweenElevations('LINESTRING(1 2 3, 4 5 6, 6 6 6, 1 1 1)', 1, 1)) */
685 line = lwgeom_from_wkt("LINESTRING(1 2 3, 4 5 6, 6 6 6, 1 1 1)", LW_PARSER_CHECK_NONE);
686 c = lwgeom_clip_to_ordinate_range(line, 'Z', 1.0, 1.0, 0);
687 ewkt = lwgeom_to_ewkt((LWGEOM*)c);
688 //printf("b = %s\n", ewkt);
689 ASSERT_STRING_EQUAL(ewkt, "GEOMETRYCOLLECTION(POINT(1 1 1))");
690 lwfree(ewkt);
692 lwgeom_free(line);
693
694 /* ST_LocateBetweenElevations('LINESTRING(1 1 1, 1 2 2)', 1,1) */
695 line = lwgeom_from_wkt("LINESTRING(1 1 1, 1 2 2)", LW_PARSER_CHECK_NONE);
696 c = lwgeom_clip_to_ordinate_range(line, 'Z', 1.0, 1.0, 0);
697 ewkt = lwgeom_to_ewkt((LWGEOM*)c);
698 //printf("c = %s\n", ewkt);
699 ASSERT_STRING_EQUAL(ewkt, "GEOMETRYCOLLECTION(POINT(1 1 1))");
700 lwfree(ewkt);
702 lwgeom_free(line);
703
704 lwgeom_free(l51);
705}
#define ASSERT_STRING_EQUAL(o, e)
void lwgeom_free(LWGEOM *geom)
Definition lwgeom.c:1246
#define LW_PARSER_CHECK_NONE
Definition liblwgeom.h:2149
LWCOLLECTION * lwgeom_clip_to_ordinate_range(const LWGEOM *lwin, char ordinate, double from, double to, double offset)
Given a geometry clip based on the from/to range of one of its ordinates (x, y, z,...
char * lwgeom_to_ewkt(const LWGEOM *lwgeom)
Return an allocated string.
Definition lwgeom.c:593
void lwfree(void *mem)
Definition lwutil.c:248
void lwcollection_free(LWCOLLECTION *col)
LWGEOM * lwgeom_from_wkt(const char *wkt, const char check)
Definition lwin_wkt.c:940

References ASSERT_STRING_EQUAL, LW_PARSER_CHECK_NONE, lwcollection_free(), lwfree(), lwgeom_clip_to_ordinate_range(), lwgeom_free(), lwgeom_from_wkt(), and lwgeom_to_ewkt().

Referenced by algorithms_suite_setup().

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