#pragma once #include #include #include #include #include #include #include namespace mbgl { namespace style { class Style; } // namespace style class CollisionTile; class CanonicalTileID; class IndexedSubfeature { public: IndexedSubfeature() = delete; std::size_t index; std::string sourceLayerName; std::string bucketName; size_t sortIndex; }; class FeatureIndex { public: FeatureIndex(); void insert(const GeometryCollection&, std::size_t index, const std::string& sourceLayerName, const std::string& bucketName); void query( std::unordered_map>& result, const GeometryCoordinates& queryGeometry, const float bearing, const double tileSize, const double scale, const optional>& layerIDs, const GeometryTileData&, const CanonicalTileID&, const style::Style&) const; static optional translateQueryGeometry( const GeometryCoordinates& queryGeometry, const std::array& translate, const style::TranslateAnchorType, const float bearing, const float pixelsToTileUnits); void addBucketLayerName(const std::string& bucketName, const std::string& layerName); void setCollisionTile(std::unique_ptr); private: void addFeature( std::unordered_map>& result, const IndexedSubfeature&, const GeometryCoordinates& queryGeometry, const optional>& filterLayerIDs, const GeometryTileData&, const CanonicalTileID&, const style::Style&, const float bearing, const float pixelsToTileUnits) const; std::unique_ptr collisionTile; GridIndex grid; unsigned int sortIndex = 0; std::unordered_map> bucketLayerIDs; }; } // namespace mbgl