PostGIS 3.7.0dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches

◆ 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)
#define LW_FALSE
Definition liblwgeom.h:94
void lwgeom_free(LWGEOM *geom)
Definition lwgeom.c:1246
#define LW_PARSER_CHECK_NONE
Definition liblwgeom.h:2149
LWGEOM * lwgeom_simplify(const LWGEOM *igeom, double dist, int preserve_collapsed)
Simplification.
Definition lwgeom.c:1984
char * lwgeom_to_ewkt(const LWGEOM *lwgeom)
Return an allocated string.
Definition lwgeom.c:593
void lwfree(void *mem)
Definition lwutil.c:248
#define LW_TRUE
Return types for functions with status returns.
Definition liblwgeom.h:93
LWGEOM * lwgeom_from_wkt(const char *wkt, const char check)
Definition lwin_wkt.c:940

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: