#include "bench_framework.hpp" #include #include #include class test : public benchmark::test_case { std::string src_; std::string dest_; mapnik::box2d from_; mapnik::box2d to_; bool defer_proj_init_; public: test(mapnik::parameters const& params, std::string const& src, std::string const& dest, mapnik::box2d const& from, mapnik::box2d const& to, bool defer_proj) : test_case(params), src_(src), dest_(dest), from_(from), to_(to), defer_proj_init_(defer_proj) {} bool validate() const { mapnik::projection src(src_,defer_proj_init_); mapnik::projection dest(dest_,defer_proj_init_); mapnik::proj_transform tr(src,dest); mapnik::box2d bbox = from_; if (!tr.forward(bbox)) return false; return ((std::fabs(bbox.minx() - to_.minx()) < .5) && (std::fabs(bbox.maxx() - to_.maxx()) < .5) && (std::fabs(bbox.miny() - to_.miny()) < .5) && (std::fabs(bbox.maxy() - to_.maxy()) < .5) ); } bool operator()() const { mapnik::projection src(src_,defer_proj_init_); mapnik::projection dest(dest_,defer_proj_init_); mapnik::proj_transform tr(src,dest); for (std::size_t i=0;i box(j,k,j,k); if (!tr.forward(box)) throw std::runtime_error("could not transform coords"); } } } return true; } }; // echo -180 -60 | cs2cs -f "%.10f" epsg:4326 +to epsg:3857 int main(int argc, char** argv) { mapnik::box2d from(-180,-80,180,80); mapnik::box2d to(-20037508.3427892476,-15538711.0963092316,20037508.3427892476,15538711.0963092316); std::string from_str("epsg:4326"); std::string to_str("epsg:3857"); std::string from_str2("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"); std::string to_str2("+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over"); return benchmark::sequencer(argc, argv) .run("lonlat->merc epsg (internal)", from_str, to_str, from, to, true) .run("lonlat->merc literal (libproj)", from_str2, to_str2, from, to, true) .run("merc->lonlat epsg (internal)", to_str, from_str, to, from, true) .run("merc->lonlat literal (libproj)", to_str2, from_str2, to, from, true) .done(); }