#pragma once #include #include #include namespace mbgl { enum class FeatureType : uint8_t { Unknown = 0, Point = 1, LineString = 2, Polygon = 3 }; template using Point = mapbox::geometry::point; template using LineString = mapbox::geometry::line_string; template using Polygon = mapbox::geometry::polygon; template using MultiPoint = mapbox::geometry::multi_point; template using MultiLineString = mapbox::geometry::multi_line_string; template using MultiPolygon = mapbox::geometry::multi_polygon; template using LinearRing = mapbox::geometry::linear_ring; template using Geometry = mapbox::geometry::geometry; template Point convertPoint(const Point& p) { return Point(p.x, p.y); } struct ToFeatureType { template FeatureType operator()(const Point &) const { return FeatureType::Point; } template FeatureType operator()(const MultiPoint &) const { return FeatureType::Point; } template FeatureType operator()(const LineString &) const { return FeatureType::LineString; } template FeatureType operator()(const MultiLineString &) const { return FeatureType::LineString; } template FeatureType operator()(const Polygon &) const { return FeatureType::Polygon; } template FeatureType operator()(const MultiPolygon &) const { return FeatureType::Polygon; } template FeatureType operator()(const mapbox::geometry::geometry_collection &) const { return FeatureType::Unknown; } }; template auto forEachPoint(const Geometry& g, F f) { mapbox::geometry::for_each_point(g, f); } } // namespace mbgl