Beispiel #1
0
std::vector<TileID> OfflineTilePyramidRegionDefinition::tileCover(SourceType type, uint16_t tileSize, const SourceInfo& info) const {
    double minZ = std::max<double>(coveringZoomLevel(minZoom, type, tileSize), info.minZoom);
    double maxZ = std::min<double>(coveringZoomLevel(maxZoom, type, tileSize), info.maxZoom);

    assert(minZ >= 0);
    assert(maxZ >= 0);
    assert(minZ < std::numeric_limits<uint8_t>::max());
    assert(maxZ < std::numeric_limits<uint8_t>::max());

    std::vector<TileID> result;

    for (uint8_t z = minZ; z <= maxZ; z++) {
        for (const auto& tile : mbgl::tileCover(bounds, z, z)) {
            result.push_back(tile.normalized());
        }
    }

    return result;
}
Beispiel #2
0
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([&center](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;
}