diff options
author | Young Hahn <young@mapbox.com> | 2016-07-06 17:29:34 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-07-06 17:29:34 -0400 |
commit | 71a3b1d0db170cfc1786be88c3e7b286c50dece9 (patch) | |
tree | 1d51cc28946dc990f8f613795417cb76ea8c00df /src/mbgl/annotation/shape_annotation_impl.hpp | |
parent | 903d609b40b6d0f4873f7bb46d96f4a06d7b17d6 (diff) | |
download | qtlocation-mapboxgl-71a3b1d0db170cfc1786be88c3e7b286c50dece9.tar.gz |
[core] geometry@0.8.0 / geojsonvt@6.0.0 (#5514)
* [core] geometry.hpp 0.8.0
* geojsonvt @ 6.0.0
* Update platform deps, build scripts
* Perf optimizations/cleanup
* Rebase in geometry@080
* D.R.Y. etc
* Ensure fill annotation geometries have closed rings.
* Optimizations
* Update to geojsonvt @ 6.1.0 for clean handoff between geojson parsing and geojsonvt
* Apply close multi/poly geoms for line annotations as well
Diffstat (limited to 'src/mbgl/annotation/shape_annotation_impl.hpp')
-rw-r--r-- | src/mbgl/annotation/shape_annotation_impl.hpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/mbgl/annotation/shape_annotation_impl.hpp b/src/mbgl/annotation/shape_annotation_impl.hpp index 1b8fcd5777..800b4ec313 100644 --- a/src/mbgl/annotation/shape_annotation_impl.hpp +++ b/src/mbgl/annotation/shape_annotation_impl.hpp @@ -3,6 +3,7 @@ #include <mapbox/geojsonvt.hpp> #include <mbgl/annotation/annotation.hpp> +#include <mbgl/util/geometry.hpp> #include <string> #include <memory> @@ -32,4 +33,33 @@ public: std::unique_ptr<mapbox::geojsonvt::GeoJSONVT> shapeTiler; }; +struct CloseShapeAnnotation { + ShapeAnnotationGeometry operator()(const mbgl::LineString<double> &geom) const { + return geom; + } + ShapeAnnotationGeometry operator()(const mbgl::MultiLineString<double> &geom) const { + return geom; + } + ShapeAnnotationGeometry operator()(const mbgl::Polygon<double> &geom) const { + mbgl::Polygon<double> closed = geom; + for (auto &ring : closed) { + if (!ring.empty() && ring.front() != ring.back()) { + ring.emplace_back(ring.front()); + } + } + return closed; + } + ShapeAnnotationGeometry operator()(const mbgl::MultiPolygon<double> &geom) const { + mbgl::MultiPolygon<double> closed = geom; + for (auto &polygon : closed) { + for (auto &ring : polygon) { + if (!ring.empty() && ring.front() != ring.back()) { + ring.emplace_back(ring.front()); + } + } + } + return closed; + } +}; + } // namespace mbgl |