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

◆ 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)
#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
LWGEOM * lwgeom_simplify(const LWGEOM *igeom, double dist, int preserve_collapsed)
Simplification.
Definition lwgeom.c:1848
char * lwgeom_to_ewkt(const LWGEOM *lwgeom)
Return an alloced string.
Definition lwgeom.c:547
void lwfree(void *mem)
Definition lwutil.c:242
#define LW_TRUE
Return types for functions with status returns.
Definition liblwgeom.h:107
LWGEOM * lwgeom_from_wkt(const char *wkt, const char check)
Definition lwin_wkt.c:905

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: