PostGIS  2.3.7dev-r@@SVN_REVISION@@
static void test_lw_dist2d_ptarray_ptarrayarc ( void  )
static

Definition at line 938 of file cu_measures.c.

References cu_error_msg, cu_error_msg_reset(), DIST_MIN, DISTPTS::distance, lw_dist2d_distpts_init(), lw_dist2d_ptarray_ptarrayarc(), LW_FAILURE, LW_SUCCESS, lwgeom_as_lwline(), lwgeom_from_text(), lwline_free(), and LWLINE::points.

Referenced by measures_suite_setup().

939 {
940  /* int lw_dist2d_ptarray_ptarrayarc(const POINTARRAY *pa, const POINTARRAY *pb, DISTPTS *dl) */
941  DISTPTS dl;
942  int rv;
943  LWLINE *lwline1;
944  LWLINE *lwline2;
945 
946  /* Unit semi-circle above X axis */
947  lwline1 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(-1 0, 0 1, 1 0)"));
948 
949  /* Line above top of semi-circle */
950  lwline2 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(-2 2, -1 2, 1 2, 2 2)"));
952  rv = lw_dist2d_ptarray_ptarrayarc(lwline2->points, lwline1->points, &dl);
953  CU_ASSERT_EQUAL( rv, LW_SUCCESS );
954  CU_ASSERT_DOUBLE_EQUAL(dl.distance, 1, 0.000001);
955 
956  /* Reversed arguments, should fail */
959  rv = lw_dist2d_ptarray_ptarrayarc(lwline1->points, lwline2->points, &dl);
960  //printf("%s\n", cu_error_msg);
961  CU_ASSERT_EQUAL( rv, LW_FAILURE );
962  CU_ASSERT_STRING_EQUAL("lw_dist2d_ptarray_ptarrayarc called with non-arc input", cu_error_msg);
963 
964  lwline_free(lwline2);
965 
966  /* Line along side of semi-circle */
967  lwline2 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(-2 -3, -2 -2, -2 2, -2 3)"));
969  rv = lw_dist2d_ptarray_ptarrayarc(lwline2->points, lwline1->points, &dl);
970  CU_ASSERT_EQUAL( rv, LW_SUCCESS );
971  CU_ASSERT_DOUBLE_EQUAL(dl.distance, 1, 0.000001);
972 
973  /* Four unit semi-circles surrounding the 2x2 box around origin */
974  lwline_free(lwline1);
975  lwline_free(lwline2);
976  lwline1 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(-1 -1, -2 0, -1 1, 0 2, 1 1, 2 0, 1 -1, 0 -2, -1 -1)"));
977  lwline2 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(-2.5 -3, -2.5 -2, -2.5 2, -2.5 3)"));
978  rv = lw_dist2d_ptarray_ptarrayarc(lwline2->points, lwline1->points, &dl);
979  CU_ASSERT_EQUAL( rv, LW_SUCCESS );
980  CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0.5, 0.000001);
981 
982  lwline_free(lwline2);
983  lwline_free(lwline1);
984 }
#define LW_SUCCESS
Definition: liblwgeom.h:79
void lwline_free(LWLINE *line)
Definition: lwline.c:76
static LWGEOM * lwgeom_from_text(const char *str)
Definition: cu_measures.c:24
#define LW_FAILURE
Definition: liblwgeom.h:78
#define DIST_MIN
Definition: measures.h:41
void cu_error_msg_reset()
int lw_dist2d_ptarray_ptarrayarc(const POINTARRAY *pa, const POINTARRAY *pb, DISTPTS *dl)
Test each segment of pa against each arc of pb for distance.
Definition: measures.c:1183
LWLINE * lwgeom_as_lwline(const LWGEOM *lwgeom)
Definition: lwgeom.c:102
double distance
Definition: measures.h:48
Structure used in distance-calculations.
Definition: measures.h:46
void lw_dist2d_distpts_init(DISTPTS *dl, int mode)
Definition: measures.c:67
char cu_error_msg[MAX_CUNIT_ERROR_LENGTH+1]
POINTARRAY * points
Definition: liblwgeom.h:421

Here is the call graph for this function:

Here is the caller graph for this function: