summaryrefslogtreecommitdiff
path: root/src/mbgl/style/function/expression.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/style/function/expression.cpp')
-rw-r--r--src/mbgl/style/function/expression.cpp49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/mbgl/style/function/expression.cpp b/src/mbgl/style/function/expression.cpp
new file mode 100644
index 0000000000..c620b0bb22
--- /dev/null
+++ b/src/mbgl/style/function/expression.cpp
@@ -0,0 +1,49 @@
+#include <mbgl/style/function/expression.hpp>
+#include <mbgl/tile/geometry_tile_data.hpp>
+
+namespace mbgl {
+namespace style {
+namespace expression {
+
+class GeoJSONFeature : public GeometryTileFeature {
+public:
+ const Feature& feature;
+
+ GeoJSONFeature(const Feature& feature_)
+ : feature(feature_) {
+ }
+
+ FeatureType getType() const override {
+ return apply_visitor(ToFeatureType(), feature.geometry);
+ }
+
+ PropertyMap getProperties() const override {
+ return feature.properties;
+ }
+
+ optional<FeatureIdentifier> getID() const override {
+ return feature.id;
+ }
+
+ GeometryCollection getGeometries() const override {
+ return {};
+ }
+
+ optional<Value> getValue(const std::string& key) const override {
+ auto it = feature.properties.find(key);
+ if (it != feature.properties.end()) {
+ return optional<Value>(it->second);
+ }
+ return optional<Value>();
+ }
+};
+
+optional<OutputValue> Expression::evaluate(float z, const Feature& feature, Error& error) const {
+ std::unique_ptr<const GeometryTileFeature> f = std::make_unique<const GeoJSONFeature>(feature);
+ return this->evaluate(z, *f, error);
+}
+
+
+} // namespace expression
+} // namespace style
+} // namespace mbgl