#pragma once #include #include #include #include #include #include #include #include #include #include namespace mbgl { class AnnotationTile; class AnnotationTileData; class SymbolAnnotationImpl; class ShapeAnnotationImpl; namespace style { class Style; } // namespace style class AnnotationManager : private util::noncopyable { public: AnnotationManager(float pixelRatio); ~AnnotationManager(); AnnotationID addAnnotation(const Annotation&, const uint8_t maxZoom); void updateAnnotation(const AnnotationID&, const Annotation&, const uint8_t maxZoom); void removeAnnotation(const AnnotationID&); AnnotationIDs getPointAnnotationsInBounds(const LatLngBounds&) const; void addIcon(const std::string& name, std::shared_ptr); void removeIcon(const std::string& name); double getTopOffsetPixelsForIcon(const std::string& name); SpriteAtlas& getSpriteAtlas() { return spriteAtlas; } void updateStyle(style::Style&); void addTile(AnnotationTile&); void removeTile(AnnotationTile&); static const std::string SourceID; static const std::string PointLayerID; private: void add(const AnnotationID&, const SymbolAnnotation&, const uint8_t); void add(const AnnotationID&, const LineAnnotation&, const uint8_t); void add(const AnnotationID&, const FillAnnotation&, const uint8_t); void add(const AnnotationID&, const StyleSourcedAnnotation&, const uint8_t); std::unique_ptr getTileData(const CanonicalTileID&); AnnotationID nextID = 0; using SymbolAnnotationTree = boost::geometry::index::rtree, boost::geometry::index::rstar<16, 4>>; using SymbolAnnotationMap = std::unordered_map>; using ShapeAnnotationMap = std::unordered_map>; SymbolAnnotationTree symbolTree; SymbolAnnotationMap symbolAnnotations; ShapeAnnotationMap shapeAnnotations; std::vector obsoleteShapeAnnotationLayers; std::set tiles; SpriteStore spriteStore; SpriteAtlas spriteAtlas; }; } // namespace mbgl