diff --git a/src/mbgl/annotation/annotation_manager.cpp b/src/mbgl/annotation/annotation_manager.cpp index 1febc757a..e5f43eb3b 100644 --- a/src/mbgl/annotation/annotation_manager.cpp +++ b/src/mbgl/annotation/annotation_manager.cpp @@ -90,7 +90,7 @@ std::unique_ptr AnnotationManager::getTile(const CanonicalTileID AnnotationTileLayer& pointLayer = *tile->layers.emplace( PointLayerID, - std::make_unique()).first->second; + std::make_unique(PointLayerID)).first->second; LatLngBounds tileBounds(tileID); diff --git a/src/mbgl/annotation/annotation_tile.cpp b/src/mbgl/annotation/annotation_tile.cpp index 8f754ed6d..ba4b69108 100644 --- a/src/mbgl/annotation/annotation_tile.cpp +++ b/src/mbgl/annotation/annotation_tile.cpp @@ -21,6 +21,9 @@ optional AnnotationTileFeature::getValue(const std::string& key) const { return optional(); } +AnnotationTileLayer::AnnotationTileLayer(const std::string &name_) + : name(name_) {} + util::ptr AnnotationTile::getLayer(const std::string& name) const { auto it = layers.find(name); if (it != layers.end()) { diff --git a/src/mbgl/annotation/annotation_tile.hpp b/src/mbgl/annotation/annotation_tile.hpp index 5943eb11c..d607d563d 100644 --- a/src/mbgl/annotation/annotation_tile.hpp +++ b/src/mbgl/annotation/annotation_tile.hpp @@ -24,11 +24,16 @@ public: class AnnotationTileLayer : public GeometryTileLayer { public: + AnnotationTileLayer(const std::string&); + std::size_t featureCount() const override { return features.size(); } util::ptr getFeature(std::size_t i) const override { return features[i]; } - std::string getName() const override { return ""; }; + std::string getName() const override { return name; }; std::vector> features; + +private: + std::string name; }; class AnnotationTile : public GeometryTile { diff --git a/src/mbgl/annotation/shape_annotation_impl.cpp b/src/mbgl/annotation/shape_annotation_impl.cpp index 9b9ea3bf2..3afc6044d 100644 --- a/src/mbgl/annotation/shape_annotation_impl.cpp +++ b/src/mbgl/annotation/shape_annotation_impl.cpp @@ -119,7 +119,7 @@ void ShapeAnnotationImpl::updateTile(const CanonicalTileID& tileID, AnnotationTi return; AnnotationTileLayer& layer = *tile.layers.emplace(layerID, - std::make_unique()).first->second; + std::make_unique(layerID)).first->second; for (auto& shapeFeature : shapeTile.features) { FeatureType featureType = FeatureType::Unknown; diff --git a/test/api/annotations.cpp b/test/api/annotations.cpp index 8640ce9db..f7554fb65 100644 --- a/test/api/annotations.cpp +++ b/test/api/annotations.cpp @@ -259,3 +259,23 @@ TEST(Annotations, SwitchStyle) { checkRendering(map, "switch_style"); } + +TEST(Annotations, QueryRenderedFeatures) { + util::RunLoop loop; + + auto display = std::make_shared(); + HeadlessView view(display, 1); + StubFileSource fileSource; + + Map map(view, fileSource, MapMode::Still); + map.setStyleJSON(util::read_file("test/fixtures/api/empty.json"), ""); + map.addAnnotationIcon("default_marker", namedMarker("default_marker.png")); + const LatLng latLng(0, 0); + map.addPointAnnotation(PointAnnotation(latLng, "default_marker")); + + test::render(map); + + auto point = map.pixelForLatLng(latLng); + auto features = map.queryRenderedFeatures(point); + EXPECT_EQ(features.size(), 1); +}