[core] AnnotationTileLayer vends its own name (#5163)

Fixes #5159.
This commit is contained in:
Minh Nguyễn
2016-05-26 13:12:23 -07:00
parent 27f9a85fea
commit 8ace0d37d1
5 changed files with 31 additions and 3 deletions

View File

@@ -90,7 +90,7 @@ std::unique_ptr<AnnotationTile> AnnotationManager::getTile(const CanonicalTileID
AnnotationTileLayer& pointLayer = *tile->layers.emplace(
PointLayerID,
std::make_unique<AnnotationTileLayer>()).first->second;
std::make_unique<AnnotationTileLayer>(PointLayerID)).first->second;
LatLngBounds tileBounds(tileID);

View File

@@ -21,6 +21,9 @@ optional<Value> AnnotationTileFeature::getValue(const std::string& key) const {
return optional<Value>();
}
AnnotationTileLayer::AnnotationTileLayer(const std::string &name_)
: name(name_) {}
util::ptr<GeometryTileLayer> AnnotationTile::getLayer(const std::string& name) const {
auto it = layers.find(name);
if (it != layers.end()) {

View File

@@ -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<const GeometryTileFeature> 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<util::ptr<const AnnotationTileFeature>> features;
private:
std::string name;
};
class AnnotationTile : public GeometryTile {

View File

@@ -119,7 +119,7 @@ void ShapeAnnotationImpl::updateTile(const CanonicalTileID& tileID, AnnotationTi
return;
AnnotationTileLayer& layer = *tile.layers.emplace(layerID,
std::make_unique<AnnotationTileLayer>()).first->second;
std::make_unique<AnnotationTileLayer>(layerID)).first->second;
for (auto& shapeFeature : shapeTile.features) {
FeatureType featureType = FeatureType::Unknown;

View File

@@ -259,3 +259,23 @@ TEST(Annotations, SwitchStyle) {
checkRendering(map, "switch_style");
}
TEST(Annotations, QueryRenderedFeatures) {
util::RunLoop loop;
auto display = std::make_shared<mbgl::HeadlessDisplay>();
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);
}