PostGIS  3.0.6dev-r@@SVN_REVISION@@

◆ test_lwgeom_simplify()

static void test_lwgeom_simplify ( void  )
static

Definition at line 1250 of file cu_algorithm.c.

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