From 226b062ef301b61260efac126e1db373ace85b87 Mon Sep 17 00:00:00 2001
From: zhaowenyu <35589726@qq.com>
Date: Fri, 16 Jan 2026 09:01:43 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev

---
 ard-work/src/main/java/com/ard/work/component/websocket/handler/NoFlyDistanceManager.java |   32 ++++++++++++++++++++++++++++----
 1 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/ard-work/src/main/java/com/ard/work/component/websocket/handler/NoFlyDistanceManager.java b/ard-work/src/main/java/com/ard/work/component/websocket/handler/NoFlyDistanceManager.java
index 52a3a6e..6e89232 100644
--- a/ard-work/src/main/java/com/ard/work/component/websocket/handler/NoFlyDistanceManager.java
+++ b/ard-work/src/main/java/com/ard/work/component/websocket/handler/NoFlyDistanceManager.java
@@ -41,12 +41,16 @@
             ArdNoFlyBox box = zone.getArdNoFlyBox();
             if (box == null) continue;
 
-            // 包围盒快速排除
-            if (current.x < box.getMinx() || current.x > box.getMaxx() ||
-                    current.y < box.getMiny() || current.y > box.getMaxy()) {
+            // ⭐ 外扩 50 米
+            ArdNoFlyBox expanded = expandBoxByMeter(box, 50);
+
+            // ⭐ 包围盒快速排除必须使用 expanded,而不是 box
+            if (current.x < expanded.getMinx() || current.x > expanded.getMaxx() ||
+                    current.y < expanded.getMiny() || current.y > expanded.getMaxy()) {
                 continue;
             }
 
+            // 计算 polygon 距离
             List<Vertex> polygon = zone.getVertices();
             if (polygon == null || polygon.size() < 3) continue;
 
@@ -63,9 +67,26 @@
         return NoFlyDistanceDTO.builder()
                 .boxSn(boxSn)
                 .zoneName(nearestZone.getName())
-                .distance(minDistance)
+                .distance(minDistance)              // 米
                 .inNoFlyZone(minDistance == 0)
                 .build();
+    }
+
+    // 外扩包围盒多少米
+    private ArdNoFlyBox expandBoxByMeter(ArdNoFlyBox box, double meter) {
+
+        // 计算经纬度偏移
+        double latShift = meter / 111320.0;  // 纬度方向
+        double lngShift = meter / (111320.0 * Math.cos(Math.toRadians(
+                (box.getMiny() + box.getMaxy()) / 2
+        ))); // 经度方向与纬度相关
+
+        return new ArdNoFlyBox(
+                box.getMinx() - lngShift,
+                box.getMiny() - latShift,
+                box.getMaxx() + lngShift,
+                box.getMaxy() + latShift
+        );
     }
 
 
@@ -73,4 +94,7 @@
     protected String getMessageType() {
         return "noFlyZoneDistance";
     }
+
+
+
 }

--
Gitblit v1.9.3