void operator() (mapnik::geometry::line_string<T> const& ls1, mapnik::geometry::line_string<T> const& ls2) { if (ls1.size() != ls2.size()) { REQUIRE(false); } for(auto const& p : zip_crange(ls1, ls2)) { REQUIRE(p.template get<0>().x == Approx(p.template get<1>().x)); REQUIRE(p.template get<0>().y == Approx(p.template get<1>().y)); } }
inline bool encode_geometry(mapnik::geometry::line_string<std::int64_t> const& line, vector_tile::Tile_Feature & current_feature, int32_t & start_x, int32_t & start_y) { std::size_t line_size = line.size(); if (line_size <= 0) { return false; } unsigned line_to_length = static_cast<unsigned>(line_size) - 1; enum { move_to = 1, line_to = 2, coords = 3 } status = move_to; for (auto const& pt : line) { if (status == move_to) { status = line_to; current_feature.add_geometry(9); // 1 | (move_to << 3) } else if (status == line_to) { status = coords; current_feature.add_geometry(encode_length(line_to_length)); } int32_t dx = pt.x - start_x; int32_t dy = pt.y - start_y; // Manual zigzag encoding. current_feature.add_geometry(protozero::encode_zigzag32(dx)); current_feature.add_geometry(protozero::encode_zigzag32(dy)); start_x = pt.x; start_y = pt.y; } return true; }