std::forward_list<Tile::ID> Source::coveringTiles(const TransformState& state) const { int32_t z = coveringZoomLevel(state); if (z < info.min_zoom) return {{}}; if (z > info.max_zoom) z = info.max_zoom; // Map four viewport corners to pixel coordinates box points = state.cornersToBox(z); const vec2<double>& center = points.center; std::forward_list<Tile::ID> covering_tiles = Tile::cover(z, points); covering_tiles.sort([¢er](const Tile::ID& a, const Tile::ID& b) { // Sorts by distance from the box center return std::fabs(a.x - center.x) + std::fabs(a.y - center.y) < std::fabs(b.x - center.x) + std::fabs(b.y - center.y); }); return covering_tiles; }