summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/mbgl/map/annotation.hpp50
-rw-r--r--include/mbgl/map/map.hpp17
-rw-r--r--include/mbgl/util/constants.hpp2
-rw-r--r--src/mbgl/map/annotation.cpp205
-rw-r--r--src/mbgl/map/live_tile_data.cpp3
-rw-r--r--src/mbgl/map/map.cpp15
-rw-r--r--src/mbgl/map/source.cpp2
-rw-r--r--src/mbgl/map/source.hpp2
-rw-r--r--src/mbgl/style/style_parser.cpp3
-rw-r--r--src/mbgl/util/constants.cpp2
10 files changed, 179 insertions, 122 deletions
diff --git a/include/mbgl/map/annotation.hpp b/include/mbgl/map/annotation.hpp
index e88d98b5c6..2eb0509d9a 100644
--- a/include/mbgl/map/annotation.hpp
+++ b/include/mbgl/map/annotation.hpp
@@ -2,7 +2,6 @@
#define MBGL_MAP_ANNOTATIONS
#include <mbgl/map/tile.hpp>
-#include <mbgl/map/live_tile.hpp>
#include <mbgl/util/geo.hpp>
#include <mbgl/util/noncopyable.hpp>
#include <mbgl/util/std.hpp>
@@ -18,55 +17,38 @@ namespace mbgl {
class Annotation;
class Map;
+class LiveTile;
-typedef std::vector<LatLng> AnnotationSegment;
-
-enum class AnnotationType : uint8_t {
- Point,
- Shape
-};
+using AnnotationIDs = std::vector<uint32_t>;
class AnnotationManager : private util::noncopyable {
public:
AnnotationManager();
+ ~AnnotationManager();
+
+ void setDefaultPointAnnotationSymbol(const std::string& symbol);
+ std::pair<std::vector<Tile::ID>, AnnotationIDs> addPointAnnotations(
+ const std::vector<LatLng>&, const std::vector<std::string>& symbols, const Map&);
+ std::vector<Tile::ID> removeAnnotations(const AnnotationIDs&);
+ AnnotationIDs getAnnotationsInBounds(const LatLngBounds&, const Map&) const;
+ LatLngBounds getBoundsForAnnotations(const AnnotationIDs&) const;
- void setDefaultPointAnnotationSymbol(std::string& symbol) { defaultPointAnnotationSymbol = symbol; }
- std::pair<std::vector<Tile::ID>, std::vector<uint32_t>> addPointAnnotations(std::vector<LatLng>, std::vector<std::string>& symbols, const Map&);
- std::vector<Tile::ID> removeAnnotations(std::vector<uint32_t>);
- std::vector<uint32_t> getAnnotationsInBounds(LatLngBounds, const Map&) const;
- LatLngBounds getBoundsForAnnotations(std::vector<uint32_t>) const;
+ const LiveTile* getTile(Tile::ID const& id);
- const std::unique_ptr<LiveTile>& getTile(Tile::ID const& id);
+ static const std::string layerID;
private:
- uint32_t nextID() { return nextID_++; }
- static vec2<double> projectPoint(LatLng& point);
+ inline uint32_t nextID();
+ static vec2<double> projectPoint(const LatLng& point);
private:
- std::mutex mtx;
+ mutable std::mutex mtx;
std::string defaultPointAnnotationSymbol;
std::map<uint32_t, std::unique_ptr<Annotation>> annotations;
- std::map<Tile::ID, std::pair<std::vector<uint32_t>, std::unique_ptr<LiveTile>>> annotationTiles;
- std::unique_ptr<LiveTile> nullTile;
+ std::map<Tile::ID, std::pair<AnnotationIDs, std::unique_ptr<LiveTile>>> annotationTiles;
uint32_t nextID_ = 0;
};
-class Annotation : private util::noncopyable {
- friend class AnnotationManager;
-public:
- Annotation(AnnotationType, std::vector<AnnotationSegment>);
-
-private:
- LatLng getPoint() const;
- LatLngBounds getBounds() const { return bounds; }
-
-private:
- const AnnotationType type = AnnotationType::Point;
- const std::vector<AnnotationSegment> geometry;
- std::map<Tile::ID, std::vector<std::weak_ptr<const LiveTileFeature>>> tileFeatures;
- LatLngBounds bounds;
-};
-
}
#endif
diff --git a/include/mbgl/map/map.hpp b/include/mbgl/map/map.hpp
index 86c89f769d..5e217a706b 100644
--- a/include/mbgl/map/map.hpp
+++ b/include/mbgl/map/map.hpp
@@ -142,13 +142,14 @@ public:
inline const LatLng latLngForPixel(const vec2<double> pixel) const { return state.latLngForPixel(pixel); }
// Annotations
- void setDefaultPointAnnotationSymbol(std::string&);
- uint32_t addPointAnnotation(LatLng, std::string& symbol);
- std::vector<uint32_t> addPointAnnotations(std::vector<LatLng>, std::vector<std::string>& symbols);
+ void setDefaultPointAnnotationSymbol(const std::string&);
+ uint32_t addPointAnnotation(const LatLng&, const std::string& symbol);
+ std::vector<uint32_t> addPointAnnotations(const std::vector<LatLng>&,
+ const std::vector<std::string>& symbols);
void removeAnnotation(uint32_t);
- void removeAnnotations(std::vector<uint32_t>);
- std::vector<uint32_t> getAnnotationsInBounds(LatLngBounds) const;
- LatLngBounds getBoundsForAnnotations(std::vector<uint32_t>) const;
+ void removeAnnotations(const std::vector<uint32_t>&);
+ std::vector<uint32_t> getAnnotationsInBounds(const LatLngBounds&) const;
+ LatLngBounds getBoundsForAnnotations(const std::vector<uint32_t>&) const;
// Debug
void setDebug(bool value);
@@ -181,7 +182,7 @@ private:
// the stylesheet.
void prepare();
- void updateAnnotationTiles(std::vector<Tile::ID>&);
+ void updateAnnotationTiles(const std::vector<Tile::ID>&);
enum class Mode : uint8_t {
None, // we're not doing any processing
@@ -230,7 +231,7 @@ private:
const std::unique_ptr<LineAtlas> lineAtlas;
util::ptr<TexturePool> texturePool;
const std::unique_ptr<Painter> painter;
- util::ptr<AnnotationManager> annotationManager;
+ const std::unique_ptr<AnnotationManager> annotationManager;
std::string styleURL;
std::string styleJSON = "";
diff --git a/include/mbgl/util/constants.hpp b/include/mbgl/util/constants.hpp
index 9e0856b68a..e598806c20 100644
--- a/include/mbgl/util/constants.hpp
+++ b/include/mbgl/util/constants.hpp
@@ -16,8 +16,6 @@ extern const double M2PI;
extern const double EARTH_RADIUS_M;
extern const double LATITUDE_MAX;
-extern const std::string ANNOTATIONS_POINTS_LAYER_ID;
-
}
namespace debug {
diff --git a/src/mbgl/map/annotation.cpp b/src/mbgl/map/annotation.cpp
index 0d6da5781e..6aaae0f360 100644
--- a/src/mbgl/map/annotation.cpp
+++ b/src/mbgl/map/annotation.cpp
@@ -1,58 +1,108 @@
#include <mbgl/map/annotation.hpp>
#include <mbgl/map/map.hpp>
+#include <mbgl/map/live_tile.hpp>
#include <mbgl/util/ptr.hpp>
#include <mbgl/util/std.hpp>
#include <algorithm>
#include <memory>
-using namespace mbgl;
+namespace mbgl {
-Annotation::Annotation(AnnotationType type_, std::vector<AnnotationSegment> geometry_)
+enum class AnnotationType : uint8_t {
+ Point,
+ Shape
+};
+
+using AnnotationSegment = std::vector<LatLng>;
+using AnnotationSegments = std::vector<AnnotationSegment>;
+
+class Annotation : private util::noncopyable {
+ friend class AnnotationManager;
+public:
+ Annotation(AnnotationType, const AnnotationSegments&);
+
+private:
+ LatLng getPoint() const;
+ LatLngBounds getBounds() const { return bounds; }
+
+private:
+ const AnnotationType type = AnnotationType::Point;
+ const AnnotationSegments geometry;
+ std::map<Tile::ID, std::vector<std::weak_ptr<const LiveTileFeature>>> tileFeatures;
+ const LatLngBounds bounds;
+};
+
+
+Annotation::Annotation(AnnotationType type_, const AnnotationSegments& geometry_)
: type(type_),
- geometry(geometry_) {
- if (type == AnnotationType::Point) {
- bounds = LatLngBounds(getPoint(), getPoint());
- } else {
- for (auto segment : geometry) {
- for (auto point : segment) {
- bounds.extend(point);
- }
- }
- }
+ geometry(geometry_),
+ bounds([this] {
+ LatLngBounds bounds_;
+ if (type == AnnotationType::Point) {
+ bounds_ = { getPoint(), getPoint() };
+ } else {
+ for (auto& segment : geometry) {
+ for (auto& point : segment) {
+ bounds_.extend(point);
+ }
+ }
+ }
+ return bounds_;
+ }()) {
}
LatLng Annotation::getPoint() const {
+ assert(!geometry.empty());
+ assert(!geometry[0].empty());
return geometry[0][0];
}
-AnnotationManager::AnnotationManager()
- : nullTile(util::make_unique<LiveTile>()) {}
+AnnotationManager::AnnotationManager() {}
-vec2<double> AnnotationManager::projectPoint(LatLng& point) {
- double sine = std::sin(point.latitude * M_PI / 180);
- double x = point.longitude / 360 + 0.5;
- double y = 0.5 - 0.25 * std::log((1 + sine) / (1 - sine)) / M_PI;
- return vec2<double>(x, y);
+AnnotationManager::~AnnotationManager() {
+ // leave this here because the header file doesn't have a definition of
+ // Annotation so we can't destruct the object with just the header file.
}
-std::pair<std::vector<Tile::ID>, std::vector<uint32_t>> AnnotationManager::addPointAnnotations(std::vector<LatLng> points, std::vector<std::string>& symbols, const Map& map) {
+void AnnotationManager::setDefaultPointAnnotationSymbol(const std::string& symbol) {
+ std::lock_guard<std::mutex> lock(mtx);
+ defaultPointAnnotationSymbol = symbol;
+}
- uint16_t extent = 4096;
+uint32_t AnnotationManager::nextID() {
+ return nextID_++;
+}
+
+vec2<double> AnnotationManager::projectPoint(const LatLng& point) {
+ const double sine = std::sin(point.latitude * M_PI / 180.0);
+ const double x = point.longitude / 360.0 + 0.5;
+ const double y = 0.5 - 0.25 * std::log((1.0 + sine) / (1.0 - sine)) / M_PI;
+ return { x, y };
+}
- std::vector<uint32_t> annotationIDs(points.size());
+std::pair<std::vector<Tile::ID>, AnnotationIDs> AnnotationManager::addPointAnnotations(
+ const std::vector<LatLng>& points, const std::vector<std::string>& symbols, const Map& map) {
+ std::lock_guard<std::mutex> lock(mtx);
+
+ const uint16_t extent = 4096;
+
+ AnnotationIDs annotationIDs(points.size());
std::vector<Tile::ID> affectedTiles;
- for (uint32_t i = 0; i < points.size(); ++i) {
- uint32_t annotationID = nextID();
+ for (size_t i = 0; i < points.size(); ++i) {
+ const uint32_t annotationID = nextID();
- auto anno_it = annotations.emplace(annotationID, util::make_unique<Annotation>(AnnotationType::Point, std::vector<AnnotationSegment>({{ points[i] }})));
+ auto anno_it = annotations.emplace(
+ annotationID,
+ util::make_unique<Annotation>(AnnotationType::Point,
+ AnnotationSegments({ { points[i] } })));
- uint8_t maxZoom = map.getMaxZoom();
+ const uint8_t maxZoom = map.getMaxZoom();
uint32_t z2 = 1 << maxZoom;
- vec2<double> p = projectPoint(points[i]);
+ const vec2<double> p = projectPoint(points[i]);
uint32_t x = p.x * z2;
uint32_t y = p.y * z2;
@@ -61,20 +111,22 @@ std::pair<std::vector<Tile::ID>, std::vector<uint32_t>> AnnotationManager::addPo
affectedTiles.emplace_back(z, x, y);
Tile::ID tileID = affectedTiles.back();
- Coordinate coordinate(extent * (p.x * z2 - x), extent * (p.y * z2 - y));
+ const Coordinate coordinate(extent * (p.x * z2 - x), extent * (p.y * z2 - y));
- GeometryCollection geometries({{ {{ coordinate }} }});
+ const GeometryCollection geometries({ { { { coordinate } } } });
- std::map<std::string, std::string> properties = {{ "sprite", (symbols[i].length() ? symbols[i] : defaultPointAnnotationSymbol) }};
+ const std::map<std::string, std::string> properties = {
+ { "sprite", (symbols[i].length() ? symbols[i] : defaultPointAnnotationSymbol) }
+ };
- auto feature = std::make_shared<const LiveTileFeature>(FeatureType::Point,
- geometries,
- properties);
+ auto feature =
+ std::make_shared<const LiveTileFeature>(FeatureType::Point, geometries, properties);
auto tile_it = annotationTiles.find(tileID);
if (tile_it != annotationTiles.end()) {
// get point layer & add feature
- auto layer = tile_it->second.second->getMutableLayer(util::ANNOTATIONS_POINTS_LAYER_ID);
+ auto layer =
+ tile_it->second.second->getMutableLayer(layerID);
layer->addFeature(feature);
// record annotation association with tile
tile_it->second.first.push_back(annotationID);
@@ -83,13 +135,16 @@ std::pair<std::vector<Tile::ID>, std::vector<uint32_t>> AnnotationManager::addPo
util::ptr<LiveTileLayer> layer = std::make_shared<LiveTileLayer>();
layer->addFeature(feature);
// create tile & record annotation association
- auto tile_pos = annotationTiles.emplace(tileID, std::make_pair(std::vector<uint32_t>({ annotationID }), util::make_unique<LiveTile>()));
+ auto tile_pos = annotationTiles.emplace(
+ tileID, std::make_pair(AnnotationIDs({ annotationID }),
+ util::make_unique<LiveTile>()));
// add point layer to tile
- tile_pos.first->second.second->addLayer(util::ANNOTATIONS_POINTS_LAYER_ID, layer);
+ tile_pos.first->second.second->addLayer(layerID, layer);
}
// record annotation association with tile feature
- anno_it.first->second->tileFeatures.emplace(tileID, std::vector<std::weak_ptr<const LiveTileFeature>>({ feature }));
+ anno_it.first->second->tileFeatures.emplace(
+ tileID, std::vector<std::weak_ptr<const LiveTileFeature>>({ feature }));
z2 /= 2;
x /= 2;
@@ -102,23 +157,26 @@ std::pair<std::vector<Tile::ID>, std::vector<uint32_t>> AnnotationManager::addPo
return std::make_pair(affectedTiles, annotationIDs);
}
-std::vector<Tile::ID> AnnotationManager::removeAnnotations(std::vector<uint32_t> ids) {
+std::vector<Tile::ID> AnnotationManager::removeAnnotations(const AnnotationIDs& ids) {
+ std::lock_guard<std::mutex> lock(mtx);
+
std::vector<Tile::ID> affectedTiles;
for (auto& annotationID : ids) {
- auto annotation_it = annotations.find(annotationID);
+ const auto annotation_it = annotations.find(annotationID);
if (annotation_it != annotations.end()) {
auto& annotation = annotation_it->second;
for (auto& tile_it : annotationTiles) {
auto& tileAnnotations = tile_it.second.first;
- util::erase_if(tileAnnotations, tileAnnotations.begin(),
- tileAnnotations.end(), [&](const uint32_t annotationID_) -> bool {
- return (annotationID_ == annotationID);
- });
+ util::erase_if(tileAnnotations, tileAnnotations.begin(), tileAnnotations.end(),
+ [&](const uint32_t annotationID_)
+ -> bool { return (annotationID_ == annotationID); });
auto features_it = annotation->tileFeatures.find(tile_it.first);
if (features_it != annotation->tileFeatures.end()) {
- auto layer = tile_it.second.second->getMutableLayer(util::ANNOTATIONS_POINTS_LAYER_ID);
- auto& features = features_it->second;
+ const auto layer =
+ tile_it.second.second->getMutableLayer(layerID);
+ const auto& features = features_it->second;
+ assert(!features.empty());
layer->removeFeature(features[0]);
affectedTiles.push_back(tile_it.first);
}
@@ -130,15 +188,18 @@ std::vector<Tile::ID> AnnotationManager::removeAnnotations(std::vector<uint32_t>
return affectedTiles;
}
-std::vector<uint32_t> AnnotationManager::getAnnotationsInBounds(LatLngBounds queryBounds, const Map& map) const {
- uint8_t z = map.getMaxZoom();
- uint32_t z2 = 1 << z;
- vec2<double> swPoint = projectPoint(queryBounds.sw);
- vec2<double> nePoint = projectPoint(queryBounds.ne);
+std::vector<uint32_t> AnnotationManager::getAnnotationsInBounds(const LatLngBounds& queryBounds,
+ const Map& map) const {
+ std::lock_guard<std::mutex> lock(mtx);
+
+ const uint8_t z = map.getMaxZoom();
+ const uint32_t z2 = 1 << z;
+ const vec2<double> swPoint = projectPoint(queryBounds.sw);
+ const vec2<double> nePoint = projectPoint(queryBounds.ne);
// tiles number y from top down
- Tile::ID nwTile(z, swPoint.x * z2, nePoint.y * z2);
- Tile::ID seTile(z, nePoint.x * z2, swPoint.y * z2);
+ const Tile::ID nwTile(z, swPoint.x * z2, nePoint.y * z2);
+ const Tile::ID seTile(z, nePoint.x * z2, swPoint.y * z2);
std::vector<uint32_t> matchingAnnotations;
@@ -148,16 +209,23 @@ std::vector<uint32_t> AnnotationManager::getAnnotationsInBounds(LatLngBounds que
if (id.x >= nwTile.x && id.x <= seTile.x && id.y >= nwTile.y && id.y <= seTile.y) {
if (id.x > nwTile.x && id.x < seTile.x && id.y > nwTile.y && id.y < seTile.y) {
// trivial accept; grab all of the tile's annotations
- std::copy(tile.second.first.begin(), tile.second.first.end(), std::back_inserter(matchingAnnotations));
+ std::copy(tile.second.first.begin(), tile.second.first.end(),
+ std::back_inserter(matchingAnnotations));
} else {
// check tile's annotations' bounding boxes
std::copy_if(tile.second.first.begin(), tile.second.first.end(),
- std::back_inserter(matchingAnnotations), [&](const uint32_t annotationID) -> bool {
- LatLngBounds annoBounds = this->annotations.find(annotationID)->second->getBounds();
- return (annoBounds.sw.latitude >= queryBounds.sw.latitude &&
- annoBounds.ne.latitude <= queryBounds.ne.latitude &&
- annoBounds.sw.longitude >= queryBounds.sw.longitude &&
- annoBounds.ne.longitude <= queryBounds.ne.longitude);
+ std::back_inserter(matchingAnnotations),
+ [&](const uint32_t annotationID) -> bool {
+ const auto it = annotations.find(annotationID);
+ if (it != annotations.end()) {
+ const LatLngBounds annoBounds = it->second->getBounds();
+ return (annoBounds.sw.latitude >= queryBounds.sw.latitude &&
+ annoBounds.ne.latitude <= queryBounds.ne.latitude &&
+ annoBounds.sw.longitude >= queryBounds.sw.longitude &&
+ annoBounds.ne.longitude <= queryBounds.ne.longitude);
+ } else {
+ return false;
+ }
});
}
}
@@ -167,10 +235,12 @@ std::vector<uint32_t> AnnotationManager::getAnnotationsInBounds(LatLngBounds que
return matchingAnnotations;
}
-LatLngBounds AnnotationManager::getBoundsForAnnotations(std::vector<uint32_t> ids) const {
+LatLngBounds AnnotationManager::getBoundsForAnnotations(const AnnotationIDs& ids) const {
+ std::lock_guard<std::mutex> lock(mtx);
+
LatLngBounds bounds;
for (auto id : ids) {
- auto annotation_it = annotations.find(id);
+ const auto annotation_it = annotations.find(id);
if (annotation_it != annotations.end()) {
bounds.extend(annotation_it->second->getPoint());
}
@@ -179,12 +249,17 @@ LatLngBounds AnnotationManager::getBoundsForAnnotations(std::vector<uint32_t> id
return bounds;
}
-const std::unique_ptr<LiveTile>& AnnotationManager::getTile(Tile::ID const& id) {
+const LiveTile* AnnotationManager::getTile(Tile::ID const& id) {
std::lock_guard<std::mutex> lock(mtx);
- auto tile_it = annotationTiles.find(id);
+ const auto tile_it = annotationTiles.find(id);
if (tile_it != annotationTiles.end()) {
- return tile_it->second.second;
+ return tile_it->second.second.get();
}
- return nullTile;
+ return nullptr;
+}
+
+const std::string AnnotationManager::layerID = "com.mapbox.annotations.points";
+
+
}
diff --git a/src/mbgl/map/live_tile_data.cpp b/src/mbgl/map/live_tile_data.cpp
index 192efb7dcf..dd83ed4224 100644
--- a/src/mbgl/map/live_tile_data.cpp
+++ b/src/mbgl/map/live_tile_data.cpp
@@ -1,5 +1,6 @@
#include <mbgl/map/annotation.hpp>
#include <mbgl/map/live_tile_data.hpp>
+#include <mbgl/map/live_tile.hpp>
#include <mbgl/map/tile_parser.hpp>
#include <mbgl/style/style_source.hpp>
#include <mbgl/map/vector_tile.hpp>
@@ -36,7 +37,7 @@ void LiveTileData::parse() {
}
if (source.type == SourceType::Annotations) {
- const std::unique_ptr<LiveTile>& tile = annotationManager.getTile(id);
+ const LiveTile* tile = annotationManager.getTile(id);
if (tile) {
// Parsing creates state that is encapsulated in TileParser. While parsing,
diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp
index 22e6cbcebb..c707a033f5 100644
--- a/src/mbgl/map/map.cpp
+++ b/src/mbgl/map/map.cpp
@@ -531,19 +531,19 @@ const std::string &Map::getAccessToken() const {
#pragma mark - Annotations
-void Map::setDefaultPointAnnotationSymbol(std::string& symbol) {
+void Map::setDefaultPointAnnotationSymbol(const std::string& symbol) {
assert(Environment::currentlyOn(ThreadType::Main));
annotationManager->setDefaultPointAnnotationSymbol(symbol);
}
-uint32_t Map::addPointAnnotation(LatLng point, std::string& symbol) {
+uint32_t Map::addPointAnnotation(const LatLng& point, const std::string& symbol) {
assert(Environment::currentlyOn(ThreadType::Main));
std::vector<LatLng> points({ point });
std::vector<std::string> symbols({ symbol });
return addPointAnnotations(points, symbols)[0];
}
-std::vector<uint32_t> Map::addPointAnnotations(std::vector<LatLng> points, std::vector<std::string>& symbols) {
+std::vector<uint32_t> Map::addPointAnnotations(const std::vector<LatLng>& points, const std::vector<std::string>& symbols) {
assert(Environment::currentlyOn(ThreadType::Main));
auto result = annotationManager->addPointAnnotations(points, symbols, *this);
updateAnnotationTiles(result.first);
@@ -555,23 +555,24 @@ void Map::removeAnnotation(uint32_t annotation) {
removeAnnotations({ annotation });
}
-void Map::removeAnnotations(std::vector<uint32_t> annotations) {
+void Map::removeAnnotations(const std::vector<uint32_t>& annotations) {
assert(Environment::currentlyOn(ThreadType::Main));
auto result = annotationManager->removeAnnotations(annotations);
updateAnnotationTiles(result);
}
-std::vector<uint32_t> Map::getAnnotationsInBounds(LatLngBounds bounds) const {
+std::vector<uint32_t> Map::getAnnotationsInBounds(const LatLngBounds& bounds) const {
assert(Environment::currentlyOn(ThreadType::Main));
return annotationManager->getAnnotationsInBounds(bounds, *this);
}
-LatLngBounds Map::getBoundsForAnnotations(std::vector<uint32_t> annotations) const {
+LatLngBounds Map::getBoundsForAnnotations(const std::vector<uint32_t>& annotations) const {
assert(Environment::currentlyOn(ThreadType::Main));
return annotationManager->getBoundsForAnnotations(annotations);
}
-void Map::updateAnnotationTiles(std::vector<Tile::ID>& ids) {
+void Map::updateAnnotationTiles(const std::vector<Tile::ID>& ids) {
+ assert(Environment::currentlyOn(ThreadType::Main));
for (const auto &source : activeSources) {
if (source->info.type == SourceType::Annotations) {
source->source->invalidateTiles(*this, ids);
diff --git a/src/mbgl/map/source.cpp b/src/mbgl/map/source.cpp
index 3036342d78..8189068886 100644
--- a/src/mbgl/map/source.cpp
+++ b/src/mbgl/map/source.cpp
@@ -373,7 +373,7 @@ void Source::update(Map &map,
updated = map.getTime();
}
-void Source::invalidateTiles(Map& map, std::vector<Tile::ID>& ids) {
+void Source::invalidateTiles(Map& map, const std::vector<Tile::ID>& ids) {
for (auto& id : ids) {
tiles.erase(id);
tile_data.erase(id);
diff --git a/src/mbgl/map/source.hpp b/src/mbgl/map/source.hpp
index f5ffd29adc..4cdd2ed64d 100644
--- a/src/mbgl/map/source.hpp
+++ b/src/mbgl/map/source.hpp
@@ -37,7 +37,7 @@ public:
void load(Map &, Environment &);
void update(Map &, uv::worker &, util::ptr<Style>, GlyphAtlas &, GlyphStore &,
SpriteAtlas &, util::ptr<Sprite>, TexturePool &, std::function<void()> callback);
- void invalidateTiles(Map&, std::vector<Tile::ID>&);
+ void invalidateTiles(Map&, const std::vector<Tile::ID>&);
void updateMatrices(const mat4 &projMatrix, const TransformState &transform);
void drawClippingMasks(Painter &painter);
diff --git a/src/mbgl/style/style_parser.cpp b/src/mbgl/style/style_parser.cpp
index f2bd8e6c88..acebf78dbb 100644
--- a/src/mbgl/style/style_parser.cpp
+++ b/src/mbgl/style/style_parser.cpp
@@ -1,6 +1,7 @@
#include <mbgl/style/style_source.hpp>
#include <mbgl/style/style_parser.hpp>
#include <mbgl/style/style_layer_group.hpp>
+#include <mbgl/map/annotation.hpp>
#include <mbgl/util/constants.hpp>
#include <mbgl/util/std.hpp>
#include <mbgl/util/vec.hpp>
@@ -32,7 +33,7 @@ void StyleParser::parse(JSVal document) {
// create point annotations layer
//
- std::string id = util::ANNOTATIONS_POINTS_LAYER_ID;
+ const std::string& id = AnnotationManager::layerID;
std::map<ClassID, ClassProperties> paints;
util::ptr<StyleLayer> annotations = std::make_shared<StyleLayer>(id, std::move(paints));
diff --git a/src/mbgl/util/constants.cpp b/src/mbgl/util/constants.cpp
index ae5b21ddc4..ccdbeba23a 100644
--- a/src/mbgl/util/constants.cpp
+++ b/src/mbgl/util/constants.cpp
@@ -8,8 +8,6 @@ const double mbgl::util::M2PI = 2 * M_PI;
const double mbgl::util::EARTH_RADIUS_M = 6378137;
const double mbgl::util::LATITUDE_MAX = 85.05112878;
-const std::string mbgl::util::ANNOTATIONS_POINTS_LAYER_ID = "com.mapbox.annotations.points";
-
#if defined(DEBUG)
const bool mbgl::debug::tileParseWarnings = false;
const bool mbgl::debug::styleParseWarnings = false;