summaryrefslogtreecommitdiff
path: root/src/mbgl
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl')
-rw-r--r--src/mbgl/geometry/feature_index.cpp52
-rw-r--r--src/mbgl/geometry/feature_index.hpp5
-rw-r--r--src/mbgl/map/map.cpp4
-rw-r--r--src/mbgl/source/source.cpp4
-rw-r--r--src/mbgl/source/source.hpp3
-rw-r--r--src/mbgl/style/filter.hpp2
-rw-r--r--src/mbgl/style/filter_evaluator.hpp10
-rw-r--r--src/mbgl/style/style.cpp7
-rw-r--r--src/mbgl/style/style.hpp3
-rw-r--r--src/mbgl/tile/geometry_tile.hpp6
-rw-r--r--src/mbgl/tile/tile_data.cpp2
-rw-r--r--src/mbgl/tile/tile_data.hpp3
-rw-r--r--src/mbgl/tile/vector_tile.cpp2
-rw-r--r--src/mbgl/tile/vector_tile.hpp4
-rw-r--r--src/mbgl/tile/vector_tile_data.cpp2
-rw-r--r--src/mbgl/tile/vector_tile_data.hpp3
-rw-r--r--src/mbgl/util/value.hpp9
17 files changed, 47 insertions, 74 deletions
diff --git a/src/mbgl/geometry/feature_index.cpp b/src/mbgl/geometry/feature_index.cpp
index d6e19c1932..3e345fe817 100644
--- a/src/mbgl/geometry/feature_index.cpp
+++ b/src/mbgl/geometry/feature_index.cpp
@@ -5,8 +5,6 @@
#include <mbgl/layer/symbol_layer.hpp>
#include <mbgl/util/get_geometries.hpp>
#include <mbgl/text/collision_tile.hpp>
-#include <mbgl/util/rapidjson.hpp>
-#include <rapidjson/writer.h>
#include <mbgl/util/constants.hpp>
#include <cassert>
@@ -61,7 +59,7 @@ bool topDownSymbols(const IndexedSubfeature& a, const IndexedSubfeature& b) {
}
void FeatureIndex::query(
- std::unordered_map<std::string, std::vector<std::string>>& result,
+ std::unordered_map<std::string, std::vector<Feature>>& result,
const GeometryCollection& queryGeometry,
const float bearing,
const double tileSize,
@@ -116,7 +114,7 @@ void FeatureIndex::query(
}
void FeatureIndex::addFeature(
- std::unordered_map<std::string, std::vector<std::string>>& result,
+ std::unordered_map<std::string, std::vector<Feature>>& result,
const IndexedSubfeature& indexedFeature,
const GeometryCollection& queryGeometry,
const optional<std::vector<std::string>>& filterLayerIDs,
@@ -131,8 +129,8 @@ void FeatureIndex::addFeature(
auto sourceLayer = geometryTile.getLayer(indexedFeature.sourceLayerName);
assert(sourceLayer);
- auto feature = sourceLayer->getFeature(indexedFeature.index);
- assert(feature);
+ auto geometryTileFeature = sourceLayer->getFeature(indexedFeature.index);
+ assert(geometryTileFeature);
for (auto& layerID : layerIDs) {
@@ -142,49 +140,19 @@ void FeatureIndex::addFeature(
if (!styleLayer) continue;
if (!styleLayer->is<SymbolLayer>()) {
- auto geometries = getGeometries(*feature);
+ auto geometries = getGeometries(*geometryTileFeature);
if (!styleLayer->queryIntersectsGeometry(queryGeometry, geometries, bearing, pixelsToTileUnits)) continue;
}
- auto& layerResult = result[layerID];
+ Feature feature { mapbox::geometry::point<double>() };
+ feature.properties = geometryTileFeature->getProperties();
- auto properties = feature->getProperties();
- rapidjson::StringBuffer buffer;
- buffer.Clear();
- rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
-
- writer.StartObject();
- writer.Key("type");
- writer.String("Feature");
- auto id = feature->getID();
+ optional<uint64_t> id = geometryTileFeature->getID();
if (id) {
- writer.Key("id");
- writer.Double(feature->getID());
- }
- writer.Key("properties");
- writer.StartObject();
- for (auto& prop : properties) {
- std::string key = prop.first;
- Value& value = prop.second;
-
- writer.Key(key.c_str());
-
- if (value.is<std::string>()) {
- writer.String(value.get<std::string>().c_str());
- } else if (value.is<bool>()) {
- writer.Bool(value.get<bool>());
- } else if (value.is<int64_t>()) {
- writer.Int64(value.get<int64_t>());
- } else if (value.is<uint64_t>()) {
- writer.Uint64(value.get<uint64_t>());
- } else if (value.is<double>()) {
- writer.Double(value.get<double>());
- }
+ feature.id = Value(*id);
}
- writer.EndObject();
- writer.EndObject();
- layerResult.push_back(buffer.GetString());
+ result[layerID].push_back(std::move(feature));
}
}
diff --git a/src/mbgl/geometry/feature_index.hpp b/src/mbgl/geometry/feature_index.hpp
index 0b520a841a..5d78df2138 100644
--- a/src/mbgl/geometry/feature_index.hpp
+++ b/src/mbgl/geometry/feature_index.hpp
@@ -3,6 +3,7 @@
#include <mbgl/tile/geometry_tile.hpp>
#include <mbgl/util/grid_index.hpp>
+#include <mbgl/util/feature.hpp>
#include <vector>
#include <string>
@@ -29,7 +30,7 @@ class FeatureIndex {
void insert(const GeometryCollection&, std::size_t index, const std::string& sourceLayerName, const std::string& bucketName);
void query(
- std::unordered_map<std::string, std::vector<std::string>>& result,
+ std::unordered_map<std::string, std::vector<Feature>>& result,
const GeometryCollection& queryGeometry,
const float bearing,
const double tileSize,
@@ -52,7 +53,7 @@ class FeatureIndex {
private:
void addFeature(
- std::unordered_map<std::string, std::vector<std::string>>& result,
+ std::unordered_map<std::string, std::vector<Feature>>& result,
const IndexedSubfeature &indexedFeature,
const GeometryCollection& queryGeometry,
const optional<std::vector<std::string>>& filterLayerIDs,
diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp
index 38198d42ec..2a0246b654 100644
--- a/src/mbgl/map/map.cpp
+++ b/src/mbgl/map/map.cpp
@@ -722,14 +722,14 @@ std::vector<TileCoordinate> pointsToCoordinates(const std::vector<ScreenCoordina
return queryGeometry;
}
-std::vector<std::string> Map::queryRenderedFeatures(const ScreenCoordinate& point, const optional<std::vector<std::string>>& layerIDs) {
+std::vector<Feature> Map::queryRenderedFeatures(const ScreenCoordinate& point, const optional<std::vector<std::string>>& layerIDs) {
if (!impl->style) return {};
auto queryGeometry = pointsToCoordinates({ point }, impl->transform.getState());
return impl->style->queryRenderedFeatures(queryGeometry, impl->transform.getZoom(), impl->transform.getAngle(), layerIDs);
}
-std::vector<std::string> Map::queryRenderedFeatures(const std::array<ScreenCoordinate, 2>& box, const optional<std::vector<std::string>>& layerIDs) {
+std::vector<Feature> Map::queryRenderedFeatures(const std::array<ScreenCoordinate, 2>& box, const optional<std::vector<std::string>>& layerIDs) {
if (!impl->style) return {};
std::vector<ScreenCoordinate> queryPoints {
diff --git a/src/mbgl/source/source.cpp b/src/mbgl/source/source.cpp
index 18de7bc093..78bffbb9b3 100644
--- a/src/mbgl/source/source.cpp
+++ b/src/mbgl/source/source.cpp
@@ -498,13 +498,13 @@ struct TileQuery {
double scale;
};
-std::unordered_map<std::string, std::vector<std::string>> Source::queryRenderedFeatures(
+std::unordered_map<std::string, std::vector<Feature>> Source::queryRenderedFeatures(
const std::vector<TileCoordinate>& queryGeometry,
const double zoom,
const double bearing,
const optional<std::vector<std::string>>& layerIDs) {
- std::unordered_map<std::string, std::vector<std::string>> result;
+ std::unordered_map<std::string, std::vector<Feature>> result;
double minX = std::numeric_limits<double>::infinity();
double minY = std::numeric_limits<double>::infinity();
diff --git a/src/mbgl/source/source.hpp b/src/mbgl/source/source.hpp
index a4b6961245..cc579e11e7 100644
--- a/src/mbgl/source/source.hpp
+++ b/src/mbgl/source/source.hpp
@@ -7,6 +7,7 @@
#include <mbgl/util/mat4.hpp>
#include <mbgl/util/rapidjson.hpp>
+#include <mbgl/util/feature.hpp>
#include <forward_list>
#include <vector>
@@ -72,7 +73,7 @@ public:
std::forward_list<Tile *> getLoadedTiles() const;
const std::vector<Tile*>& getTiles() const;
- std::unordered_map<std::string, std::vector<std::string>> queryRenderedFeatures(
+ std::unordered_map<std::string, std::vector<Feature>> queryRenderedFeatures(
const std::vector<TileCoordinate>& queryGeometry,
const double zoom,
const double bearing,
diff --git a/src/mbgl/style/filter.hpp b/src/mbgl/style/filter.hpp
index 85878543f8..0a1dcbd17a 100644
--- a/src/mbgl/style/filter.hpp
+++ b/src/mbgl/style/filter.hpp
@@ -1,7 +1,7 @@
#pragma once
#include <mbgl/util/variant.hpp>
-#include <mbgl/util/value.hpp>
+#include <mbgl/util/feature.hpp>
#include <string>
#include <vector>
diff --git a/src/mbgl/style/filter_evaluator.hpp b/src/mbgl/style/filter_evaluator.hpp
index 27402ac211..0f3ee2a424 100644
--- a/src/mbgl/style/filter_evaluator.hpp
+++ b/src/mbgl/style/filter_evaluator.hpp
@@ -121,6 +121,16 @@ private:
!std::is_arithmetic<T1>::value || std::is_same<T1, bool>::value, bool> {
return false;
}
+
+ bool operator()(const std::vector<Value>&,
+ const std::vector<Value>&) const {
+ return false;
+ }
+
+ bool operator()(const std::unordered_map<std::string, Value>&,
+ const std::unordered_map<std::string, Value>&) const {
+ return false;
+ }
};
template <class Op>
diff --git a/src/mbgl/style/style.cpp b/src/mbgl/style/style.cpp
index 4d515b4e60..fc0f1de9c8 100644
--- a/src/mbgl/style/style.cpp
+++ b/src/mbgl/style/style.cpp
@@ -314,18 +314,17 @@ RenderData Style::getRenderData() const {
return result;
}
-std::vector<std::string> Style::queryRenderedFeatures(
+std::vector<Feature> Style::queryRenderedFeatures(
const std::vector<TileCoordinate>& queryGeometry,
const double zoom,
const double bearing,
const optional<std::vector<std::string>>& layerIDs) {
- std::vector<std::unordered_map<std::string, std::vector<std::string>>> sourceResults;
+ std::vector<std::unordered_map<std::string, std::vector<Feature>>> sourceResults;
for (const auto& source : sources) {
sourceResults.emplace_back(source->queryRenderedFeatures(queryGeometry, zoom, bearing, layerIDs));
}
-
- std::vector<std::string> features;
+ std::vector<Feature> features;
auto featuresInserter = std::back_inserter(features);
// Combine all results based on the style layer order.
diff --git a/src/mbgl/style/style.hpp b/src/mbgl/style/style.hpp
index 5dac4d4790..bfeebc28d5 100644
--- a/src/mbgl/style/style.hpp
+++ b/src/mbgl/style/style.hpp
@@ -13,6 +13,7 @@
#include <mbgl/util/chrono.hpp>
#include <mbgl/util/worker.hpp>
#include <mbgl/util/optional.hpp>
+#include <mbgl/util/feature.hpp>
#include <cstdint>
#include <string>
@@ -108,7 +109,7 @@ public:
RenderData getRenderData() const;
- std::vector<std::string> queryRenderedFeatures(
+ std::vector<Feature> queryRenderedFeatures(
const std::vector<TileCoordinate>& queryGeometry,
const double zoom,
const double bearing,
diff --git a/src/mbgl/tile/geometry_tile.hpp b/src/mbgl/tile/geometry_tile.hpp
index 57d8eab1cc..0bcb92b47b 100644
--- a/src/mbgl/tile/geometry_tile.hpp
+++ b/src/mbgl/tile/geometry_tile.hpp
@@ -1,7 +1,7 @@
#ifndef MBGL_MAP_GEOMETRY_TILE
#define MBGL_MAP_GEOMETRY_TILE
-#include <mbgl/util/value.hpp>
+#include <mbgl/util/feature.hpp>
#include <mbgl/util/chrono.hpp>
#include <mbgl/util/ptr.hpp>
#include <mbgl/util/vec.hpp>
@@ -39,8 +39,8 @@ public:
virtual ~GeometryTileFeature() = default;
virtual FeatureType getType() const = 0;
virtual optional<Value> getValue(const std::string& key) const = 0;
- virtual std::unordered_map<std::string,Value> getProperties() const { return std::unordered_map<std::string,Value>{}; };
- virtual uint64_t getID() const { return 0; }
+ virtual Feature::property_map getProperties() const { return Feature::property_map(); }
+ virtual optional<uint64_t> getID() const { return {}; }
virtual GeometryCollection getGeometries() const = 0;
virtual uint32_t getExtent() const { return defaultExtent; }
};
diff --git a/src/mbgl/tile/tile_data.cpp b/src/mbgl/tile/tile_data.cpp
index cb12e301f2..49a426b466 100644
--- a/src/mbgl/tile/tile_data.cpp
+++ b/src/mbgl/tile/tile_data.cpp
@@ -30,7 +30,7 @@ void TileData::dumpDebugLogs() const {
}
void TileData::queryRenderedFeatures(
- std::unordered_map<std::string, std::vector<std::string>>&,
+ std::unordered_map<std::string, std::vector<Feature>>&,
const GeometryCollection&,
const double,
const double,
diff --git a/src/mbgl/tile/tile_data.hpp b/src/mbgl/tile/tile_data.hpp
index 26c0032e35..338f246da0 100644
--- a/src/mbgl/tile/tile_data.hpp
+++ b/src/mbgl/tile/tile_data.hpp
@@ -4,6 +4,7 @@
#include <mbgl/util/noncopyable.hpp>
#include <mbgl/util/chrono.hpp>
#include <mbgl/util/optional.hpp>
+#include <mbgl/util/feature.hpp>
#include <mbgl/map/tile_id.hpp>
#include <mbgl/renderer/bucket.hpp>
#include <mbgl/text/placement_config.hpp>
@@ -85,7 +86,7 @@ public:
virtual void redoPlacement(const std::function<void()>&) {}
virtual void queryRenderedFeatures(
- std::unordered_map<std::string, std::vector<std::string>>& result,
+ std::unordered_map<std::string, std::vector<Feature>>& result,
const GeometryCollection& queryGeometry,
const double bearing,
const double tileSize,
diff --git a/src/mbgl/tile/vector_tile.cpp b/src/mbgl/tile/vector_tile.cpp
index af30fa9986..aedb703898 100644
--- a/src/mbgl/tile/vector_tile.cpp
+++ b/src/mbgl/tile/vector_tile.cpp
@@ -102,7 +102,7 @@ std::unordered_map<std::string,Value> VectorTileFeature::getProperties() const {
return properties;
}
-uint64_t VectorTileFeature::getID() const {
+optional<uint64_t> VectorTileFeature::getID() const {
return id;
}
diff --git a/src/mbgl/tile/vector_tile.hpp b/src/mbgl/tile/vector_tile.hpp
index 441d6827ac..153d7dcef4 100644
--- a/src/mbgl/tile/vector_tile.hpp
+++ b/src/mbgl/tile/vector_tile.hpp
@@ -23,13 +23,13 @@ public:
FeatureType getType() const override { return type; }
optional<Value> getValue(const std::string&) const override;
std::unordered_map<std::string,Value> getProperties() const override;
- uint64_t getID() const override;
+ optional<uint64_t> getID() const override;
GeometryCollection getGeometries() const override;
uint32_t getExtent() const override;
private:
const VectorTileLayer& layer;
- uint64_t id = 0;
+ optional<uint64_t> id;
FeatureType type = FeatureType::Unknown;
packed_iter_type tags_iter;
packed_iter_type geometry_iter;
diff --git a/src/mbgl/tile/vector_tile_data.cpp b/src/mbgl/tile/vector_tile_data.cpp
index c71b2b733d..1840dca9fe 100644
--- a/src/mbgl/tile/vector_tile_data.cpp
+++ b/src/mbgl/tile/vector_tile_data.cpp
@@ -191,7 +191,7 @@ void VectorTileData::redoPlacement(const std::function<void()>& callback) {
}
void VectorTileData::queryRenderedFeatures(
- std::unordered_map<std::string, std::vector<std::string>>& result,
+ std::unordered_map<std::string, std::vector<Feature>>& result,
const GeometryCollection& queryGeometry,
const double bearing,
const double tileSize,
diff --git a/src/mbgl/tile/vector_tile_data.hpp b/src/mbgl/tile/vector_tile_data.hpp
index 303fe343fe..52cef71d1b 100644
--- a/src/mbgl/tile/vector_tile_data.hpp
+++ b/src/mbgl/tile/vector_tile_data.hpp
@@ -4,6 +4,7 @@
#include <mbgl/tile/tile_data.hpp>
#include <mbgl/tile/tile_worker.hpp>
#include <mbgl/text/placement_config.hpp>
+#include <mbgl/util/feature.hpp>
#include <atomic>
#include <memory>
@@ -37,7 +38,7 @@ public:
bool hasData() const override;
void queryRenderedFeatures(
- std::unordered_map<std::string, std::vector<std::string>>& result,
+ std::unordered_map<std::string, std::vector<Feature>>& result,
const GeometryCollection& queryGeometry,
const double bearing,
const double tileSize,
diff --git a/src/mbgl/util/value.hpp b/src/mbgl/util/value.hpp
deleted file mode 100644
index 78507c7f25..0000000000
--- a/src/mbgl/util/value.hpp
+++ /dev/null
@@ -1,9 +0,0 @@
-#pragma once
-
-#include <mbgl/util/variant.hpp>
-
-namespace mbgl {
-
-typedef variant<bool, int64_t, uint64_t, double, std::string> Value;
-
-} // namespace mbgl