summaryrefslogtreecommitdiff
path: root/include/mbgl/util/geometry.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/mbgl/util/geometry.hpp')
-rw-r--r--include/mbgl/util/geometry.hpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/include/mbgl/util/geometry.hpp b/include/mbgl/util/geometry.hpp
index a28c59a47d..7057c9bb3d 100644
--- a/include/mbgl/util/geometry.hpp
+++ b/include/mbgl/util/geometry.hpp
@@ -3,6 +3,8 @@
#include <mapbox/geometry/geometry.hpp>
#include <mapbox/geometry/point_arithmetic.hpp>
#include <mapbox/geometry/for_each_point.hpp>
+#include <mbgl/util/feature.hpp>
+#include <mbgl/util/optional.hpp>
namespace mbgl {
@@ -37,6 +39,41 @@ using LinearRing = mapbox::geometry::linear_ring<T>;
template <class T>
using Geometry = mapbox::geometry::geometry<T>;
+
+// Normalized vector tile coordinates.
+// Each geometry coordinate represents a point in a bidimensional space,
+// varying from -V...0...+V, where V is the maximum extent applicable.
+using GeometryCoordinate = Point<int16_t>;
+
+class GeometryCoordinates : public std::vector<GeometryCoordinate> {
+public:
+ using coordinate_type = int16_t;
+
+ GeometryCoordinates() = default;
+ GeometryCoordinates(const std::vector<GeometryCoordinate>& v)
+ : std::vector<GeometryCoordinate>(v) {}
+ GeometryCoordinates(std::vector<GeometryCoordinate>&& v)
+ : std::vector<GeometryCoordinate>(std::move(v)) {}
+
+ using std::vector<GeometryCoordinate>::vector;
+};
+
+class GeometryCollection : public std::vector<GeometryCoordinates> {
+public:
+ using coordinate_type = int16_t;
+ using std::vector<GeometryCoordinates>::vector;
+};
+
+class GeometryTileFeature {
+public:
+ virtual ~GeometryTileFeature() = default;
+ virtual FeatureType getType() const = 0;
+ virtual optional<Value> getValue(const std::string& key) const = 0;
+ virtual PropertyMap getProperties() const { return PropertyMap(); }
+ virtual optional<FeatureIdentifier> getID() const { return {}; }
+ virtual GeometryCollection getGeometries() const = 0;
+};
+
template <class S, class T>
Point<S> convertPoint(const Point<T>& p) {
return Point<S>(p.x, p.y);