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

◆ test_lwgeom_segmentize2d()

static void test_lwgeom_segmentize2d ( void  )
static

Definition at line 659 of file cu_measures.c.

660{
661 LWGEOM *linein = lwgeom_from_wkt("LINESTRING(0 0,10 0)", LW_PARSER_CHECK_NONE);
662 LWGEOM *lineout = lwgeom_segmentize2d(linein, 5);
663 char *strout = lwgeom_to_ewkt(lineout);
664 ASSERT_STRING_EQUAL(strout, "LINESTRING(0 0,5 0,10 0)");
665 lwfree(strout);
666 lwgeom_free(linein);
667 lwgeom_free(lineout);
668
669 /* test that segmentize is proportional - request every 6, get every 5 */
670 linein = lwgeom_from_wkt("LINESTRING(0 0, 20 0)", LW_PARSER_CHECK_NONE);
671 lineout = lwgeom_segmentize2d(linein, 6);
672 strout = lwgeom_to_ewkt(lineout);
673 ASSERT_STRING_EQUAL(strout, "LINESTRING(0 0,5 0,10 0,15 0,20 0)");
674 lwfree(strout);
675 lwgeom_free(linein);
676 lwgeom_free(lineout);
677
678 /* test too many segments */
679 linein = lwgeom_from_wkt("LINESTRING(0 0,10 0)", LW_PARSER_CHECK_NONE);
680 lineout = lwgeom_segmentize2d(linein, 1e-100);
681 CU_ASSERT_EQUAL(lineout, NULL);
682 lwgeom_free(linein);
683
684 /* test interruption */
685
686 linein = lwgeom_from_wkt("LINESTRING(0 0,10 0)", LW_PARSER_CHECK_NONE);
688 lineout = lwgeom_segmentize2d(linein, INT32_MAX);
689 CU_ASSERT_EQUAL(lineout, NULL);
690 lwgeom_free(linein);
691
692 linein = lwgeom_from_wkt("MULTILINESTRING((0 0,10 0),(20 0, 30 0))", LW_PARSER_CHECK_NONE);
694 lineout = lwgeom_segmentize2d(linein, INT32_MAX);
695 CU_ASSERT_EQUAL(lineout, NULL);
696 lwgeom_free(linein);
697
698 linein = lwgeom_from_wkt(
699 "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)))"
702 lineout = lwgeom_segmentize2d(linein, INT32_MAX);
703 CU_ASSERT_EQUAL(lineout, NULL);
704 lwgeom_free(linein);
705
706 linein = lwgeom_from_wkt(
707 "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))"
709 CU_ASSERT_FATAL(linein != NULL);
711 lineout = lwgeom_segmentize2d(linein, INT32_MAX);
712 CU_ASSERT_EQUAL(lineout, NULL);
713 lwgeom_free(linein);
714
715 linein = lwgeom_from_wkt("LINESTRING(20 0, 30 0)", LW_PARSER_CHECK_NONE);
716 CU_ASSERT_FATAL(linein != NULL);
717 /* NOT INTERRUPTED */
718 lineout = lwgeom_segmentize2d(linein, 5);
719 CU_ASSERT_NOT_EQUAL_FATAL(lineout, NULL);
720 strout = lwgeom_to_ewkt(lineout);
721 ASSERT_STRING_EQUAL(strout, "LINESTRING(20 0,25 0,30 0)");
722 lwfree(strout);
723 lwgeom_free(linein);
724 lwgeom_free(lineout);
725}
#define ASSERT_STRING_EQUAL(o, e)
void lwgeom_request_interrupt(void)
Request interruption of any running code.
Definition lwgeom_api.c:658
void lwgeom_free(LWGEOM *geom)
Definition lwgeom.c:1246
#define LW_PARSER_CHECK_NONE
Definition liblwgeom.h:2149
char * lwgeom_to_ewkt(const LWGEOM *lwgeom)
Return an allocated string.
Definition lwgeom.c:593
void lwfree(void *mem)
Definition lwutil.c:248
LWGEOM * lwgeom_from_wkt(const char *wkt, const char check)
Definition lwin_wkt.c:940
LWGEOM * lwgeom_segmentize2d(const LWGEOM *line, double dist)
Definition lwgeom.c:799
#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: