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

◆ test_lw_dist2d_ptarray_ptarrayarc()

static void test_lw_dist2d_ptarray_ptarrayarc ( void  )
static

Definition at line 1249 of file cu_measures.c.

1250{
1251 /* int lw_dist2d_ptarray_ptarrayarc(const POINTARRAY *pa, const POINTARRAY *pb, DISTPTS *dl) */
1252 DISTPTS dl;
1253 int rv;
1254 LWLINE *lwline1;
1255 LWLINE *lwline2;
1256
1257 /* Unit semi-circle above X axis */
1258 lwline1 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(-1 0, 0 1, 1 0)"));
1259
1260 /* Line above top of semi-circle */
1261 lwline2 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(-2 2, -1 2, 1 2, 2 2)"));
1263 rv = lw_dist2d_ptarray_ptarrayarc(lwline2->points, lwline1->points, &dl);
1264 CU_ASSERT_EQUAL( rv, LW_SUCCESS );
1265 CU_ASSERT_DOUBLE_EQUAL(dl.distance, 1, 0.000001);
1266
1267 /* Reversed arguments, should fail */
1270 rv = lw_dist2d_ptarray_ptarrayarc(lwline1->points, lwline2->points, &dl);
1271 //printf("%s\n", cu_error_msg);
1272 CU_ASSERT_EQUAL( rv, LW_FAILURE );
1275 "lw_dist2d_ptarray_ptarrayarc called with non-arc input");
1276
1277 lwline_free(lwline2);
1278
1279 /* Line along side of semi-circle */
1280 lwline2 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(-2 -3, -2 -2, -2 2, -2 3)"));
1282 rv = lw_dist2d_ptarray_ptarrayarc(lwline2->points, lwline1->points, &dl);
1283 CU_ASSERT_EQUAL( rv, LW_SUCCESS );
1284 CU_ASSERT_DOUBLE_EQUAL(dl.distance, 1, 0.000001);
1285
1286 /* Four unit semi-circles surrounding the 2x2 box around origin */
1287 lwline_free(lwline1);
1288 lwline_free(lwline2);
1289 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)"));
1290 lwline2 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(-2.5 -3, -2.5 -2, -2.5 2, -2.5 3)"));
1291 rv = lw_dist2d_ptarray_ptarrayarc(lwline2->points, lwline1->points, &dl);
1292 CU_ASSERT_EQUAL( rv, LW_SUCCESS );
1293 CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0.5, 0.000001);
1294
1295 lwline_free(lwline2);
1296 lwline_free(lwline1);
1297}
static LWGEOM * lwgeom_from_text(const char *str)
Definition cu_measures.c:25
void cu_error_msg_reset()
char cu_error_msg[MAX_CUNIT_ERROR_LENGTH+1]
#define ASSERT_STRING_EQUAL(o, e)
#define LW_FAILURE
Definition liblwgeom.h:96
#define LW_SUCCESS
Definition liblwgeom.h:97
LWLINE * lwgeom_as_lwline(const LWGEOM *lwgeom)
Definition lwgeom.c:207
void lwline_free(LWLINE *line)
Definition lwline.c:67
void lw_dist2d_distpts_init(DISTPTS *dl, int mode)
Definition measures.c:67
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:1246
#define DIST_MIN
Definition measures.h:44
double distance
Definition measures.h:51
Structure used in distance-calculations.
Definition measures.h:50
POINTARRAY * points
Definition liblwgeom.h:483

References ASSERT_STRING_EQUAL, 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().

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