std::vector<UnwrappedTileID> tileCover(const TransformState& state, int32_t z) { assert(state.valid()); const double w = state.getSize().width; const double h = state.getSize().height; return tileCover( TileCoordinate::fromScreenCoordinate(state, z, { 0, 0 }).p, TileCoordinate::fromScreenCoordinate(state, z, { w, 0 }).p, TileCoordinate::fromScreenCoordinate(state, z, { w, h }).p, TileCoordinate::fromScreenCoordinate(state, z, { 0, h }).p, TileCoordinate::fromScreenCoordinate(state, z, { w/2, h/2 }).p, z); }
std::vector<UnwrappedTileID> tileCover(const LatLngBounds& bounds_, int32_t z) { if (bounds_.isEmpty() || bounds_.south() > util::LATITUDE_MAX || bounds_.north() < -util::LATITUDE_MAX) { return {}; } LatLngBounds bounds = LatLngBounds::hull( { std::max(bounds_.south(), -util::LATITUDE_MAX), bounds_.west() }, { std::min(bounds_.north(), util::LATITUDE_MAX), bounds_.east() }); return tileCover( Projection::project(bounds.northwest(), z), Projection::project(bounds.northeast(), z), Projection::project(bounds.southeast(), z), Projection::project(bounds.southwest(), z), Projection::project(bounds.center(), z), z); }
std::vector<UnwrappedTileID> tileCover(const LatLngBounds& bounds_, int32_t z) { if (bounds_.isEmpty() || bounds_.south() > util::LATITUDE_MAX || bounds_.north() < -util::LATITUDE_MAX) { return {}; } LatLngBounds bounds = LatLngBounds::hull( { std::max(bounds_.south(), -util::LATITUDE_MAX), bounds_.west() }, { std::min(bounds_.north(), util::LATITUDE_MAX), bounds_.east() }); const TransformState state; return tileCover( TileCoordinate::fromLatLng(state, z, bounds.northwest()).p, TileCoordinate::fromLatLng(state, z, bounds.northeast()).p, TileCoordinate::fromLatLng(state, z, bounds.southeast()).p, TileCoordinate::fromLatLng(state, z, bounds.southwest()).p, TileCoordinate::fromLatLng(state, z, bounds.center()).p, z); }