PostGIS  3.4.0dev-r@@SVN_REVISION@@
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Macros Pages

◆ test_lwgeom_simplify()

static void test_lwgeom_simplify ( void  )
static

Definition at line 1275 of file cu_algorithm.c.

1276 {
1277  LWGEOM *l;
1278  LWGEOM *g;
1279  char *ewkt;
1280 
1281  /* Simplify but only so far... */
1282  g = lwgeom_from_wkt("LINESTRING(0 0, 1 0, 1 1, 0 1, 0 0)", LW_PARSER_CHECK_NONE);
1283  l = lwgeom_simplify(g, 10, LW_TRUE);
1284  ewkt = lwgeom_to_ewkt(l);
1285  ASSERT_STRING_EQUAL(ewkt, "LINESTRING(0 0,0 0)");
1286  lwgeom_free(g);
1287  lwgeom_free(l);
1288  lwfree(ewkt);
1289 
1290  /* Simplify but only so far... */
1291  g = lwgeom_from_wkt("POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))", LW_PARSER_CHECK_NONE);
1292  l = lwgeom_simplify(g, 10, LW_TRUE);
1293  ewkt = lwgeom_to_ewkt(l);
1294  ASSERT_STRING_EQUAL(ewkt, "POLYGON((0 0,1 0,1 1,0 0))");
1295  lwgeom_free(g);
1296  lwgeom_free(l);
1297  lwfree(ewkt);
1298 
1299  /* Simplify and collapse */
1300  g = lwgeom_from_wkt("LINESTRING(0 0, 1 0, 1 1, 0 1, 0 0)", LW_PARSER_CHECK_NONE);
1301  l = lwgeom_simplify(g, 10, LW_FALSE);
1302  CU_ASSERT_EQUAL(l, NULL);
1303  lwgeom_free(g);
1304  lwgeom_free(l);
1305 
1306  /* Simplify and collapse */
1307  g = lwgeom_from_wkt("POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))", LW_PARSER_CHECK_NONE);
1308  l = lwgeom_simplify(g, 10, LW_FALSE);
1309  CU_ASSERT_EQUAL(l, NULL);
1310  lwgeom_free(g);
1311  lwgeom_free(l);
1312 
1313  /* Not simplifiable */
1314  g = lwgeom_from_wkt("LINESTRING(0 0, 50 1.00001, 100 0)", LW_PARSER_CHECK_NONE);
1315  l = lwgeom_simplify(g, 1.0, LW_FALSE);
1316  ewkt = lwgeom_to_ewkt(l);
1317  ASSERT_STRING_EQUAL(ewkt, "LINESTRING(0 0,50 1.00001,100 0)");
1318  lwgeom_free(g);
1319  lwgeom_free(l);
1320  lwfree(ewkt);
1321 
1322  /* Simplifiable */
1323  g = lwgeom_from_wkt("LINESTRING(0 0,50 0.99999,100 0)", LW_PARSER_CHECK_NONE);
1324  l = lwgeom_simplify(g, 1.0, LW_FALSE);
1325  ewkt = lwgeom_to_ewkt(l);
1326  ASSERT_STRING_EQUAL(ewkt, "LINESTRING(0 0,100 0)");
1327  lwgeom_free(g);
1328  lwgeom_free(l);
1329  lwfree(ewkt);
1330 
1331  /* POLYGON with multiple inner rings*/
1332  g = lwgeom_from_wkt(
1333  "POLYGON("
1334  "(0 0, 100 0, 100 100, 0 100, 0 0),"
1335  "(1 1, 1 5, 5 5, 5 1, 1 1),"
1336  "(20 20, 20 40, 40 40, 40 20, 20 20)"
1337  ")",
1339  l = lwgeom_simplify(g, 10, LW_FALSE);
1340  ewkt = lwgeom_to_ewkt(l);
1341  ASSERT_STRING_EQUAL(ewkt, "POLYGON((0 0,100 0,100 100,0 100,0 0),(20 20,20 40,40 40,40 20,20 20))");
1342  lwgeom_free(g);
1343  lwgeom_free(l);
1344  lwfree(ewkt);
1345 
1346  /* Reorder inner rings: Same result */
1347  g = lwgeom_from_wkt(
1348  "POLYGON("
1349  "(0 0, 100 0, 100 100, 0 100, 0 0),"
1350  "(20 20, 20 40, 40 40, 40 20, 20 20),"
1351  "(1 1, 1 5, 5 5, 5 1, 1 1)"
1352  ")",
1354  l = lwgeom_simplify(g, 10, LW_FALSE);
1355  ewkt = lwgeom_to_ewkt(l);
1356  ASSERT_STRING_EQUAL(ewkt, "POLYGON((0 0,100 0,100 100,0 100,0 0),(20 20,20 40,40 40,40 20,20 20))");
1357  lwgeom_free(g);
1358  lwgeom_free(l);
1359  lwfree(ewkt);
1360 
1361  g = lwgeom_from_wkt(
1362  "POLYGON("
1363  "(0 0, 100 0, 100 100, 0 100, 0 0),"
1364  "(20 20, 20 40, 40 40, 40 20, 20 20),"
1365  "(1 1, 1 5, 5 5, 5 1, 1 1)"
1366  ")",
1368  l = lwgeom_simplify(g, 100, LW_FALSE);
1369  CU_ASSERT_EQUAL(l, NULL);
1370  lwgeom_free(g);
1371  lwgeom_free(l);
1372 }
#define ASSERT_STRING_EQUAL(o, e)
LWGEOM * lwgeom_simplify(const LWGEOM *igeom, double dist, int preserve_collapsed)
Simplification.
Definition: lwgeom.c:1870
#define LW_FALSE
Definition: liblwgeom.h:94
void lwgeom_free(LWGEOM *geom)
Definition: lwgeom.c:1155
#define LW_PARSER_CHECK_NONE
Definition: liblwgeom.h:2114
char * lwgeom_to_ewkt(const LWGEOM *lwgeom)
Return an alloced string.
Definition: lwgeom.c:565
void lwfree(void *mem)
Definition: lwutil.c:242
LWGEOM * lwgeom_from_wkt(const char *wkt, const char check)
Definition: lwin_wkt.c:905
#define LW_TRUE
Return types for functions with status returns.
Definition: liblwgeom.h:93

References ASSERT_STRING_EQUAL, LW_FALSE, LW_PARSER_CHECK_NONE, LW_TRUE, lwfree(), lwgeom_free(), lwgeom_from_wkt(), lwgeom_simplify(), and lwgeom_to_ewkt().

Referenced by algorithms_suite_setup().

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