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

◆ test_lwgeom_segmentize2d()

static void test_lwgeom_segmentize2d ( void  )
static

Definition at line 638 of file cu_measures.c.

639{
640 LWGEOM *linein = lwgeom_from_wkt("LINESTRING(0 0,10 0)", LW_PARSER_CHECK_NONE);
641 LWGEOM *lineout = lwgeom_segmentize2d(linein, 5);
642 char *strout = lwgeom_to_ewkt(lineout);
643 ASSERT_STRING_EQUAL(strout, "LINESTRING(0 0,5 0,10 0)");
644 lwfree(strout);
645 lwgeom_free(linein);
646 lwgeom_free(lineout);
647
648 /* test that segmentize is proportional - request every 6, get every 5 */
649 linein = lwgeom_from_wkt("LINESTRING(0 0, 20 0)", LW_PARSER_CHECK_NONE);
650 lineout = lwgeom_segmentize2d(linein, 6);
651 strout = lwgeom_to_ewkt(lineout);
652 ASSERT_STRING_EQUAL(strout, "LINESTRING(0 0,5 0,10 0,15 0,20 0)");
653 lwfree(strout);
654 lwgeom_free(linein);
655 lwgeom_free(lineout);
656
657 /* test too many segments */
658 linein = lwgeom_from_wkt("LINESTRING(0 0,10 0)", LW_PARSER_CHECK_NONE);
659 lineout = lwgeom_segmentize2d(linein, 1e-100);
660 CU_ASSERT_EQUAL(lineout, NULL);
661 lwgeom_free(linein);
662
663 /* test interruption */
664
665 linein = lwgeom_from_wkt("LINESTRING(0 0,10 0)", LW_PARSER_CHECK_NONE);
667 lineout = lwgeom_segmentize2d(linein, INT32_MAX);
668 CU_ASSERT_EQUAL(lineout, NULL);
669 lwgeom_free(linein);
670
671 linein = lwgeom_from_wkt("MULTILINESTRING((0 0,10 0),(20 0, 30 0))", LW_PARSER_CHECK_NONE);
673 lineout = lwgeom_segmentize2d(linein, INT32_MAX);
674 CU_ASSERT_EQUAL(lineout, NULL);
675 lwgeom_free(linein);
676
677 linein = lwgeom_from_wkt(
678 "MULTIPOLYGON(((0 0,20 0,20 20,0 20,0 0),(2 2,2 4,4 4,4 2,2 2),(6 6,6 8,8 8,8 6,6 6)),((40 0,40 20,60 20,60 0,40 0),(42 2,42 4,44 4,44 2,42 2)))"
681 lineout = lwgeom_segmentize2d(linein, INT32_MAX);
682 CU_ASSERT_EQUAL(lineout, NULL);
683 lwgeom_free(linein);
684
685 linein = lwgeom_from_wkt(
686 "GEOMETRYCOLLECTION(MULTIPOLYGON(((0 0,20 0,20 20,0 20,0 0),(2 2,2 4,4 4,4 2,2 2),(6 6,6 8,8 8,8 6,6 6)),((40 0,40 20,60 20,60 0,40 0),(42 2,42 4,44 4,44 2,42 2))),MULTILINESTRING((0 0,10 0),(20 0, 30 0)),MULTIPOINT(0 0, 3 4))"
688 CU_ASSERT_FATAL(linein != NULL);
690 lineout = lwgeom_segmentize2d(linein, INT32_MAX);
691 CU_ASSERT_EQUAL(lineout, NULL);
692 lwgeom_free(linein);
693
694 linein = lwgeom_from_wkt("LINESTRING(20 0, 30 0)", LW_PARSER_CHECK_NONE);
695 CU_ASSERT_FATAL(linein != NULL);
696 /* NOT INTERRUPTED */
697 lineout = lwgeom_segmentize2d(linein, 5);
698 CU_ASSERT_NOT_EQUAL_FATAL(lineout, NULL);
699 strout = lwgeom_to_ewkt(lineout);
700 ASSERT_STRING_EQUAL(strout, "LINESTRING(20 0,25 0,30 0)");
701 lwfree(strout);
702 lwgeom_free(linein);
703 lwgeom_free(lineout);
704}
#define ASSERT_STRING_EQUAL(o, e)
void lwgeom_request_interrupt(void)
Request interruption of any running code.
Definition lwgeom_api.c:670
void lwgeom_free(LWGEOM *geom)
Definition lwgeom.c:1138
#define LW_PARSER_CHECK_NONE
Definition liblwgeom.h:2060
char * lwgeom_to_ewkt(const LWGEOM *lwgeom)
Return an alloced string.
Definition lwgeom.c:547
void lwfree(void *mem)
Definition lwutil.c:242
LWGEOM * lwgeom_from_wkt(const char *wkt, const char check)
Definition lwin_wkt.c:905
LWGEOM * lwgeom_segmentize2d(const LWGEOM *line, double dist)
Definition lwgeom.c:753
#define INT32_MAX

References ASSERT_STRING_EQUAL, INT32_MAX, LW_PARSER_CHECK_NONE, lwfree(), lwgeom_free(), lwgeom_from_wkt(), lwgeom_request_interrupt(), lwgeom_segmentize2d(), and lwgeom_to_ewkt().

Referenced by measures_suite_setup().

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