summaryrefslogtreecommitdiff
path: root/src/mbgl/geometry/feature_index.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/geometry/feature_index.cpp')
-rw-r--r--src/mbgl/geometry/feature_index.cpp52
1 files changed, 10 insertions, 42 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));
}
}