PostGIS  3.7.0dev-r@@SVN_REVISION@@

◆ test_lwgeom_simplify()

static void test_lwgeom_simplify ( void  )
static

Definition at line 1274 of file cu_algorithm.c.

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