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

◆ test_lwline_interpolate_point_3d()

static void test_lwline_interpolate_point_3d ( void  )
static

Definition at line 547 of file cu_algorithm.c.

548{
549 LWLINE *line;
550 POINT4D point;
551 LWPOINT *pt;
552
553 /* Empty line -> Empty point*/
555 pt = lwline_interpolate_point_3d(line, 0.5);
556 CU_ASSERT(lwpoint_is_empty(pt));
557 CU_ASSERT(lwgeom_has_z(lwpoint_as_lwgeom(pt)));
558 CU_ASSERT_FALSE(lwgeom_has_m(lwpoint_as_lwgeom(pt)));
559 lwpoint_free(pt);
560 lwline_free(line);
561
562 line = lwgeom_as_lwline(lwgeom_from_wkt("LINESTRING Z (0 0 0, 1 1 1, 2 2 2)", LW_PARSER_CHECK_NONE));
563
564 /* distance = 0 -> first point */
565 pt = lwline_interpolate_point_3d(line, 0);
566 lwpoint_getPoint4d_p(pt, &point);
567 CU_ASSERT_DOUBLE_EQUAL(point.x, 0, 0.0001);
568 CU_ASSERT_DOUBLE_EQUAL(point.y, 0, 0.001);
569 CU_ASSERT_DOUBLE_EQUAL(point.z, 0, 0.001);
570 lwpoint_free(pt);
571
572 /* distance = 1 -> last point */
573 pt = lwline_interpolate_point_3d(line, 1);
574 lwpoint_getPoint4d_p(pt, &point);
575 CU_ASSERT_DOUBLE_EQUAL(point.x, 2, 0.0001);
576 CU_ASSERT_DOUBLE_EQUAL(point.y, 2, 0.001);
577 CU_ASSERT_DOUBLE_EQUAL(point.z, 2, 0.001);
578 lwpoint_free(pt);
579
580 /* simple where distance 50% -> second point */
581 pt = lwline_interpolate_point_3d(line, 0.5);
582 lwpoint_getPoint4d_p(pt, &point);
583 CU_ASSERT_DOUBLE_EQUAL(point.x, 1, 0.0001);
584 CU_ASSERT_DOUBLE_EQUAL(point.y, 1, 0.001);
585 CU_ASSERT_DOUBLE_EQUAL(point.z, 1, 0.001);
586 lwpoint_free(pt);
587
588 /* simple where distance 80% -> between second and last point */
589 pt = lwline_interpolate_point_3d(line, 0.8);
590 lwpoint_getPoint4d_p(pt, &point);
591 CU_ASSERT_DOUBLE_EQUAL(point.x, 1.6, 0.0001);
592 CU_ASSERT_DOUBLE_EQUAL(point.y, 1.6, 0.001);
593 CU_ASSERT_DOUBLE_EQUAL(point.z, 1.6, 0.001);
594 lwpoint_free(pt);
595
596 lwline_free(line);
597}
LWPOINT * lwline_interpolate_point_3d(const LWLINE *line, double distance)
Interpolate one point along a line in 3D.
Definition lwline.c:615
int lwpoint_getPoint4d_p(const LWPOINT *point, POINT4D *out)
Definition lwpoint.c:57
LWGEOM * lwpoint_as_lwgeom(const LWPOINT *obj)
Definition lwgeom.c:372
#define LW_FALSE
Definition liblwgeom.h:94
void lwpoint_free(LWPOINT *pt)
Definition lwpoint.c:213
#define LW_PARSER_CHECK_NONE
Definition liblwgeom.h:2149
int lwgeom_has_z(const LWGEOM *geom)
Return LW_TRUE if geometry has Z ordinates.
Definition lwgeom.c:962
LWLINE * lwgeom_as_lwline(const LWGEOM *lwgeom)
Definition lwgeom.c:207
#define LW_TRUE
Return types for functions with status returns.
Definition liblwgeom.h:93
LWLINE * lwline_construct_empty(int32_t srid, char hasz, char hasm)
Definition lwline.c:55
int lwgeom_has_m(const LWGEOM *geom)
Return LW_TRUE if geometry has M ordinates.
Definition lwgeom.c:969
LWGEOM * lwgeom_from_wkt(const char *wkt, const char check)
Definition lwin_wkt.c:940
void lwline_free(LWLINE *line)
Definition lwline.c:67
int lwpoint_is_empty(const LWPOINT *point)
double x
Definition liblwgeom.h:414
double z
Definition liblwgeom.h:414
double y
Definition liblwgeom.h:414

References LW_FALSE, LW_PARSER_CHECK_NONE, LW_TRUE, lwgeom_as_lwline(), lwgeom_from_wkt(), lwgeom_has_m(), lwgeom_has_z(), lwline_construct_empty(), lwline_free(), lwline_interpolate_point_3d(), lwpoint_as_lwgeom(), lwpoint_free(), lwpoint_getPoint4d_p(), lwpoint_is_empty(), POINT4D::x, POINT4D::y, and POINT4D::z.

Referenced by algorithms_suite_setup().

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