diff --git a/test/unit/vertex_adapter/simplify_converters_test.cpp b/test/unit/vertex_adapter/simplify_converters_test.cpp index 8ce1c11c8..903b6acc8 100644 --- a/test/unit/vertex_adapter/simplify_converters_test.cpp +++ b/test/unit/vertex_adapter/simplify_converters_test.cpp @@ -1,10 +1,13 @@ - #include "catch.hpp" -//#include -//#include -//#include -//#include +#include +#include +#include +#include +#include +#include +#include + // stl #include @@ -12,73 +15,115 @@ // Convenience method for test cases void simplify(std::string const& wkt_in, double tolerance, std::string const& method, std::string const& expected) { -#if 0 // FIXME //grab the geom - mapnik::geometry_container multi_input; - if (!mapnik::from_wkt(wkt_in , multi_input)) + mapnik::geometry::geometry input; + if (!mapnik::from_wkt(wkt_in , input)) { throw std::runtime_error("Failed to parse WKT"); } - //setup the generalization - mapnik::vertex_adapter va(multi_input.front()); - mapnik::simplify_converter generalizer(va); - generalizer.set_simplify_algorithm(mapnik::simplify_algorithm_from_string(method).get()); - generalizer.set_simplify_tolerance(tolerance); - //suck the vertices back out of it - mapnik::geometry_type* output = new mapnik::geometry_type(multi_input.front().type()); - mapnik::CommandType cmd; - double x, y; - while ((cmd = (mapnik::CommandType)generalizer.vertex(&x, &y)) != mapnik::SEG_END) + //setup the generalization for LineStings + if (mapnik::geometry::geometry_type(input) == mapnik::geometry::geometry_types::LineString) { - output->push_vertex(x, y, cmd); + mapnik::geometry::line_string line = input.get>(); + mapnik::geometry::line_string_vertex_adapter va(line); + mapnik::simplify_converter> generalizer(va); + generalizer.set_simplify_algorithm(mapnik::simplify_algorithm_from_string(method).get()); + generalizer.set_simplify_tolerance(tolerance); + mapnik::geometry::line_string output; + mapnik::CommandType cmd; + double x, y; + + while ((cmd = (mapnik::CommandType)generalizer.vertex(&x, &y)) != mapnik::SEG_END) + { + output.emplace_back(x, y); + } + std::string wkt_out; + REQUIRE(mapnik::util::to_wkt(wkt_out, output)); + REQUIRE(wkt_out == expected); } - //construct the answer - mapnik::geometry_container multi_out; - multi_out.push_back(output); - std::string wkt_out; - REQUIRE(mapnik::to_wkt(multi_out, wkt_out)); - REQUIRE(wkt_out == expected); -#endif } TEST_CASE("converters") { - SECTION("simplify") + SECTION("simplify-douglas-peucker") { - simplify(std::string("LineString(0 0,2 2,3 5,4 1,5 0,6 7,7 0)"), + simplify(std::string("LINESTRING(0 0,2 2,3 5,4 1,5 0,6 7,7 0)"), 4, "douglas-peucker", - std::string("LineString(0 0,6 7,7 0)")); + std::string("LINESTRING(0 0,6 7,7 0)")); - simplify(std::string("LineString(0 0,2 2,3 5,4 1,5 0,6 7,7 0)"), + simplify(std::string("LINESTRING(0 0,2 2,3 5,4 1,5 0,6 7,7 0)"), 2, "douglas-peucker", - std::string("LineString(0 0,3 5,5 0,6 7,7 0)")); + std::string("LINESTRING(0 0,3 5,5 0,6 7,7 0)")); simplify( - std::string("LineString(10 0,9 -4,7 -7,4 -9,0 -10,-4 -9,-7 -7,-9 -4,-10 0,-9 4,-7 7,-4 9,0 10,4 9,7 7,9 4)"), + std::string("LINESTRING(10 0,9 -4,7 -7,4 -9,0 -10,-4 -9,-7 -7,-9 -4,-10 0,-9 4,-7 7,-4 9,0 10,4 9,7 7,9 4)"), 4, "douglas-peucker", - std::string("LineString(10 0,0 -10,-10 0,0 10,9 4)")); + std::string("LINESTRING(10 0,0 -10,-10 0,0 10,9 4)")); - simplify(std::string("LineString(0 0,1 1,2 2,0 10,0 0)"), + simplify(std::string("LINESTRING(0 0,1 1,2 2,0 10,0 0)"), 10, "douglas-peucker", - std::string("LineString(0 0,0 0)")); + std::string("LINESTRING(0 0,0 0)")); - simplify(std::string("LineString(0 0,1 1,2 2,0 10,0 0)"), + simplify(std::string("LINESTRING(0 0,1 1,2 2,0 10,0 0)"), 8, "douglas-peucker", - std::string("LineString(0 0,0 10,0 0)")); + std::string("LINESTRING(0 0,0 10,0 0)")); - simplify(std::string("LineString(0 0,1 1,2 2,0 10,0 0)"), + simplify(std::string("LINESTRING(0 0,1 1,2 2,0 10,0 0)"), 1, "douglas-peucker", - std::string("LineString(0 0,2 2,0 10,0 0)")); + std::string("LINESTRING(0 0,2 2,0 10,0 0)")); - simplify(std::string("LineString(0 0, 1 -1, 2 2, 0 -10, 0 0, -5 7, 4 6)"), + simplify(std::string("LINESTRING(0 0, 1 -1, 2 2, 0 -10, 0 0, -5 7, 4 6)"), 3, "douglas-peucker", - std::string("LineString(0 0,0 -10,-5 7,4 6)")); + std::string("LINESTRING(0 0,0 -10,-5 7,4 6)")); + + simplify(std::string("LINESTRING(19.1425676643848 48.3706356666503,19.1425502300262 48.3706623938922,19.1425006091595 48.3706410120998,19.1425113379955 48.3706784302306,19.1424550116062 48.3706632848,19.1424348950386 48.3707069392642,19.1423343122005 48.3706632848,19.1422645747662 48.3706677393389,19.1411232948303 48.3712040629718,19.1395568847656 48.3707336664687,19.1382908821106 48.3711042822585,19.1368532180786 48.3705055938728,19.1365367174149 48.3702775202553,19.1362524032593 48.3704022481414,19.1361290216446 48.3702917748863,19.1359841823578 48.3703594843292,19.1358715295792 48.3702953385434,19.1357481479645 48.3703844298907,19.1356247663498 48.3703452297171,19.1356556117535 48.3704075936154,19.1355912387371 48.3704102663522,19.1355885565281 48.3704432300945)"), + 0.0001, + "douglas-peucker", + std::string("LINESTRING(19.1425676643848 48.3706356666503,19.1411232948303 48.3712040629718,19.1395568847656 48.3707336664687,19.1382908821106 48.3711042822585,19.1365367174149 48.3702775202553,19.1355885565281 48.3704432300945)")); + } + SECTION("simplify-radial-distance") + { + simplify(std::string("LINESTRING(0 0,2 2,3 5,4 1,5 0,6 7,7 0)"), + 40, + "radial-distance", + std::string("LINESTRING(0 0,6 7,7 0)")); + + simplify(std::string("LINESTRING(0 0,2 2,3 5,4 1,5 0,6 7,7 0)"), + 20, + "radial-distance", + std::string("LINESTRING(0 0,3 5,5 0,6 7,7 0)")); + + simplify( + std::string("LINESTRING(10 0,9 -4,7 -7,4 -9,0 -10,-4 -9,-7 -7,-9 -4,-10 0,-9 4,-7 7,-4 9,0 10,4 9,7 7,9 4)"), + 40, + "radial-distance", + std::string("LINESTRING(10 0,7 -7,0 -10,-7 -7,-10 0,-7 7,0 10,7 7,9 4)")); + + simplify(std::string("LINESTRING(0 0,1 1,2 2,0 10,0 0)"), + 100, + "radial-distance", + std::string("LINESTRING(0 0,0 0)")); + simplify(std::string("LINESTRING(0 0,1 1,2 2,0 10,0 0)"), + 10, + "radial-distance", + std::string("LINESTRING(0 0,0 10,0 0)")); + + simplify(std::string("LINESTRING(0 0, 1 -1, 2 2, 0 -10, 0 0, -5 7, 4 6)"), + 30, + "radial-distance", + std::string("LINESTRING(0 0,0 -10,0 0,-5 7,4 6)")); + + simplify(std::string("LINESTRING(19.1425676643848 48.3706356666503,19.1425502300262 48.3706623938922,19.1425006091595 48.3706410120998,19.1425113379955 48.3706784302306,19.1424550116062 48.3706632848,19.1424348950386 48.3707069392642,19.1423343122005 48.3706632848,19.1422645747662 48.3706677393389,19.1411232948303 48.3712040629718,19.1395568847656 48.3707336664687,19.1382908821106 48.3711042822585,19.1368532180786 48.3705055938728,19.1365367174149 48.3702775202553,19.1362524032593 48.3704022481414,19.1361290216446 48.3702917748863,19.1359841823578 48.3703594843292,19.1358715295792 48.3702953385434,19.1357481479645 48.3703844298907,19.1356247663498 48.3703452297171,19.1356556117535 48.3704075936154,19.1355912387371 48.3704102663522,19.1355885565281 48.3704432300945)"), + 0.000001, + "radial-distance", + std::string("LINESTRING(19.1425676643848 48.3706356666503,19.1411232948303 48.3712040629718,19.1395568847656 48.3707336664687,19.1382908821106 48.3711042822585,19.1368532180786 48.3705055938728,19.1358715295792 48.3702953385434,19.1355885565281 48.3704432300945)")); + } }