summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2016-05-10 11:47:54 +0200
committerKonstantin Käfer <mail@kkaefer.com>2016-05-10 14:50:56 +0200
commitec70125e41e4e9db5f1d0941c0129d80f5792896 (patch)
tree639654a3dfda72cf0c1c1a2a0a353fe0b484e45e /src
parentbdcbceff8002d6a0ec2ce6c1d2518b03c007ddf6 (diff)
downloadqtlocation-mapboxgl-ec70125e41e4e9db5f1d0941c0129d80f5792896.tar.gz
[core] move TileData and dependents to new *TileID classes
Diffstat (limited to 'src')
-rw-r--r--src/mbgl/annotation/annotation_manager.cpp6
-rw-r--r--src/mbgl/annotation/annotation_manager.hpp2
-rw-r--r--src/mbgl/annotation/annotation_tile.cpp2
-rw-r--r--src/mbgl/annotation/annotation_tile.hpp6
-rw-r--r--src/mbgl/annotation/point_annotation_impl.cpp2
-rw-r--r--src/mbgl/annotation/point_annotation_impl.hpp3
-rw-r--r--src/mbgl/annotation/shape_annotation_impl.cpp4
-rw-r--r--src/mbgl/annotation/shape_annotation_impl.hpp3
-rw-r--r--src/mbgl/layer/line_layer.cpp3
-rw-r--r--src/mbgl/layer/symbol_layer.cpp5
-rw-r--r--src/mbgl/renderer/debug_bucket.cpp5
-rw-r--r--src/mbgl/renderer/debug_bucket.hpp2
-rw-r--r--src/mbgl/renderer/painter.cpp4
-rw-r--r--src/mbgl/renderer/painter_circle.cpp2
-rw-r--r--src/mbgl/renderer/painter_fill.cpp1
-rw-r--r--src/mbgl/renderer/painter_line.cpp1
-rw-r--r--src/mbgl/renderer/painter_symbol.cpp1
-rw-r--r--src/mbgl/source/source.cpp80
-rw-r--r--src/mbgl/source/source.hpp8
-rw-r--r--src/mbgl/style/style.cpp6
-rw-r--r--src/mbgl/style/style.hpp4
-rw-r--r--src/mbgl/style/style_bucket_parameters.hpp4
-rw-r--r--src/mbgl/tile/geojson_tile.cpp6
-rw-r--r--src/mbgl/tile/geojson_tile.hpp6
-rw-r--r--src/mbgl/tile/raster_tile_data.cpp5
-rw-r--r--src/mbgl/tile/raster_tile_data.hpp2
-rw-r--r--src/mbgl/tile/tile_cache.cpp8
-rw-r--r--src/mbgl/tile/tile_cache.hpp14
-rw-r--r--src/mbgl/tile/tile_data.cpp4
-rw-r--r--src/mbgl/tile/tile_data.hpp6
-rw-r--r--src/mbgl/tile/tile_worker.cpp11
-rw-r--r--src/mbgl/tile/tile_worker.hpp4
-rw-r--r--src/mbgl/tile/vector_tile.cpp6
-rw-r--r--src/mbgl/tile/vector_tile.hpp6
-rw-r--r--src/mbgl/tile/vector_tile_data.cpp2
-rw-r--r--src/mbgl/tile/vector_tile_data.hpp2
-rw-r--r--src/mbgl/util/clip_id.hpp2
-rw-r--r--src/mbgl/util/geo.cpp31
38 files changed, 146 insertions, 123 deletions
diff --git a/src/mbgl/annotation/annotation_manager.cpp b/src/mbgl/annotation/annotation_manager.cpp
index 13675bf2ba..329f1e3c3f 100644
--- a/src/mbgl/annotation/annotation_manager.cpp
+++ b/src/mbgl/annotation/annotation_manager.cpp
@@ -81,7 +81,7 @@ AnnotationIDs AnnotationManager::getPointAnnotationsInBounds(const LatLngBounds&
return result;
}
-std::unique_ptr<AnnotationTile> AnnotationManager::getTile(const TileID& tileID) {
+std::unique_ptr<AnnotationTile> AnnotationManager::getTile(const CanonicalTileID& tileID) {
if (pointAnnotations.empty() && shapeAnnotations.empty())
return nullptr;
@@ -136,13 +136,13 @@ void AnnotationManager::updateStyle(Style& style) {
obsoleteShapeAnnotationLayers.clear();
for (auto& monitor : monitors) {
- monitor->update(getTile(monitor->tileID));
+ monitor->update(getTile(monitor->tileID.canonical));
}
}
void AnnotationManager::addTileMonitor(AnnotationTileMonitor& monitor) {
monitors.insert(&monitor);
- monitor.update(getTile(monitor.tileID));
+ monitor.update(getTile(monitor.tileID.canonical));
}
void AnnotationManager::removeTileMonitor(AnnotationTileMonitor& monitor) {
diff --git a/src/mbgl/annotation/annotation_manager.hpp b/src/mbgl/annotation/annotation_manager.hpp
index 11860047c2..4563a4a959 100644
--- a/src/mbgl/annotation/annotation_manager.hpp
+++ b/src/mbgl/annotation/annotation_manager.hpp
@@ -47,7 +47,7 @@ public:
static const std::string PointLayerID;
private:
- std::unique_ptr<AnnotationTile> getTile(const TileID&);
+ std::unique_ptr<AnnotationTile> getTile(const CanonicalTileID&);
AnnotationID nextID = 0;
PointAnnotationImpl::Tree pointTree;
diff --git a/src/mbgl/annotation/annotation_tile.cpp b/src/mbgl/annotation/annotation_tile.cpp
index 176b7c11f1..8f754ed6da 100644
--- a/src/mbgl/annotation/annotation_tile.cpp
+++ b/src/mbgl/annotation/annotation_tile.cpp
@@ -29,7 +29,7 @@ util::ptr<GeometryTileLayer> AnnotationTile::getLayer(const std::string& name) c
return nullptr;
}
-AnnotationTileMonitor::AnnotationTileMonitor(const TileID& tileID_, AnnotationManager& annotationManager_)
+AnnotationTileMonitor::AnnotationTileMonitor(const OverscaledTileID& tileID_, AnnotationManager& annotationManager_)
: tileID(tileID_),
annotationManager(annotationManager_) {
}
diff --git a/src/mbgl/annotation/annotation_tile.hpp b/src/mbgl/annotation/annotation_tile.hpp
index 14c4f63d5f..0e3b19e075 100644
--- a/src/mbgl/annotation/annotation_tile.hpp
+++ b/src/mbgl/annotation/annotation_tile.hpp
@@ -2,7 +2,7 @@
#define MBGL_ANNOTATION_TILE
#include <mbgl/tile/geometry_tile.hpp>
-#include <mbgl/map/tile_id.hpp>
+#include <mbgl/tile/tile_id.hpp>
#include <map>
#include <unordered_map>
@@ -43,13 +43,13 @@ class AnnotationManager;
class AnnotationTileMonitor : public GeometryTileMonitor {
public:
- AnnotationTileMonitor(const TileID&, AnnotationManager&);
+ AnnotationTileMonitor(const OverscaledTileID&, AnnotationManager&);
~AnnotationTileMonitor();
void update(std::unique_ptr<GeometryTile>);
std::unique_ptr<AsyncRequest> monitorTile(const GeometryTileMonitor::Callback&) override;
- TileID tileID;
+ OverscaledTileID tileID;
private:
AnnotationManager& annotationManager;
diff --git a/src/mbgl/annotation/point_annotation_impl.cpp b/src/mbgl/annotation/point_annotation_impl.cpp
index 888a806b5b..2be8a29432 100644
--- a/src/mbgl/annotation/point_annotation_impl.cpp
+++ b/src/mbgl/annotation/point_annotation_impl.cpp
@@ -9,7 +9,7 @@ PointAnnotationImpl::PointAnnotationImpl(const AnnotationID id_, const PointAnno
point(point_) {
}
-void PointAnnotationImpl::updateLayer(const TileID& tileID, AnnotationTileLayer& layer) const {
+void PointAnnotationImpl::updateLayer(const CanonicalTileID& tileID, AnnotationTileLayer& layer) const {
std::unordered_map<std::string, std::string> featureProperties;
featureProperties.emplace("sprite", point.icon.empty() ? std::string("default_marker") : point.icon);
diff --git a/src/mbgl/annotation/point_annotation_impl.hpp b/src/mbgl/annotation/point_annotation_impl.hpp
index 34e3fa21b0..cf341f1252 100644
--- a/src/mbgl/annotation/point_annotation_impl.hpp
+++ b/src/mbgl/annotation/point_annotation_impl.hpp
@@ -35,6 +35,7 @@ BOOST_GEOMETRY_REGISTER_BOX(mbgl::LatLngBounds, mbgl::LatLng, southwest(), north
namespace mbgl {
class AnnotationTileLayer;
+class CanonicalTileID;
class PointAnnotationImpl {
public:
@@ -43,7 +44,7 @@ public:
PointAnnotationImpl(const AnnotationID, const PointAnnotation&);
- void updateLayer(const TileID&, AnnotationTileLayer&) const;
+ void updateLayer(const CanonicalTileID&, AnnotationTileLayer&) const;
const AnnotationID id;
const PointAnnotation point;
diff --git a/src/mbgl/annotation/shape_annotation_impl.cpp b/src/mbgl/annotation/shape_annotation_impl.cpp
index a233e0358e..4ed06a5540 100644
--- a/src/mbgl/annotation/shape_annotation_impl.cpp
+++ b/src/mbgl/annotation/shape_annotation_impl.cpp
@@ -80,7 +80,7 @@ void ShapeAnnotationImpl::updateStyle(Style& style) {
}
}
-void ShapeAnnotationImpl::updateTile(const TileID& tileID, AnnotationTile& tile) {
+void ShapeAnnotationImpl::updateTile(const CanonicalTileID& tileID, AnnotationTile& tile) {
static const double baseTolerance = 4;
if (!shapeTiler) {
@@ -114,7 +114,7 @@ void ShapeAnnotationImpl::updateTile(const TileID& tileID, AnnotationTile& tile)
shapeTiler = std::make_unique<mapbox::geojsonvt::GeoJSONVT>(features, options);
}
- const auto& shapeTile = shapeTiler->getTile(tileID.sourceZ, tileID.x, tileID.y);
+ const auto& shapeTile = shapeTiler->getTile(tileID.z, tileID.x, tileID.y);
if (!shapeTile)
return;
diff --git a/src/mbgl/annotation/shape_annotation_impl.hpp b/src/mbgl/annotation/shape_annotation_impl.hpp
index 41069dbfd2..d745dd1299 100644
--- a/src/mbgl/annotation/shape_annotation_impl.hpp
+++ b/src/mbgl/annotation/shape_annotation_impl.hpp
@@ -15,6 +15,7 @@ namespace mbgl {
class Style;
class AnnotationTile;
+class CanonicalTileID;
class ShapeAnnotationImpl {
public:
@@ -23,7 +24,7 @@ public:
ShapeAnnotationImpl(const AnnotationID, const ShapeAnnotation&, const uint8_t maxZoom);
void updateStyle(Style&);
- void updateTile(const TileID&, AnnotationTile&);
+ void updateTile(const CanonicalTileID&, AnnotationTile&);
const AnnotationID id;
const std::string layerID;
diff --git a/src/mbgl/layer/line_layer.cpp b/src/mbgl/layer/line_layer.cpp
index 3671b207a0..d26638b0c4 100644
--- a/src/mbgl/layer/line_layer.cpp
+++ b/src/mbgl/layer/line_layer.cpp
@@ -1,7 +1,6 @@
#include <mbgl/layer/line_layer.hpp>
#include <mbgl/style/style_bucket_parameters.hpp>
#include <mbgl/renderer/line_bucket.hpp>
-#include <mbgl/map/tile_id.hpp>
#include <mbgl/util/get_geometries.hpp>
#include <mbgl/geometry/feature_index.hpp>
#include <mbgl/util/math.hpp>
@@ -77,7 +76,7 @@ std::unique_ptr<Bucket> LineLayer::createBucket(StyleBucketParameters& parameter
bucket->layout = layout;
- StyleCalculationParameters p(parameters.tileID.z);
+ StyleCalculationParameters p(parameters.tileID.overscaledZ);
bucket->layout.lineCap.calculate(p);
bucket->layout.lineJoin.calculate(p);
bucket->layout.lineMiterLimit.calculate(p);
diff --git a/src/mbgl/layer/symbol_layer.cpp b/src/mbgl/layer/symbol_layer.cpp
index 0a4d585d7a..b3222f9368 100644
--- a/src/mbgl/layer/symbol_layer.cpp
+++ b/src/mbgl/layer/symbol_layer.cpp
@@ -1,6 +1,5 @@
#include <mbgl/layer/symbol_layer.hpp>
#include <mbgl/renderer/symbol_bucket.hpp>
-#include <mbgl/map/tile_id.hpp>
#include <mbgl/style/style_bucket_parameters.hpp>
namespace mbgl {
@@ -115,14 +114,14 @@ bool SymbolLayer::recalculate(const StyleCalculationParameters& parameters) {
std::unique_ptr<Bucket> SymbolLayer::createBucket(StyleBucketParameters& parameters) const {
auto bucket = std::make_unique<SymbolBucket>(parameters.tileID.overscaleFactor(),
- parameters.tileID.z,
+ parameters.tileID.overscaledZ,
parameters.mode,
id,
parameters.layer.getName());
bucket->layout = layout;
- StyleCalculationParameters p(parameters.tileID.z);
+ StyleCalculationParameters p(parameters.tileID.overscaledZ);
bucket->layout.symbolPlacement.calculate(p);
if (bucket->layout.symbolPlacement.value == SymbolPlacementType::Line) {
bucket->layout.iconRotationAlignment.value = RotationAlignmentType::Map;
diff --git a/src/mbgl/renderer/debug_bucket.cpp b/src/mbgl/renderer/debug_bucket.cpp
index ba4ab8c928..dc6cd69607 100644
--- a/src/mbgl/renderer/debug_bucket.cpp
+++ b/src/mbgl/renderer/debug_bucket.cpp
@@ -1,6 +1,7 @@
#include <mbgl/renderer/debug_bucket.hpp>
#include <mbgl/renderer/painter.hpp>
#include <mbgl/shader/plain_shader.hpp>
+#include <mbgl/util/string.hpp>
#include <mbgl/gl/gl.hpp>
@@ -9,14 +10,14 @@
using namespace mbgl;
-DebugBucket::DebugBucket(const TileID id, const TileData::State state_, optional<SystemTimePoint> modified_, optional<SystemTimePoint> expires_, MapDebugOptions debugMode_)
+DebugBucket::DebugBucket(const OverscaledTileID& id, const TileData::State state_, optional<SystemTimePoint> modified_, optional<SystemTimePoint> expires_, MapDebugOptions debugMode_)
: state(state_),
modified(std::move(modified_)),
expires(std::move(expires_)),
debugMode(debugMode_) {
double baseline = 200;
if (debugMode & MapDebugOptions::ParseStatus) {
- const std::string text = std::string(id) + " - " + TileData::StateToString(state);
+ const std::string text = util::toString(id) + " - " + TileData::StateToString(state);
fontBuffer.addText(text.c_str(), 50, baseline, 5);
baseline += 200;
}
diff --git a/src/mbgl/renderer/debug_bucket.hpp b/src/mbgl/renderer/debug_bucket.hpp
index 2ec7318f9a..e824701fa6 100644
--- a/src/mbgl/renderer/debug_bucket.hpp
+++ b/src/mbgl/renderer/debug_bucket.hpp
@@ -17,7 +17,7 @@ class GLObjectStore;
class DebugBucket : private util::noncopyable {
public:
- DebugBucket(TileID id, TileData::State,
+ DebugBucket(const OverscaledTileID& id, TileData::State,
optional<SystemTimePoint> modified,
optional<SystemTimePoint> expires,
MapDebugOptions);
diff --git a/src/mbgl/renderer/painter.cpp b/src/mbgl/renderer/painter.cpp
index 42b17b5b65..6e2da79db8 100644
--- a/src/mbgl/renderer/painter.cpp
+++ b/src/mbgl/renderer/painter.cpp
@@ -35,6 +35,8 @@
#include <mbgl/algorithm/generate_clip_ids_impl.hpp>
#include <mbgl/util/constants.hpp>
+#include <mbgl/util/mat3.hpp>
+#include <mbgl/util/string.hpp>
#if defined(DEBUG)
#include <mbgl/util/stopwatch.hpp>
@@ -252,7 +254,7 @@ void Painter::renderPass(RenderPass pass_,
config.setDirty();
} else {
assert(item.tile->data);
- MBGL_DEBUG_GROUP(layer.id + " - " + std::string(item.tile->data->id));
+ MBGL_DEBUG_GROUP(layer.id + " - " + util::toString(item.tile->id));
if (item.bucket->needsClipping()) {
setClipping(item.tile->clip);
}
diff --git a/src/mbgl/renderer/painter_circle.cpp b/src/mbgl/renderer/painter_circle.cpp
index 8711e2c48b..9e15c6a756 100644
--- a/src/mbgl/renderer/painter_circle.cpp
+++ b/src/mbgl/renderer/painter_circle.cpp
@@ -3,8 +3,6 @@
#include <mbgl/layer/circle_layer.hpp>
-#include <mbgl/map/tile_id.hpp>
-
#include <mbgl/shader/circle_shader.hpp>
using namespace mbgl;
diff --git a/src/mbgl/renderer/painter_fill.cpp b/src/mbgl/renderer/painter_fill.cpp
index 83a15d111c..2e103462e6 100644
--- a/src/mbgl/renderer/painter_fill.cpp
+++ b/src/mbgl/renderer/painter_fill.cpp
@@ -1,7 +1,6 @@
#include <mbgl/renderer/painter.hpp>
#include <mbgl/renderer/fill_bucket.hpp>
#include <mbgl/layer/fill_layer.hpp>
-#include <mbgl/map/tile_id.hpp>
#include <mbgl/sprite/sprite_atlas.hpp>
#include <mbgl/shader/outline_shader.hpp>
#include <mbgl/shader/outlinepattern_shader.hpp>
diff --git a/src/mbgl/renderer/painter_line.cpp b/src/mbgl/renderer/painter_line.cpp
index bc6c51c226..6adf471cef 100644
--- a/src/mbgl/renderer/painter_line.cpp
+++ b/src/mbgl/renderer/painter_line.cpp
@@ -1,7 +1,6 @@
#include <mbgl/renderer/painter.hpp>
#include <mbgl/renderer/line_bucket.hpp>
#include <mbgl/layer/line_layer.hpp>
-#include <mbgl/map/tile_id.hpp>
#include <mbgl/shader/line_shader.hpp>
#include <mbgl/shader/linesdf_shader.hpp>
#include <mbgl/shader/linepattern_shader.hpp>
diff --git a/src/mbgl/renderer/painter_symbol.cpp b/src/mbgl/renderer/painter_symbol.cpp
index 6321d03a9a..a48c70866c 100644
--- a/src/mbgl/renderer/painter_symbol.cpp
+++ b/src/mbgl/renderer/painter_symbol.cpp
@@ -6,7 +6,6 @@
#include <mbgl/shader/sdf_shader.hpp>
#include <mbgl/shader/icon_shader.hpp>
#include <mbgl/shader/box_shader.hpp>
-#include <mbgl/map/tile_id.hpp>
#include <mbgl/util/math.hpp>
#include <cmath>
diff --git a/src/mbgl/source/source.cpp b/src/mbgl/source/source.cpp
index ae7999f3a7..d00cbdb034 100644
--- a/src/mbgl/source/source.cpp
+++ b/src/mbgl/source/source.cpp
@@ -203,7 +203,11 @@ TileData::State Source::hasTile(const TileID& tileID) {
}
bool Source::handlePartialTile(const TileID& tileID) {
- auto it = tileDataMap.find(tileID.normalized());
+ const OverscaledTileID overscaledTileID{
+ tileID.z, UnwrappedTileID{ tileID.sourceZ, tileID.x, tileID.y }.canonical
+ };
+
+ auto it = tileDataMap.find(overscaledTileID);
if (it == tileDataMap.end()) {
return true;
}
@@ -213,7 +217,7 @@ bool Source::handlePartialTile(const TileID& tileID) {
return true;
}
- auto callback = std::bind(&Source::tileLoadingCallback, this, tileID,
+ auto callback = std::bind(&Source::tileLoadingCallback, this, overscaledTileID,
std::placeholders::_1, false);
return tileData->parsePending(callback);
@@ -230,9 +234,9 @@ TileData::State Source::addTile(const TileID& tileID, const StyleUpdateParameter
// We couldn't find the tile in the list. Create a new one.
// Try to find the associated TileData object.
- const TileID normalizedID = tileID.normalized();
+ const OverscaledTileID overscaledTileID{ tileID.z, newTile->id.canonical };
- auto it = tileDataMap.find(normalizedID);
+ auto it = tileDataMap.find(overscaledTileID);
if (it != tileDataMap.end()) {
// Create a shared_ptr handle. Note that this might be empty!
newTile->data = it->second.lock();
@@ -244,16 +248,16 @@ TileData::State Source::addTile(const TileID& tileID, const StyleUpdateParameter
}
if (!newTile->data) {
- newTile->data = cache.get(normalizedID.to_uint64());
+ newTile->data = cache.get(overscaledTileID);
}
if (!newTile->data) {
- auto callback = std::bind(&Source::tileLoadingCallback, this, normalizedID,
+ auto callback = std::bind(&Source::tileLoadingCallback, this, overscaledTileID,
std::placeholders::_1, true);
// If we don't find working tile data, we're just going to load it.
if (type == SourceType::Raster) {
- newTile->data = std::make_shared<RasterTileData>(normalizedID,
+ newTile->data = std::make_shared<RasterTileData>(overscaledTileID,
parameters.pixelRatio,
info->tiles.at(0),
parameters.texturePool,
@@ -264,17 +268,17 @@ TileData::State Source::addTile(const TileID& tileID, const StyleUpdateParameter
std::unique_ptr<GeometryTileMonitor> monitor;
if (type == SourceType::Vector) {
- monitor = std::make_unique<VectorTileMonitor>(normalizedID, parameters.pixelRatio, info->tiles.at(0), parameters.fileSource);
+ monitor = std::make_unique<VectorTileMonitor>(overscaledTileID, parameters.pixelRatio, info->tiles.at(0), parameters.fileSource);
} else if (type == SourceType::Annotations) {
- monitor = std::make_unique<AnnotationTileMonitor>(normalizedID, parameters.annotationManager);
+ monitor = std::make_unique<AnnotationTileMonitor>(overscaledTileID, parameters.annotationManager);
} else if (type == SourceType::GeoJSON) {
- monitor = std::make_unique<GeoJSONTileMonitor>(geojsonvt.get(), normalizedID);
+ monitor = std::make_unique<GeoJSONTileMonitor>(geojsonvt.get(), overscaledTileID);
} else {
Log::Warning(Event::Style, "Source type '%s' is not implemented", SourceTypeClass(type).c_str());
return TileData::State::invalid;
}
- newTile->data = std::make_shared<VectorTileData>(normalizedID,
+ newTile->data = std::make_shared<VectorTileData>(overscaledTileID,
std::move(monitor),
id,
parameters.style,
@@ -339,7 +343,10 @@ void Source::findLoadedParent(const TileID& tileID, int32_t minCoveringZoom, std
}
}
- if (cache.has(parent_id.normalized().to_uint64())) {
+ const UnwrappedTileID unwrappedTileID(tileID.sourceZ, static_cast<uint32_t>(tileID.x),
+ static_cast<uint32_t>(tileID.y));
+
+ if (cache.has(OverscaledTileID{ tileID.z, unwrappedTileID.canonical })) {
addTile(parent_id, parameters);
retain.emplace_back(parent_id);
return;
@@ -423,8 +430,8 @@ bool Source::update(const StyleUpdateParameters& parameters) {
// Remove tiles that we definitely don't need, i.e. tiles that are not on
// the required list.
- std::set<TileID> retain_data;
- util::erase_if(tiles, [this, &retain, &retain_data, &tileCache](std::pair<const TileID, std::unique_ptr<Tile>> &pair) {
+ std::set<OverscaledTileID> retain_data;
+ util::erase_if(tiles, [this, &retain, &retain_data, &tileCache](auto &pair) {
const auto& tileID = pair.first;
Tile &tile = *pair.second;
bool obsolete = std::find(retain.begin(), retain.end(), tileID) == retain.end();
@@ -434,22 +441,22 @@ bool Source::update(const StyleUpdateParameters& parameters) {
// Partially parsed tiles are never added to the cache because otherwise
// they never get updated if the go out from the viewport and the pending
// resources arrive.
- tileCache.add(tileID.normalized().to_uint64(), tile.data);
+ tileCache.add(tile.data->id, tile.data);
}
return obsolete;
});
// Remove all the expired pointers from the set.
- util::erase_if(tileDataMap, [&retain_data, &tileCache](std::pair<const TileID, std::weak_ptr<TileData>> &pair) {
- const util::ptr<TileData> tile = pair.second.lock();
- if (!tile) {
+ util::erase_if(tileDataMap, [&retain_data, &tileCache](auto &pair) {
+ const auto tileData = pair.second.lock();
+ if (!tileData) {
return true;
}
- bool obsolete = retain_data.find(tile->id) == retain_data.end();
+ bool obsolete = retain_data.find(tileData->id) == retain_data.end();
if (obsolete) {
- if (!tileCache.has(tile->id.normalized().to_uint64())) {
- tile->cancel();
+ if (!tileCache.has(tileData->id)) {
+ tileData->cancel();
}
return true;
} else {
@@ -479,10 +486,10 @@ void Source::updateTilePtrs() {
}
}
-static Point<int16_t> coordinateToTilePoint(const TileID& tileID, const TileCoordinate& coord) {
- auto zoomedCoord = coord.zoomTo(tileID.sourceZ);
+static Point<int16_t> coordinateToTilePoint(const CanonicalTileID& tileID, const TileCoordinate& coord) {
+ auto zoomedCoord = coord.zoomTo(tileID.z);
return {
- int16_t(util::clamp<int64_t>((zoomedCoord.x - (tileID.x + tileID.w * std::pow(2, tileID.sourceZ))) * util::EXTENT,
+ int16_t(util::clamp<int64_t>((zoomedCoord.x - tileID.x) * util::EXTENT,
std::numeric_limits<int16_t>::min(),
std::numeric_limits<int16_t>::max())),
int16_t(util::clamp<int64_t>((zoomedCoord.y - tileID.y) * util::EXTENT,
@@ -519,15 +526,13 @@ std::unordered_map<std::string, std::vector<Feature>> Source::queryRenderedFeatu
maxY = util::max(maxY, c.y);
}
- std::unordered_map<uint64_t, TileQuery> tileQueries;
+ std::map<CanonicalTileID, TileQuery> tileQueries;
for (auto& tilePtr : tilePtrs) {
auto& tile = *tilePtr;
- const TileID& tileID = tile.data->id;
- const auto integerID = tileID.to_uint64();
- auto tileSpaceBoundsMin = coordinateToTilePoint(tileID, { minX, minY, z });
- auto tileSpaceBoundsMax = coordinateToTilePoint(tileID, { maxX, maxY, z });
+ auto tileSpaceBoundsMin = coordinateToTilePoint(tile.id.canonical, { minX, minY, z });
+ auto tileSpaceBoundsMax = coordinateToTilePoint(tile.id.canonical, { maxX, maxY, z });
if (tileSpaceBoundsMin.x >= util::EXTENT || tileSpaceBoundsMin.y >= util::EXTENT ||
tileSpaceBoundsMax.x < 0 || tileSpaceBoundsMax.y < 0) continue;
@@ -535,18 +540,19 @@ std::unordered_map<std::string, std::vector<Feature>> Source::queryRenderedFeatu
GeometryCoordinates tileSpaceQueryGeometry;
for (auto& c : queryGeometry) {
- tileSpaceQueryGeometry.push_back(coordinateToTilePoint(tileID, c));
+ tileSpaceQueryGeometry.push_back(coordinateToTilePoint(tile.id.canonical, c));
}
- auto it = tileQueries.find(integerID);
+ auto it = tileQueries.find(tile.id.canonical);
if (it != tileQueries.end()) {
it->second.queryGeometry.push_back(std::move(tileSpaceQueryGeometry));
} else {
- tileQueries.emplace(integerID, TileQuery{
+ (void)zoom;
+ tileQueries.emplace(tile.id.canonical, TileQuery{
tilePtr,
{ tileSpaceQueryGeometry },
- util::tileSize * std::pow(2, tileID.z - tileID.sourceZ),
- std::pow(2, zoom - tileID.z)
+ util::tileSize * tile.data->id.overscaleFactor(),
+ std::pow(2, zoom - tile.data->id.overscaledZ)
});
}
}
@@ -572,9 +578,9 @@ void Source::setObserver(Observer* observer_) {
observer = observer_;
}
-void Source::tileLoadingCallback(const TileID& tileID,
- std::exception_ptr error,
- bool isNewTile) {
+void Source::tileLoadingCallback(const OverscaledTileID& tileID,
+ std::exception_ptr error,
+ bool isNewTile) {
auto it = tileDataMap.find(tileID);
if (it == tileDataMap.end()) {
return;
diff --git a/src/mbgl/source/source.hpp b/src/mbgl/source/source.hpp
index 5084f77edf..4cd29eef0a 100644
--- a/src/mbgl/source/source.hpp
+++ b/src/mbgl/source/source.hpp
@@ -43,8 +43,8 @@ public:
virtual void onSourceLoaded(Source&) {};
virtual void onSourceError(Source&, std::exception_ptr) {};
- virtual void onTileLoaded(Source&, const TileID&, bool /* isNewTile */) {};
- virtual void onTileError(Source&, const TileID&, std::exception_ptr) {};
+ virtual void onTileLoaded(Source&, const OverscaledTileID&, bool /* isNewTile */) {};
+ virtual void onTileError(Source&, const OverscaledTileID&, std::exception_ptr) {};
virtual void onPlacementRedone() {};
};
@@ -94,7 +94,7 @@ public:
bool enabled = false;
private:
- void tileLoadingCallback(const TileID&,
+ void tileLoadingCallback(const OverscaledTileID&,
std::exception_ptr,
bool isNewTile);
bool handlePartialTile(const TileID&);
@@ -115,7 +115,7 @@ private:
std::map<TileID, std::unique_ptr<Tile>> tiles;
std::vector<Tile*> tilePtrs;
- std::map<TileID, std::weak_ptr<TileData>> tileDataMap;
+ std::map<OverscaledTileID, std::weak_ptr<TileData>> tileDataMap;
TileCache cache;
std::unique_ptr<AsyncRequest> req;
diff --git a/src/mbgl/style/style.cpp b/src/mbgl/style/style.cpp
index 01c566308e..5c3f15d292 100644
--- a/src/mbgl/style/style.cpp
+++ b/src/mbgl/style/style.cpp
@@ -395,7 +395,7 @@ void Style::onSourceError(Source& source, std::exception_ptr error) {
observer->onResourceError(error);
}
-void Style::onTileLoaded(Source& source, const TileID& tileID, bool isNewTile) {
+void Style::onTileLoaded(Source& source, const OverscaledTileID& tileID, bool isNewTile) {
if (isNewTile) {
shouldReparsePartialTiles = true;
}
@@ -404,10 +404,10 @@ void Style::onTileLoaded(Source& source, const TileID& tileID, bool isNewTile) {
observer->onResourceLoaded();
}
-void Style::onTileError(Source& source, const TileID& tileID, std::exception_ptr error) {
+void Style::onTileError(Source& source, const OverscaledTileID& tileID, std::exception_ptr error) {
lastError = error;
Log::Error(Event::Style, "Failed to load tile %s for source %s: %s",
- std::string(tileID).c_str(), source.id.c_str(), util::toString(error).c_str());
+ util::toString(tileID).c_str(), source.id.c_str(), util::toString(error).c_str());
observer->onTileError(source, tileID, error);
observer->onResourceError(error);
}
diff --git a/src/mbgl/style/style.hpp b/src/mbgl/style/style.hpp
index bfeebc28d5..76da484cab 100644
--- a/src/mbgl/style/style.hpp
+++ b/src/mbgl/style/style.hpp
@@ -148,8 +148,8 @@ private:
// Source::Observer implementation.
void onSourceLoaded(Source&) override;
void onSourceError(Source&, std::exception_ptr) override;
- void onTileLoaded(Source&, const TileID&, bool isNewTile) override;
- void onTileError(Source&, const TileID&, std::exception_ptr) override;
+ void onTileLoaded(Source&, const OverscaledTileID&, bool isNewTile) override;
+ void onTileError(Source&, const OverscaledTileID&, std::exception_ptr) override;
void onPlacementRedone() override;
Observer nullObserver;
diff --git a/src/mbgl/style/style_bucket_parameters.hpp b/src/mbgl/style/style_bucket_parameters.hpp
index 402e5810d3..ce3fc6ac7e 100644
--- a/src/mbgl/style/style_bucket_parameters.hpp
+++ b/src/mbgl/style/style_bucket_parameters.hpp
@@ -20,7 +20,7 @@ class FeatureIndex;
class StyleBucketParameters {
public:
- StyleBucketParameters(const TileID& tileID_,
+ StyleBucketParameters(const OverscaledTileID& tileID_,
const GeometryTileLayer& layer_,
const std::atomic<TileData::State>& state_,
uintptr_t tileUID_,
@@ -47,7 +47,7 @@ public:
void eachFilteredFeature(const Filter&, std::function<void (const GeometryTileFeature&, std::size_t index, const std::string& layerName)>);
- const TileID& tileID;
+ const OverscaledTileID& tileID;
const GeometryTileLayer& layer;
const std::atomic<TileData::State>& state;
uintptr_t tileUID;
diff --git a/src/mbgl/tile/geojson_tile.cpp b/src/mbgl/tile/geojson_tile.cpp
index 39cca01728..9162cedf14 100644
--- a/src/mbgl/tile/geojson_tile.cpp
+++ b/src/mbgl/tile/geojson_tile.cpp
@@ -101,7 +101,8 @@ std::unique_ptr<GeoJSONTile> convertTile(const mapbox::geojsonvt::Tile& tile) {
return std::make_unique<GeoJSONTile>(layer);
}
-GeoJSONTileMonitor::GeoJSONTileMonitor(mapbox::geojsonvt::GeoJSONVT* geojsonvt_, const TileID& id)
+GeoJSONTileMonitor::GeoJSONTileMonitor(mapbox::geojsonvt::GeoJSONVT* geojsonvt_,
+ const OverscaledTileID& id)
: tileID(id), geojsonvt(geojsonvt_) {
}
@@ -119,7 +120,8 @@ void GeoJSONTileMonitor::setGeoJSONVT(mapbox::geojsonvt::GeoJSONVT* vt) {
void GeoJSONTileMonitor::update() {
if (geojsonvt) {
- auto tile = convertTile(geojsonvt->getTile(tileID.sourceZ, tileID.x, tileID.y));
+ auto tile = convertTile(
+ geojsonvt->getTile(tileID.canonical.z, tileID.canonical.x, tileID.canonical.y));
callback(nullptr, std::move(tile), {}, {});
}
}
diff --git a/src/mbgl/tile/geojson_tile.hpp b/src/mbgl/tile/geojson_tile.hpp
index f6d9d9cce7..768f005482 100644
--- a/src/mbgl/tile/geojson_tile.hpp
+++ b/src/mbgl/tile/geojson_tile.hpp
@@ -2,7 +2,7 @@
#define MBGL_ANNOTATION_GEOJSON_VT_TILE
#include <mbgl/tile/geometry_tile.hpp>
-#include <mbgl/map/tile_id.hpp>
+#include <mbgl/tile/tile_id.hpp>
#include <unordered_map>
@@ -56,7 +56,7 @@ private:
class GeoJSONTileMonitor : public GeometryTileMonitor {
public:
- GeoJSONTileMonitor(mapbox::geojsonvt::GeoJSONVT*, const TileID&);
+ GeoJSONTileMonitor(mapbox::geojsonvt::GeoJSONVT*, const OverscaledTileID&);
virtual ~GeoJSONTileMonitor();
std::unique_ptr<AsyncRequest> monitorTile(const GeometryTileMonitor::Callback&) override;
@@ -67,7 +67,7 @@ private:
void update();
public:
- const TileID tileID;
+ const OverscaledTileID tileID;
private:
mapbox::geojsonvt::GeoJSONVT* geojsonvt = nullptr;
diff --git a/src/mbgl/tile/raster_tile_data.cpp b/src/mbgl/tile/raster_tile_data.cpp
index abf46b22f0..10445cdcdd 100644
--- a/src/mbgl/tile/raster_tile_data.cpp
+++ b/src/mbgl/tile/raster_tile_data.cpp
@@ -8,7 +8,7 @@
using namespace mbgl;
-RasterTileData::RasterTileData(const TileID& id_,
+RasterTileData::RasterTileData(const OverscaledTileID& id_,
float pixelRatio,
const std::string& urlTemplate,
gl::TexturePool &texturePool_,
@@ -20,7 +20,8 @@ RasterTileData::RasterTileData(const TileID& id_,
worker(worker_) {
state = State::loading;
- const Resource resource = Resource::tile(urlTemplate, pixelRatio, id.x, id.y, id.sourceZ);
+ const Resource resource =
+ Resource::tile(urlTemplate, pixelRatio, id.canonical.x, id.canonical.y, id.canonical.z);
req = fileSource.request(resource, [callback, this](Response res) {
if (res.error) {
callback(std::make_exception_ptr(std::runtime_error(res.error->message)));
diff --git a/src/mbgl/tile/raster_tile_data.hpp b/src/mbgl/tile/raster_tile_data.hpp
index dfc8b85731..af15bba948 100644
--- a/src/mbgl/tile/raster_tile_data.hpp
+++ b/src/mbgl/tile/raster_tile_data.hpp
@@ -13,7 +13,7 @@ namespace gl { class TexturePool; }
class RasterTileData : public TileData {
public:
- RasterTileData(const TileID&,
+ RasterTileData(const OverscaledTileID&,
float pixelRatio,
const std::string& urlTemplate,
gl::TexturePool&,
diff --git a/src/mbgl/tile/tile_cache.cpp b/src/mbgl/tile/tile_cache.cpp
index 423b355827..0f0a231d54 100644
--- a/src/mbgl/tile/tile_cache.cpp
+++ b/src/mbgl/tile/tile_cache.cpp
@@ -15,11 +15,9 @@ void TileCache::setSize(size_t size_) {
}
assert(orderedKeys.size() <= size);
-
- tiles.reserve(size);
}
-void TileCache::add(uint64_t key, std::shared_ptr<TileData> data) {
+void TileCache::add(const OverscaledTileID& key, std::shared_ptr<TileData> data) {
// insert new or query existing data
if (tiles.emplace(key, data).second) {
@@ -38,7 +36,7 @@ void TileCache::add(uint64_t key, std::shared_ptr<TileData> data) {
assert(orderedKeys.size() <= size);
};
-std::shared_ptr<TileData> TileCache::get(uint64_t key) {
+std::shared_ptr<TileData> TileCache::get(const OverscaledTileID& key) {
std::shared_ptr<TileData> data;
@@ -53,7 +51,7 @@ std::shared_ptr<TileData> TileCache::get(uint64_t key) {
return data;
};
-bool TileCache::has(uint64_t key) {
+bool TileCache::has(const OverscaledTileID& key) {
return tiles.find(key) != tiles.end();
}
diff --git a/src/mbgl/tile/tile_cache.hpp b/src/mbgl/tile/tile_cache.hpp
index 4d0b42242a..8bf747035e 100644
--- a/src/mbgl/tile/tile_cache.hpp
+++ b/src/mbgl/tile/tile_cache.hpp
@@ -1,9 +1,11 @@
#ifndef MBGL_MAP_TILE_CACHE
#define MBGL_MAP_TILE_CACHE
+#include <mbgl/tile/tile_id.hpp>
+
#include <list>
#include <memory>
-#include <unordered_map>
+#include <map>
namespace mbgl {
@@ -15,14 +17,14 @@ public:
void setSize(size_t);
size_t getSize() const { return size; };
- void add(uint64_t key, std::shared_ptr<TileData> data);
- std::shared_ptr<TileData> get(uint64_t key);
- bool has(uint64_t key);
+ void add(const OverscaledTileID& key, std::shared_ptr<TileData> data);
+ std::shared_ptr<TileData> get(const OverscaledTileID& key);
+ bool has(const OverscaledTileID& key);
void clear();
private:
- std::unordered_map<uint64_t, std::shared_ptr<TileData>> tiles;
- std::list<uint64_t> orderedKeys;
+ std::map<OverscaledTileID, std::shared_ptr<TileData>> tiles;
+ std::list<OverscaledTileID> orderedKeys;
size_t size;
};
diff --git a/src/mbgl/tile/tile_data.cpp b/src/mbgl/tile/tile_data.cpp
index 49a426b466..d5179c5b0b 100644
--- a/src/mbgl/tile/tile_data.cpp
+++ b/src/mbgl/tile/tile_data.cpp
@@ -4,7 +4,7 @@
namespace mbgl {
-TileData::TileData(const TileID& id_)
+TileData::TileData(const OverscaledTileID& id_)
: id(id_),
state(State::initial) {
}
@@ -25,7 +25,7 @@ const char* TileData::StateToString(const State state) {
}
void TileData::dumpDebugLogs() const {
- Log::Info(Event::General, "TileData::id: %s", std::string(id).c_str());
+ Log::Info(Event::General, "TileData::id: %s", util::toString(id).c_str());
Log::Info(Event::General, "TileData::state: %s", TileData::StateToString(state));
}
diff --git a/src/mbgl/tile/tile_data.hpp b/src/mbgl/tile/tile_data.hpp
index 338f246da0..b608c026ad 100644
--- a/src/mbgl/tile/tile_data.hpp
+++ b/src/mbgl/tile/tile_data.hpp
@@ -5,7 +5,7 @@
#include <mbgl/util/chrono.hpp>
#include <mbgl/util/optional.hpp>
#include <mbgl/util/feature.hpp>
-#include <mbgl/map/tile_id.hpp>
+#include <mbgl/tile/tile_id.hpp>
#include <mbgl/renderer/bucket.hpp>
#include <mbgl/text/placement_config.hpp>
#include <mbgl/tile/geometry_tile.hpp>
@@ -73,7 +73,7 @@ public:
return state == State::partial || state == State::parsed;
}
- TileData(const TileID&);
+ TileData(const OverscaledTileID&);
virtual ~TileData();
// Mark this tile as no longer needed and cancel any pending work.
@@ -106,7 +106,7 @@ public:
void dumpDebugLogs() const;
- const TileID id;
+ const OverscaledTileID id;
optional<SystemTimePoint> modified;
optional<SystemTimePoint> expires;
diff --git a/src/mbgl/tile/tile_worker.cpp b/src/mbgl/tile/tile_worker.cpp
index bc1fdb4195..0a9ab35779 100644
--- a/src/mbgl/tile/tile_worker.cpp
+++ b/src/mbgl/tile/tile_worker.cpp
@@ -11,12 +11,13 @@
#include <mbgl/renderer/symbol_bucket.hpp>
#include <mbgl/platform/log.hpp>
#include <mbgl/util/constants.hpp>
+#include <mbgl/util/string.hpp>
#include <mbgl/util/exception.hpp>
#include <utility>
using namespace mbgl;
-TileWorker::TileWorker(TileID id_,
+TileWorker::TileWorker(const OverscaledTileID& id_,
std::string sourceID_,
SpriteStore& spriteStore_,
GlyphAtlas& glyphAtlas_,
@@ -139,8 +140,8 @@ void TileWorker::parseLayer(const StyleLayer* layer) {
// Skip this bucket if we are to not render this
if ((layer->source != sourceID) ||
- (id.z < std::floor(layer->minZoom)) ||
- (id.z >= std::ceil(layer->maxZoom)) ||
+ (id.overscaledZ < std::floor(layer->minZoom)) ||
+ (id.overscaledZ >= std::ceil(layer->maxZoom)) ||
(layer->visibility == VisibilityType::None)) {
return;
}
@@ -149,8 +150,8 @@ void TileWorker::parseLayer(const StyleLayer* layer) {
if (!geometryLayer) {
// The layer specified in the bucket does not exist. Do nothing.
if (debug::tileParseWarnings) {
- Log::Warning(Event::ParseTile, "layer '%s' does not exist in tile %d/%d/%d",
- layer->sourceLayer.c_str(), id.z, id.x, id.y);
+ Log::Warning(Event::ParseTile, "layer '%s' does not exist in tile %s",
+ layer->sourceLayer.c_str(), util::toString(id).c_str());
}
return;
}
diff --git a/src/mbgl/tile/tile_worker.hpp b/src/mbgl/tile/tile_worker.hpp
index 7c4b147d08..7cb2536c90 100644
--- a/src/mbgl/tile/tile_worker.hpp
+++ b/src/mbgl/tile/tile_worker.hpp
@@ -42,7 +42,7 @@ using TileParseResult = variant<
class TileWorker : public util::noncopyable {
public:
- TileWorker(TileID,
+ TileWorker(const OverscaledTileID&,
std::string sourceID,
SpriteStore&,
GlyphAtlas&,
@@ -66,7 +66,7 @@ private:
void insertBucket(const std::string& name, std::unique_ptr<Bucket>);
std::unique_ptr<CollisionTile> placeLayers(PlacementConfig);
- const TileID id;
+ const OverscaledTileID id;
const std::string sourceID;
SpriteStore& spriteStore;
diff --git a/src/mbgl/tile/vector_tile.cpp b/src/mbgl/tile/vector_tile.cpp
index 25314c114c..27edd85324 100644
--- a/src/mbgl/tile/vector_tile.cpp
+++ b/src/mbgl/tile/vector_tile.cpp
@@ -217,7 +217,8 @@ std::string VectorTileLayer::getName() const {
return name;
}
-VectorTileMonitor::VectorTileMonitor(const TileID& tileID_, float pixelRatio_, const std::string& urlTemplate_, FileSource& fileSource_)
+VectorTileMonitor::VectorTileMonitor(const OverscaledTileID& tileID_, float pixelRatio_,
+ const std::string& urlTemplate_, FileSource& fileSource_)
: tileID(tileID_),
pixelRatio(pixelRatio_),
urlTemplate(urlTemplate_),
@@ -225,7 +226,8 @@ VectorTileMonitor::VectorTileMonitor(const TileID& tileID_, float pixelRatio_, c
}
std::unique_ptr<AsyncRequest> VectorTileMonitor::monitorTile(const GeometryTileMonitor::Callback& callback) {
- const Resource resource = Resource::tile(urlTemplate, pixelRatio, tileID.x, tileID.y, tileID.sourceZ);
+ const Resource resource = Resource::tile(urlTemplate, pixelRatio, tileID.canonical.x,
+ tileID.canonical.y, tileID.canonical.z);
return fileSource.request(resource, [callback, this](Response res) {
if (res.error) {
callback(std::make_exception_ptr(std::runtime_error(res.error->message)), nullptr, res.modified, res.expires);
diff --git a/src/mbgl/tile/vector_tile.hpp b/src/mbgl/tile/vector_tile.hpp
index 153d7dcef4..c0892cd243 100644
--- a/src/mbgl/tile/vector_tile.hpp
+++ b/src/mbgl/tile/vector_tile.hpp
@@ -2,7 +2,7 @@
#define MBGL_MAP_VECTOR_TILE
#include <mbgl/tile/geometry_tile.hpp>
-#include <mbgl/map/tile_id.hpp>
+#include <mbgl/tile/tile_id.hpp>
#include <protozero/pbf_reader.hpp>
#include <map>
@@ -72,12 +72,12 @@ class FileSource;
class VectorTileMonitor : public GeometryTileMonitor {
public:
- VectorTileMonitor(const TileID&, float pixelRatio, const std::string& urlTemplate, FileSource&);
+ VectorTileMonitor(const OverscaledTileID&, float pixelRatio, const std::string& urlTemplate, FileSource&);
std::unique_ptr<AsyncRequest> monitorTile(const GeometryTileMonitor::Callback&) override;
private:
- TileID tileID;
+ OverscaledTileID tileID;
float pixelRatio;
std::string urlTemplate;
FileSource& fileSource;
diff --git a/src/mbgl/tile/vector_tile_data.cpp b/src/mbgl/tile/vector_tile_data.cpp
index 1840dca9fe..77e314e3b9 100644
--- a/src/mbgl/tile/vector_tile_data.cpp
+++ b/src/mbgl/tile/vector_tile_data.cpp
@@ -10,7 +10,7 @@
namespace mbgl {
-VectorTileData::VectorTileData(const TileID& id_,
+VectorTileData::VectorTileData(const OverscaledTileID& id_,
std::unique_ptr<GeometryTileMonitor> monitor_,
std::string sourceID,
Style& style_,
diff --git a/src/mbgl/tile/vector_tile_data.hpp b/src/mbgl/tile/vector_tile_data.hpp
index 52cef71d1b..e785595913 100644
--- a/src/mbgl/tile/vector_tile_data.hpp
+++ b/src/mbgl/tile/vector_tile_data.hpp
@@ -19,7 +19,7 @@ class FeatureIndex;
class VectorTileData : public TileData {
public:
- VectorTileData(const TileID&,
+ VectorTileData(const OverscaledTileID&,
std::unique_ptr<GeometryTileMonitor> monitor,
std::string sourceID,
Style&,
diff --git a/src/mbgl/util/clip_id.hpp b/src/mbgl/util/clip_id.hpp
index bd14ea6720..dd580111cb 100644
--- a/src/mbgl/util/clip_id.hpp
+++ b/src/mbgl/util/clip_id.hpp
@@ -1,8 +1,6 @@
#ifndef MBGL_UTIL_CLIP_IDS
#define MBGL_UTIL_CLIP_IDS
-#include <mbgl/map/tile_id.hpp>
-
#include <bitset>
#include <string>
#include <list>
diff --git a/src/mbgl/util/geo.cpp b/src/mbgl/util/geo.cpp
index eb697f0b02..dd40af882b 100644
--- a/src/mbgl/util/geo.cpp
+++ b/src/mbgl/util/geo.cpp
@@ -1,20 +1,35 @@
#include <mbgl/util/geo.hpp>
#include <mbgl/util/constants.hpp>
-#include <mbgl/map/tile_id.hpp>
+#include <mbgl/tile/tile_id.hpp>
#include <cmath>
namespace mbgl {
-LatLng::LatLng(const TileID& id) {
- longitude = id.x / std::pow(2.0, id.z) * util::DEGREES_MAX - util::LONGITUDE_MAX;
- const double n = M_PI - 2.0 * M_PI * id.y / std::pow(2.0, id.z);
- latitude = util::RAD2DEG * std::atan(0.5 * (std::exp(n) - std::exp(-n)));
+namespace {
+
+inline double lat(const uint8_t z, const int64_t y) {
+ const double n = M_PI - 2.0 * M_PI * y / std::pow(2.0, z);
+ return util::RAD2DEG * std::atan(0.5 * (std::exp(n) - std::exp(-n)));
+}
+
+inline double lon(const uint8_t z, const int64_t x) {
+ return x / std::pow(2.0, z) * util::DEGREES_MAX - util::LONGITUDE_MAX;
+}
+
+} // end namespace
+
+LatLng::LatLng(const CanonicalTileID& id) : latitude(lat(id.z, id.y)), longitude(lon(id.z, id.x)) {
+}
+
+LatLng::LatLng(const UnwrappedTileID& id)
+ : latitude(lat(id.canonical.z, id.canonical.y)),
+ longitude(lon(id.canonical.z, id.canonical.x) + id.wrap * util::DEGREES_MAX) {
}
-LatLngBounds::LatLngBounds(const TileID& id)
- : sw(TileID{ id.z, id.x, id.y + 1, id.sourceZ }),
- ne(TileID{ id.z, id.x + 1, id.y, id.sourceZ }) {
+LatLngBounds::LatLngBounds(const CanonicalTileID& id)
+ : sw({ lat(id.z, id.y + 1), lon(id.z, id.x) }),
+ ne({ lat(id.z, id.y), lon(id.z, id.x + 1) }) {
}
ScreenCoordinate EdgeInsets::getCenter(uint16_t width, uint16_t height) const {