diff options
Diffstat (limited to 'include/mbgl/tile/tile_id.hpp')
-rw-r--r-- | include/mbgl/tile/tile_id.hpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/include/mbgl/tile/tile_id.hpp b/include/mbgl/tile/tile_id.hpp index 0457dd3a07..e5f46584ef 100644 --- a/include/mbgl/tile/tile_id.hpp +++ b/include/mbgl/tile/tile_id.hpp @@ -1,6 +1,7 @@ #pragma once #include <mbgl/util/constants.hpp> +#include <mbgl/util/optional.hpp> #include <cstdint> #include <array> @@ -58,6 +59,7 @@ public: uint32_t overscaleFactor() const; OverscaledTileID scaledTo(uint8_t z) const; UnwrappedTileID toUnwrapped() const; + optional<OverscaledTileID> parent() const; const uint8_t overscaledZ; const int16_t wrap; @@ -191,6 +193,17 @@ inline UnwrappedTileID OverscaledTileID::toUnwrapped() const { return { wrap, canonical }; } +inline optional<OverscaledTileID> OverscaledTileID::parent() const { + if (overscaledZ == 0) { + return {}; + } else if (overscaledZ > canonical.z) { + return { OverscaledTileID{ static_cast<uint8_t>(overscaledZ - 1), wrap, canonical } }; + } else { + return { OverscaledTileID{ static_cast<uint8_t>(overscaledZ - 1), wrap, + static_cast<uint8_t>(canonical.z - 1), static_cast<uint8_t>(canonical.x / 2), static_cast<uint8_t>(canonical.y / 2) }}; + } +} + inline UnwrappedTileID::UnwrappedTileID(uint8_t z_, int64_t x_, int64_t y_) : wrap((x_ < 0 ? x_ - (1ll << z_) + 1 : x_) / (1ll << z_)), canonical( |