tiled_multi_file_policy(std::string const& file_pattern, std::string const& format, unsigned tile_size, box2d<double> extent, box2d<double> bbox, unsigned width, unsigned height, unsigned tile_stride) : image_width_(width), image_height_(height), tile_size_(tile_size), tile_stride_(tile_stride) { double lox = extent.minx(); double loy = extent.miny(); //int max_x = int(std::ceil(double(width) / double(tile_size))); //int max_y = int(std::ceil(double(height) / double(tile_size))); double pixel_x = extent.width() / double(width); double pixel_y = extent.height() / double(height); #ifdef MAPNIK_DEBUG std::clog << "Raster Plugin: PIXEL SIZE("<< pixel_x << "," << pixel_y << ")" << std::endl; #endif // intersection of query with extent => new query box2d<double> e = bbox.intersect(extent); const int x_min = int(std::floor((e.minx() - lox) / (tile_size * pixel_x))); const int y_min = int(std::floor((e.miny() - loy) / (tile_size * pixel_y))); const int x_max = int(std::ceil((e.maxx() - lox) / (tile_size * pixel_x))); const int y_max = int(std::ceil((e.maxy() - loy) / (tile_size * pixel_y))); for (int x = x_min; x < x_max; ++x) { for (int y = y_min; y < y_max; ++y) { // x0, y0, x1, y1 => projection-space image coordinates. double x0 = lox + x*tile_size*pixel_x; double y0 = loy + y*tile_size*pixel_y; double x1 = x0 + tile_size*pixel_x; double y1 = y0 + tile_size*pixel_y; // check if it intersects the query if (e.intersects(box2d<double>(x0,y0,x1,y1))) { // tile_box => intersection of tile with query in projection-space. box2d<double> tile_box = e.intersect(box2d<double>(x0,y0,x1,y1)); std::string file = interpolate(file_pattern, x, y); raster_info info(file,format,tile_box,tile_size,tile_size); infos_.push_back(info); } } } #ifdef MAPNIK_DEBUG std::clog << "Raster Plugin: INFO SIZE=" << infos_.size() << " " << file_pattern << std::endl; #endif }
tiled_file_policy(std::string const& file, std::string const& format, unsigned tile_size, box2d<double> extent, box2d<double> bbox, unsigned width, unsigned height) { double lox = extent.minx(); double loy = extent.miny(); int max_x = int(std::ceil(double(width) / double(tile_size))); int max_y = int(std::ceil(double(height) / double(tile_size))); double pixel_x = extent.width() / double(width); double pixel_y = extent.height() / double(height); #ifdef MAPNIK_DEBUG std::clog << "Raster Plugin: PIXEL SIZE("<< pixel_x << "," << pixel_y << ")" << std::endl; #endif box2d<double> e = bbox.intersect(extent); for (int x = 0; x < max_x; ++x) { for (int y = 0; y < max_y; ++y) { double x0 = lox + x * tile_size * pixel_x; double y0 = loy + y * tile_size * pixel_y; double x1 = x0 + tile_size * pixel_x; double y1 = y0 + tile_size * pixel_y; if (e.intersects(box2d<double>(x0, y0, x1, y1))) { box2d<double> tile_box = e.intersect(box2d<double>(x0,y0,x1,y1)); raster_info info(file,format,tile_box,tile_size,tile_size); infos_.push_back(info); } } } #ifdef MAPNIK_DEBUG std::clog << "Raster Plugin: INFO SIZE=" << infos_.size() << " " << file << std::endl; #endif }