PostGIS  3.1.6dev-r@@SVN_REVISION@@

◆ test_lwgeom_simplify()

static void test_lwgeom_simplify ( void  )
static

Definition at line 1255 of file cu_algorithm.c.

1256 {
1257  LWGEOM *l;
1258  LWGEOM *g;
1259  char *ewkt;
1260 
1261  /* Simplify but only so far... */
1262  g = lwgeom_from_wkt("LINESTRING(0 0, 1 0, 1 1, 0 1, 0 0)", LW_PARSER_CHECK_NONE);
1263  l = lwgeom_simplify(g, 10, LW_TRUE);
1264  ewkt = lwgeom_to_ewkt(l);
1265  ASSERT_STRING_EQUAL(ewkt, "LINESTRING(0 0,0 0)");
1266  lwgeom_free(g);
1267  lwgeom_free(l);
1268  lwfree(ewkt);
1269 
1270  /* Simplify but only so far... */
1271  g = lwgeom_from_wkt("POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))", LW_PARSER_CHECK_NONE);
1272  l = lwgeom_simplify(g, 10, LW_TRUE);
1273  ewkt = lwgeom_to_ewkt(l);
1274  ASSERT_STRING_EQUAL(ewkt, "POLYGON((0 0,1 0,1 1,0 0))");
1275  lwgeom_free(g);
1276  lwgeom_free(l);
1277  lwfree(ewkt);
1278 
1279  /* Simplify and collapse */
1280  g = lwgeom_from_wkt("LINESTRING(0 0, 1 0, 1 1, 0 1, 0 0)", LW_PARSER_CHECK_NONE);
1281  l = lwgeom_simplify(g, 10, LW_FALSE);
1282  CU_ASSERT_EQUAL(l, NULL);
1283  lwgeom_free(g);
1284  lwgeom_free(l);
1285 
1286  /* Simplify and collapse */
1287  g = lwgeom_from_wkt("POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))", LW_PARSER_CHECK_NONE);
1288  l = lwgeom_simplify(g, 10, LW_FALSE);
1289  CU_ASSERT_EQUAL(l, NULL);
1290  lwgeom_free(g);
1291  lwgeom_free(l);
1292 
1293  /* Not simplifiable */
1294  g = lwgeom_from_wkt("LINESTRING(0 0, 50 1.00001, 100 0)", LW_PARSER_CHECK_NONE);
1295  l = lwgeom_simplify(g, 1.0, LW_FALSE);
1296  ewkt = lwgeom_to_ewkt(l);
1297  ASSERT_STRING_EQUAL(ewkt, "LINESTRING(0 0,50 1.00001,100 0)");
1298  lwgeom_free(g);
1299  lwgeom_free(l);
1300  lwfree(ewkt);
1301 
1302  /* Simplifiable */
1303  g = lwgeom_from_wkt("LINESTRING(0 0,50 0.99999,100 0)", LW_PARSER_CHECK_NONE);
1304  l = lwgeom_simplify(g, 1.0, LW_FALSE);
1305  ewkt = lwgeom_to_ewkt(l);
1306  ASSERT_STRING_EQUAL(ewkt, "LINESTRING(0 0,100 0)");
1307  lwgeom_free(g);
1308  lwgeom_free(l);
1309  lwfree(ewkt);
1310 
1311  /* POLYGON with multiple inner rings*/
1312  g = lwgeom_from_wkt(
1313  "POLYGON("
1314  "(0 0, 100 0, 100 100, 0 100, 0 0),"
1315  "(1 1, 1 5, 5 5, 5 1, 1 1),"
1316  "(20 20, 20 40, 40 40, 40 20, 20 20)"
1317  ")",
1319  l = lwgeom_simplify(g, 10, LW_FALSE);
1320  ewkt = lwgeom_to_ewkt(l);
1321  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))");
1322  lwgeom_free(g);
1323  lwgeom_free(l);
1324  lwfree(ewkt);
1325 
1326  /* Reorder inner rings: Same result */
1327  g = lwgeom_from_wkt(
1328  "POLYGON("
1329  "(0 0, 100 0, 100 100, 0 100, 0 0),"
1330  "(20 20, 20 40, 40 40, 40 20, 20 20),"
1331  "(1 1, 1 5, 5 5, 5 1, 1 1)"
1332  ")",
1334  l = lwgeom_simplify(g, 10, LW_FALSE);
1335  ewkt = lwgeom_to_ewkt(l);
1336  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))");
1337  lwgeom_free(g);
1338  lwgeom_free(l);
1339  lwfree(ewkt);
1340 
1341  g = lwgeom_from_wkt(
1342  "POLYGON("
1343  "(0 0, 100 0, 100 100, 0 100, 0 0),"
1344  "(20 20, 20 40, 40 40, 40 20, 20 20),"
1345  "(1 1, 1 5, 5 5, 5 1, 1 1)"
1346  ")",
1348  l = lwgeom_simplify(g, 100, LW_FALSE);
1349  CU_ASSERT_EQUAL(l, NULL);
1350  lwgeom_free(g);
1351  lwgeom_free(l);
1352 }
#define ASSERT_STRING_EQUAL(o, e)
LWGEOM * lwgeom_simplify(const LWGEOM *igeom, double dist, int preserve_collapsed)
Simplification.
Definition: lwgeom.c:1847
#define LW_FALSE
Definition: liblwgeom.h:108
void lwgeom_free(LWGEOM *geom)
Definition: lwgeom.c:1138
#define LW_PARSER_CHECK_NONE
Definition: liblwgeom.h:2085
char * lwgeom_to_ewkt(const LWGEOM *lwgeom)
Return an alloced string.
Definition: lwgeom.c:548
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:107

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: