summaryrefslogtreecommitdiff
path: root/src/mbgl/layout/symbol_feature.hpp
blob: ed9c0783d09c4a2cd74dc00a866c6cf89da79109 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#pragma once

#include <mbgl/tile/geometry_tile_data.hpp>
#include <mbgl/util/optional.hpp>
#include <mbgl/text/tagged_string.hpp>

#include <array>
#include <string>

namespace mbgl {

class SymbolFeature : public GeometryTileFeature {
public:
    SymbolFeature(std::unique_ptr<GeometryTileFeature> feature_) :
        feature(std::move(feature_)),
        geometry(feature->getGeometries().clone()) // we need a mutable copy of the geometry for mergeLines()
    {}
    
    FeatureType getType() const override { return feature->getType(); }
    optional<Value> getValue(const std::string& key) const override { return feature->getValue(key); };
    const PropertyMap& getProperties() const override { return feature->getProperties(); };
    FeatureIdentifier getID() const override { return feature->getID(); };
    const GeometryCollection& getGeometries() const override { return geometry; };

    friend bool operator < (const SymbolFeature& lhs, const SymbolFeature& rhs) {
        return lhs.sortKey <  rhs.sortKey;
    }

    std::unique_ptr<GeometryTileFeature> feature;
    GeometryCollection geometry;
    optional<TaggedString> formattedText;
    optional<std::string> icon;
    float sortKey = 0.0f;
    std::size_t index;
};

} // namespace mbgl