Fix bbox query for box overlap
authorMathieu Baudier <mbaudier@argeo.org>
Fri, 3 Nov 2023 07:00:51 +0000 (08:00 +0100)
committerMathieu Baudier <mbaudier@argeo.org>
Fri, 3 Nov 2023 07:00:51 +0000 (08:00 +0100)
org.argeo.app.geo/src/org/argeo/app/geo/http/WfsHttpHandler.java

index 59cb97a2d4eb02331f423b3b7ef302501c6f64d7..c12a77b9da24cc0226629d270188b5ee816d0194 100644 (file)
@@ -216,11 +216,14 @@ public class WfsHttpHandler implements HttpHandler {
 
                        if (bbox != null) {
                                search.getWhere().any((or) -> {
+                                       // box overlap, see https://stackoverflow.com/questions/20925818/algorithm-to-check-if-two-boxes-overlap
+                                       // isOverlapping = (x1min < x2max AND x2min < x1max AND y1min < y2max AND y2min < y1max)
+                                       // x1 = entity, x2 = bbox
                                        or.all((and) -> {
-                                               and.gte(EntityName.minLat, bbox.getMinX());
-                                               and.gte(EntityName.minLon, bbox.getMinY());
-                                               and.lte(EntityName.maxLat, bbox.getMaxX());
-                                               and.lte(EntityName.maxLon, bbox.getMaxY());
+                                               and.lte(EntityName.minLat, bbox.getMaxX());
+                                               and.gte(EntityName.maxLat, bbox.getMinX());
+                                               and.lte(EntityName.minLon, bbox.getMaxY());
+                                               and.gte(EntityName.maxLon, bbox.getMinY());
                                        });
                                        or.all((and) -> {
                                                and.gte(WGS84PosName.lat, bbox.getMinX());