PostGIS  3.3.9dev-r@@SVN_REVISION@@

◆ test_lwgeom_simplify()

static void test_lwgeom_simplify ( void  )
static

Definition at line 1267 of file cu_algorithm.c.

1268 {
1269  LWGEOM *l;
1270  LWGEOM *g;
1271  char *ewkt;
1272 
1273  /* Simplify but only so far... */
1274  g = lwgeom_from_wkt("LINESTRING(0 0, 1 0, 1 1, 0 1, 0 0)", LW_PARSER_CHECK_NONE);
1275  l = lwgeom_simplify(g, 10, LW_TRUE);
1276  ewkt = lwgeom_to_ewkt(l);
1277  ASSERT_STRING_EQUAL(ewkt, "LINESTRING(0 0,0 0)");
1278  lwgeom_free(g);
1279  lwgeom_free(l);
1280  lwfree(ewkt);
1281 
1282  /* Simplify but only so far... */
1283  g = lwgeom_from_wkt("POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))", LW_PARSER_CHECK_NONE);
1284  l = lwgeom_simplify(g, 10, LW_TRUE);
1285  ewkt = lwgeom_to_ewkt(l);
1286  ASSERT_STRING_EQUAL(ewkt, "POLYGON((0 0,1 0,1 1,0 0))");
1287  lwgeom_free(g);
1288  lwgeom_free(l);
1289  lwfree(ewkt);
1290 
1291  /* Simplify and collapse */
1292  g = lwgeom_from_wkt("LINESTRING(0 0, 1 0, 1 1, 0 1, 0 0)", LW_PARSER_CHECK_NONE);
1293  l = lwgeom_simplify(g, 10, LW_FALSE);
1294  CU_ASSERT_EQUAL(l, NULL);
1295  lwgeom_free(g);
1296  lwgeom_free(l);
1297 
1298  /* Simplify and collapse */
1299  g = lwgeom_from_wkt("POLYGON((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  /* Not simplifiable */
1306  g = lwgeom_from_wkt("LINESTRING(0 0, 50 1.00001, 100 0)", LW_PARSER_CHECK_NONE);
1307  l = lwgeom_simplify(g, 1.0, LW_FALSE);
1308  ewkt = lwgeom_to_ewkt(l);
1309  ASSERT_STRING_EQUAL(ewkt, "LINESTRING(0 0,50 1.00001,100 0)");
1310  lwgeom_free(g);
1311  lwgeom_free(l);
1312  lwfree(ewkt);
1313 
1314  /* Simplifiable */
1315  g = lwgeom_from_wkt("LINESTRING(0 0,50 0.99999,100 0)", LW_PARSER_CHECK_NONE);
1316  l = lwgeom_simplify(g, 1.0, LW_FALSE);
1317  ewkt = lwgeom_to_ewkt(l);
1318  ASSERT_STRING_EQUAL(ewkt, "LINESTRING(0 0,100 0)");
1319  lwgeom_free(g);
1320  lwgeom_free(l);
1321  lwfree(ewkt);
1322 
1323  /* POLYGON with multiple inner rings*/
1324  g = lwgeom_from_wkt(
1325  "POLYGON("
1326  "(0 0, 100 0, 100 100, 0 100, 0 0),"
1327  "(1 1, 1 5, 5 5, 5 1, 1 1),"
1328  "(20 20, 20 40, 40 40, 40 20, 20 20)"
1329  ")",
1331  l = lwgeom_simplify(g, 10, LW_FALSE);
1332  ewkt = lwgeom_to_ewkt(l);
1333  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))");
1334  lwgeom_free(g);
1335  lwgeom_free(l);
1336  lwfree(ewkt);
1337 
1338  /* Reorder inner rings: Same result */
1339  g = lwgeom_from_wkt(
1340  "POLYGON("
1341  "(0 0, 100 0, 100 100, 0 100, 0 0),"
1342  "(20 20, 20 40, 40 40, 40 20, 20 20),"
1343  "(1 1, 1 5, 5 5, 5 1, 1 1)"
1344  ")",
1346  l = lwgeom_simplify(g, 10, LW_FALSE);
1347  ewkt = lwgeom_to_ewkt(l);
1348  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))");
1349  lwgeom_free(g);
1350  lwgeom_free(l);
1351  lwfree(ewkt);
1352 
1353  g = lwgeom_from_wkt(
1354  "POLYGON("
1355  "(0 0, 100 0, 100 100, 0 100, 0 0),"
1356  "(20 20, 20 40, 40 40, 40 20, 20 20),"
1357  "(1 1, 1 5, 5 5, 5 1, 1 1)"
1358  ")",
1360  l = lwgeom_simplify(g, 100, LW_FALSE);
1361  CU_ASSERT_EQUAL(l, NULL);
1362  lwgeom_free(g);
1363  lwgeom_free(l);
1364 }
#define ASSERT_STRING_EQUAL(o, e)
LWGEOM * lwgeom_simplify(const LWGEOM *igeom, double dist, int preserve_collapsed)
Simplification.
Definition: lwgeom.c:1893
#define LW_FALSE
Definition: liblwgeom.h:109
void lwgeom_free(LWGEOM *geom)
Definition: lwgeom.c:1155
#define LW_PARSER_CHECK_NONE
Definition: liblwgeom.h:2096
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:108

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: