1 #pragma once 2 3 #include <mapbox/geometry/geometry.hpp> 4 #include <mapbox/geometry/point_arithmetic.hpp> 5 #include <mapbox/geometry/for_each_point.hpp> 6 7 namespace mbgl { 8 9 enum class FeatureType : uint8_t { 10 Unknown = 0, 11 Point = 1, 12 LineString = 2, 13 Polygon = 3 14 }; 15 16 template <class T> 17 using Point = mapbox::geometry::point<T>; 18 19 template <class T> 20 using LineString = mapbox::geometry::line_string<T>; 21 22 template <class T> 23 using Polygon = mapbox::geometry::polygon<T>; 24 25 template <class T> 26 using MultiPoint = mapbox::geometry::multi_point<T>; 27 28 template <class T> 29 using MultiLineString = mapbox::geometry::multi_line_string<T>; 30 31 template <class T> 32 using MultiPolygon = mapbox::geometry::multi_polygon<T>; 33 34 template <class T> 35 using LinearRing = mapbox::geometry::linear_ring<T>; 36 37 template <class T> 38 using Geometry = mapbox::geometry::geometry<T>; 39 40 template <class S, class T> convertPoint(const Point<T> & p)41Point<S> convertPoint(const Point<T>& p) { 42 return Point<S>(p.x, p.y); 43 } 44 45 struct ToFeatureType { 46 template <class T> operator ()mbgl::ToFeatureType47 FeatureType operator()(const Point<T> &) const { return FeatureType::Point; } 48 template <class T> operator ()mbgl::ToFeatureType49 FeatureType operator()(const MultiPoint<T> &) const { return FeatureType::Point; } 50 template <class T> operator ()mbgl::ToFeatureType51 FeatureType operator()(const LineString<T> &) const { return FeatureType::LineString; } 52 template <class T> operator ()mbgl::ToFeatureType53 FeatureType operator()(const MultiLineString<T> &) const { return FeatureType::LineString; } 54 template <class T> operator ()mbgl::ToFeatureType55 FeatureType operator()(const Polygon<T> &) const { return FeatureType::Polygon; } 56 template <class T> operator ()mbgl::ToFeatureType57 FeatureType operator()(const MultiPolygon<T> &) const { return FeatureType::Polygon; } 58 template <class T> operator ()mbgl::ToFeatureType59 FeatureType operator()(const mapbox::geometry::geometry_collection<T> &) const { return FeatureType::Unknown; } 60 }; 61 62 template <class T, typename F> forEachPoint(const Geometry<T> & g,F f)63auto forEachPoint(const Geometry<T>& g, F f) { 64 mapbox::geometry::for_each_point(g, f); 65 } 66 67 } // namespace mbgl 68