#include "catch.hpp" #include #include #include #include #include #include #include TEST_CASE("transform_path_adapter") { #ifdef MAPNIK_USE_PROJ SECTION("polygon closing - epsg 2330") { mapnik::geometry::polygon g; g.emplace_back(); auto & exterior = g.back(); exterior.emplace_back(88.1844308217992, 69.3553916041731); exterior.emplace_back(88.1846166524913, 69.3552821191223); exterior.emplace_back(88.1845090893871, 69.3553454342903); exterior.emplace_back(88.1844308217992, 69.3553916041731); using va_type = mapnik::geometry::polygon_vertex_adapter; using path_type = mapnik::transform_path_adapter; va_type va(g); mapnik::box2d extent(16310607, 7704513, 16310621, 7704527); mapnik::view_transform tr(512, 512, extent); mapnik::projection proj1("epsg:2330"); mapnik::projection proj2("epsg:4326"); mapnik::proj_transform prj_trans(proj1, proj2); path_type path(tr, va, prj_trans); double x,y; unsigned cmd; cmd = path.vertex(&x, &y); CHECK( cmd == mapnik::SEG_MOVETO ); CHECK( x == Approx(110.4328050613) ); CHECK( y == Approx(20.2204537392) ); cmd = path.vertex(&x, &y); CHECK( cmd == mapnik::SEG_LINETO ); CHECK( x == Approx(342.1220560074) ); CHECK( y == Approx(486.732225963) ); cmd = path.vertex(&x, &y); CHECK( cmd == mapnik::SEG_LINETO ); CHECK( x == Approx(207.9962329183) ); CHECK( y == Approx(216.9376912798) ); // close cmd = path.vertex(&x, &y); CHECK( cmd == mapnik::SEG_CLOSE ); CHECK( x == 0 ); CHECK( y == 0 ); // end cmd = path.vertex(&x, &y); CHECK( cmd == mapnik::SEG_END ); CHECK( x == 0 ); CHECK( y == 0 ); } SECTION("polygon closing - epsg 32633") { mapnik::geometry::polygon g; g.emplace_back(); auto & exterior = g.back(); exterior.emplace_back(13, 13); exterior.emplace_back(14, 13); exterior.emplace_back(14, 14); exterior.emplace_back(14, 14); using va_type = mapnik::geometry::polygon_vertex_adapter; using path_type = mapnik::transform_path_adapter; va_type va(g); mapnik::box2d extent(166022, 0, 833978, 9329005); mapnik::view_transform tr(512, 512, extent); mapnik::projection proj1("epsg:32633"); mapnik::projection proj2("epsg:4326"); mapnik::proj_transform prj_trans(proj1, proj2); path_type path(tr, va, prj_trans); double x,y; unsigned cmd; cmd = path.vertex(&x, &y); CHECK( cmd == mapnik::SEG_MOVETO ); CHECK( x == Approx(89.7250280748) ); CHECK( y == Approx(433.0795069885) ); cmd = path.vertex(&x, &y); CHECK( cmd == mapnik::SEG_LINETO ); CHECK( x == Approx(172.873973465) ); CHECK( y == Approx(433.1145779929) ); cmd = path.vertex(&x, &y); CHECK( cmd == mapnik::SEG_LINETO ); CHECK( x == Approx(173.2194366775) ); CHECK( y == Approx(427.0442504759) ); // close cmd = path.vertex(&x, &y); CHECK( cmd == mapnik::SEG_CLOSE ); CHECK( x == 0 ); CHECK( y == 0 ); // end cmd = path.vertex(&x, &y); CHECK( cmd == mapnik::SEG_END ); CHECK( x == 0 ); CHECK( y == 0 ); } #endif //MAPNIK_USE_PROJ }