#pragma once #include #include #include #include #include #include #include namespace mbgl { class RenderedQueryOptions; class RenderLayer; 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 RenderedQueryOptions& options, const GeometryTileData&, const CanonicalTileID&, const std::vector&, const CollisionTile*, const float additionalQueryRadius) const; static optional translateQueryGeometry( const GeometryCoordinates& queryGeometry, const std::array& translate, const style::TranslateAnchorType, const float bearing, const float pixelsToTileUnits); void setBucketLayerIDs(const std::string& bucketName, const std::vector& layerIDs); private: void addFeature( std::unordered_map>& result, const IndexedSubfeature&, const GeometryCoordinates& queryGeometry, const RenderedQueryOptions& options, const GeometryTileData&, const CanonicalTileID&, const std::vector&, const float bearing, const float pixelsToTileUnits) const; GridIndex grid; unsigned int sortIndex = 0; std::unordered_map> bucketLayerIDs; }; } // namespace mbgl