diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2016-10-07 11:49:22 -0700 |
---|---|---|
committer | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2016-10-11 10:54:58 +0300 |
commit | 38e78e25dfa3bc5b69a29029d4e065e72f462c37 (patch) | |
tree | 45eb6f881081ab585bb6665b3d49f099fbcb6b43 /src/mbgl/util | |
parent | 61d8ecefda3a01d0860746af98d632b73c526d98 (diff) | |
download | qtlocation-mapboxgl-38e78e25dfa3bc5b69a29029d4e065e72f462c37.tar.gz |
[core] No need for feature querying to support multipolygons
Diffstat (limited to 'src/mbgl/util')
-rw-r--r-- | src/mbgl/util/intersection_tests.cpp | 49 | ||||
-rw-r--r-- | src/mbgl/util/intersection_tests.hpp | 6 |
2 files changed, 24 insertions, 31 deletions
diff --git a/src/mbgl/util/intersection_tests.cpp b/src/mbgl/util/intersection_tests.cpp index 74b3bec388..a0feb8ec37 100644 --- a/src/mbgl/util/intersection_tests.cpp +++ b/src/mbgl/util/intersection_tests.cpp @@ -90,54 +90,47 @@ bool lineIntersectsBufferedLine(const GeometryCoordinates& lineA, const Geometry return false; } -bool multiPolygonIntersectsBufferedMultiPoint(const GeometryCollection& multiPolygon, const GeometryCollection& rings, float radius) { - for (auto& polygon : multiPolygon) { - for (auto& ring : rings) { - for (auto& point : ring) { - if (polygonContainsPoint(polygon, point)) return true; - if (pointIntersectsBufferedLine(point, polygon, radius)) return true; - } +bool polygonIntersectsBufferedMultiPoint(const GeometryCoordinates& polygon, const GeometryCollection& rings, float radius) { + for (auto& ring : rings) { + for (auto& point : ring) { + if (polygonContainsPoint(polygon, point)) return true; + if (pointIntersectsBufferedLine(point, polygon, radius)) return true; } } return false; } -bool multiPolygonIntersectsBufferedMultiLine(const GeometryCollection& multiPolygon, const GeometryCollection& multiLine, float radius) { +bool polygonIntersectsBufferedMultiLine(const GeometryCoordinates& polygon, const GeometryCollection& multiLine, float radius) { for (auto& line : multiLine) { - for (auto& polygon : multiPolygon) { - - if (polygon.size() >= 3) { - for (auto& p : line) { - if (polygonContainsPoint(polygon, p)) return true; - } + if (polygon.size() >= 3) { + for (auto& p : line) { + if (polygonContainsPoint(polygon, p)) return true; } - - if (lineIntersectsBufferedLine(polygon, line, radius)) return true; } + + if (lineIntersectsBufferedLine(polygon, line, radius)) return true; } return false; } -bool multiPolygonIntersectsMultiPolygon(const GeometryCollection& multiPolygonA, const GeometryCollection& multiPolygonB) { - if (multiPolygonA.size() == 1 && multiPolygonA.at(0).size() == 1) { - return multiPolygonContainsPoint(multiPolygonB, multiPolygonA.at(0).at(0)); +bool polygonIntersectsMultiPolygon(const GeometryCoordinates& polygon, const GeometryCollection& multiPolygon) { + if (polygon.size() == 1) { + return multiPolygonContainsPoint(multiPolygon, polygon.at(0)); } - for (auto& ring : multiPolygonB) { + for (auto& ring : multiPolygon) { for (auto& p : ring) { - if (multiPolygonContainsPoint(multiPolygonA, p)) return true; + if (polygonContainsPoint(polygon, p)) return true; } } - for (auto& polygon : multiPolygonA) { - for (auto& p : polygon) { - if (multiPolygonContainsPoint(multiPolygonB, p)) return true; - } + for (auto& p : polygon) { + if (multiPolygonContainsPoint(multiPolygon, p)) return true; + } - for (auto& polygonB : multiPolygonB) { - if (lineIntersectsLine(polygon, polygonB)) return true; - } + for (auto& polygonB : multiPolygon) { + if (lineIntersectsLine(polygon, polygonB)) return true; } return false; diff --git a/src/mbgl/util/intersection_tests.hpp b/src/mbgl/util/intersection_tests.hpp index be89d14ed6..6adb3b5fdf 100644 --- a/src/mbgl/util/intersection_tests.hpp +++ b/src/mbgl/util/intersection_tests.hpp @@ -5,9 +5,9 @@ namespace mbgl { namespace util { -bool multiPolygonIntersectsBufferedMultiPoint(const GeometryCollection&, const GeometryCollection&, float radius); -bool multiPolygonIntersectsBufferedMultiLine(const GeometryCollection&, const GeometryCollection&, float radius); -bool multiPolygonIntersectsMultiPolygon(const GeometryCollection&, const GeometryCollection&); +bool polygonIntersectsBufferedMultiPoint(const GeometryCoordinates&, const GeometryCollection&, float radius); +bool polygonIntersectsBufferedMultiLine(const GeometryCoordinates&, const GeometryCollection&, float radius); +bool polygonIntersectsMultiPolygon(const GeometryCoordinates&, const GeometryCollection&); } // namespace util } // namespace mbgl |