summaryrefslogtreecommitdiff
path: root/src/mbgl/util/intersection_tests.cpp
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2016-10-07 11:49:22 -0700
committerBruno de Oliveira Abinader <bruno@mapbox.com>2016-10-11 10:54:58 +0300
commit38e78e25dfa3bc5b69a29029d4e065e72f462c37 (patch)
tree45eb6f881081ab585bb6665b3d49f099fbcb6b43 /src/mbgl/util/intersection_tests.cpp
parent61d8ecefda3a01d0860746af98d632b73c526d98 (diff)
downloadqtlocation-mapboxgl-38e78e25dfa3bc5b69a29029d4e065e72f462c37.tar.gz
[core] No need for feature querying to support multipolygons
Diffstat (limited to 'src/mbgl/util/intersection_tests.cpp')
-rw-r--r--src/mbgl/util/intersection_tests.cpp49
1 files changed, 21 insertions, 28 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;