From f94b1436d7a28c8e28d010b2cb657ab7c064e353 Mon Sep 17 00:00:00 2001
From: 826220679@qq.com <826220679@qq.com>
Date: 星期日, 28 十二月 2025 20:36:38 +0800
Subject: [PATCH] 修改了导航预览

---
 src/dikuai/daohangyulan.java |  117 +++++++++++++++++++---------------------------------------
 1 files changed, 38 insertions(+), 79 deletions(-)

diff --git a/src/dikuai/daohangyulan.java b/src/dikuai/daohangyulan.java
index 8d3bfaf..bf29464 100644
--- a/src/dikuai/daohangyulan.java
+++ b/src/dikuai/daohangyulan.java
@@ -9,8 +9,8 @@
 import java.util.ArrayList;
 import zhuye.Shouye;
 import zhuye.MapRenderer;
-import gecaoji.Device;
 import gecaoji.Gecaoji;
+import gecaoji.Device;
 import gecaoji.lujingdraw;
 import publicway.buttonset;
 
@@ -90,73 +90,9 @@
             return;
         }
 
-        // 2. 灏濊瘯閲嶆柊鐢熸垚瀹屾暣璺緞娈碉紙鍖呭惈鍥磋竟鍜屼綔涓氳矾寰勶級
-        // 杩欐牱鍙互纭繚瀵艰埅棰勮鏃讹紝鍓茶崏鏈哄厛娌跨潃鍐呯缉杈圭晫璧颁竴鍦堬紝鍐嶈蛋鍓茶崏璺緞
-        List<lujing.Lunjingguihua.PathSegment> segments = null;
-        String boundaryCoords = dikuai.getBoundaryCoordinates();
-        String mowingWidth = dikuai.getMowingBladeWidth(); // 娉ㄦ剰锛氳繖閲屽簲璇ョ敤鍓茶崏瀹藉害锛岃�屼笉鏄壊鍒�瀹藉害锛岄�氬父鏄竴鏍风殑
-        // 濡傛灉娌℃湁鍓茶崏瀹藉害锛屽皾璇曚粠Device鑾峰彇
-        if (mowingWidth == null || mowingWidth.trim().isEmpty() || "-1".equals(mowingWidth.trim())) {
-             Device device = Device.getActiveDevice();
-             if (device != null) {
-                 mowingWidth = device.getMowingWidth();
-             }
-        }
-        // 濡傛灉杩樻槸娌℃湁锛屼娇鐢ㄩ粯璁ゅ��
-        if (mowingWidth == null || mowingWidth.trim().isEmpty() || "-1".equals(mowingWidth.trim())) {
-            mowingWidth = "0.34";
-        }
-        
-        String safetyDistance = dikuai.getMowingSafetyDistance();
-        String obstaclesCoords = dikuai.getObstacleCoordinates();
-        String mowingPattern = dikuai.getMowingPattern();
-        
-        if (boundaryCoords != null && !boundaryCoords.trim().isEmpty() && !"-1".equals(boundaryCoords.trim())) {
-            try {
-                // 瑙f瀽鍓茶崏妯″紡
-                String mode = "parallel"; // 榛樿骞宠妯″紡
-                if (mowingPattern != null && !mowingPattern.trim().isEmpty()) {
-                    String pattern = mowingPattern.trim().toLowerCase();
-                    if ("1".equals(pattern) || "spiral".equals(pattern) || "铻烘棆寮�".equals(pattern) || "铻烘棆".equals(pattern)) {
-                        mode = "spiral";
-                    } else if ("parallel".equals(pattern) || "骞宠绾�".equals(pattern) || "骞宠".equals(pattern)) {
-                        mode = "parallel";
-                    }
-                }
-                
-                // 璋冪敤璺緞瑙勫垝鐢熸垚瀹屾暣璺緞娈�
-                segments = lujing.Lunjingguihua.generatePathSegments(
-                    boundaryCoords, 
-                    obstaclesCoords != null ? obstaclesCoords : "", 
-                    mowingWidth, 
-                    safetyDistance, 
-                    mode
-                );
-            } catch (Exception e) {
-                // 濡傛灉閲嶆柊鐢熸垚澶辫触锛宻egments 涓� null
-                System.err.println("瀵艰埅棰勮閲嶆柊鐢熸垚璺緞澶辫触: " + e.getMessage());
-            }
-        }
-        
         // 3. 鏋勫缓鏈�缁堝鑸矾寰勭偣鍒楄〃
-        pathPoints = new ArrayList<>();
-        if (segments != null && !segments.isEmpty()) {
-            // 濡傛灉鎴愬姛鐢熸垚浜嗚矾寰勬锛屼娇鐢ㄨ矾寰勬鏋勫缓鐐瑰垪琛�
-            // 杩欐牱鍖呭惈浜嗗洿杈硅矾寰勫拰浣滀笟璺緞锛屼互鍙婂畠浠箣闂寸殑杩炴帴
-            lujing.Lunjingguihua.PathSegment firstSeg = segments.get(0);
-            pathPoints.add(new Point2D.Double(firstSeg.start.x, firstSeg.start.y));
-            
-            for (lujing.Lunjingguihua.PathSegment seg : segments) {
-                // 娣诲姞缁堢偣锛堣捣鐐瑰凡缁忓湪涓婁竴娆″惊鐜垨鍒濆鍖栨椂娣诲姞浜嗭級
-                // 娉ㄦ剰锛氳繖閲屽亣璁捐矾寰勬鏄繛缁殑锛屾垨鑰呮垜浠彧鍏冲績绔偣
-                // 濡傛灉娈典箣闂翠笉杩炵画锛堟湁绌鸿蛋锛夛紝generatePathSegments 搴旇宸茬粡鐢熸垚浜嗚繛鎺ユ锛坕sMowing=false锛�
-                pathPoints.add(new Point2D.Double(seg.end.x, seg.end.y));
-            }
-        } else {
-            // 濡傛灉鐢熸垚澶辫触锛屽洖閫�鍒颁娇鐢ㄥ師濮嬭В鏋愮殑璺緞鐐�
-            // 杩欓�氬父鍙寘鍚綔涓氳矾寰勶紝鍙兘娌℃湁鍥磋竟
-            pathPoints = rawPathPoints;
-        }
+        // 鐩存帴浣跨敤瑙f瀽鍑烘潵鐨勮矾寰勭偣
+        pathPoints = rawPathPoints;
         
         if (pathPoints == null || pathPoints.size() < 2) {
              JOptionPane.showMessageDialog(null, "鏃犳硶鏋勫缓鏈夋晥鐨勫鑸矾寰�", "閿欒", JOptionPane.ERROR_MESSAGE);
@@ -166,6 +102,11 @@
         this.currentDikuai = dikuai;
         this.currentPathIndex = 0;
         this.currentSpeed = DEFAULT_SPEED;
+        // 灏嗗綋鍓嶉�熷害(绫�/绉�)杞崲涓簁m/h鍐欏叆璁惧yaw灞炴��
+        try {
+            double kmh = this.currentSpeed * 3.6;
+            Device.getActiveDevice().setYaw(String.valueOf(kmh));
+        } catch (Exception ignore) { }
         this.navigationTrack.clear();
         
         // 鑾峰彇棣栭〉鍜屽湴鍥炬覆鏌撳櫒
@@ -514,9 +455,9 @@
     
     /**
      * 璁$畻涓ょ偣涔嬮棿鐨勬柟鍚戣锛堝害锛�
-     * 鍥炬爣榛樿鏈濅笂锛屽悜鍙虫棆杞�90搴﹁溅澶存湞鍙�
-     * atan2杩斿洖鐨勮搴︼細鍚戝彸鏄�0搴︼紝鍚戜笂鏄�90搴�
-     * 闇�瑕佽浆鎹负鍥炬爣鏃嬭浆瑙掑害锛氬悜鍙抽渶瑕�90搴︼紝鍚戜笂闇�瑕�0搴�
+     * 杞﹁締鍥炬爣鐨勮溅澶撮粯璁ゆ槸鍦ㄥ睆骞曟涓嬫柟锛�270搴︼級
+     * atan2杩斿洖鐨勮搴︼細鍚戝彸鏄�0搴︼紝鍚戜笂鏄�90搴︼紝鍚戝乏鏄�180搴︼紝鍚戜笅鏄�-90搴︼紙270搴︼級
+     * 闇�瑕佽浆鎹负鍥炬爣鏃嬭浆瑙掑害锛屼娇杞﹀ご鏈濆悜琛岄┒鏂瑰悜
      */
     private double calculateHeading(Point2D.Double from, Point2D.Double to) {
         double dx = to.x - from.x;
@@ -529,13 +470,13 @@
             atan2Angle += 360;
         }
         
-        // 鍥炬爣榛樿鏈濅笂锛�0搴︼級锛屽悜鍙虫棆杞�90搴﹁溅澶存湞鍙�
-        // 鎵�浠ワ細杩愬姩鏂瑰悜鍚戝彸锛�0搴︼級鈫� 闇�瑕佹棆杞�90搴�
-        //      杩愬姩鏂瑰悜鍚戜笂锛�90搴︼級鈫� 闇�瑕佹棆杞�0搴�
-        //      杩愬姩鏂瑰悜鍚戝乏锛�180搴︼級鈫� 闇�瑕佹棆杞�270搴�
-        //      杩愬姩鏂瑰悜鍚戜笅锛�270搴︼級鈫� 闇�瑕佹棆杞�180搴�
-        // 鍏紡锛歨eading = (90 - atan2Angle + 360) % 360
-        double heading = (90.0 - atan2Angle + 360.0) % 360.0;
+        // 鍥炬爣榛樿鏈濅笅锛�270搴︼級锛岄渶瑕佽绠楁棆杞搴︿娇杞﹀ご鏈濆悜琛岄┒鏂瑰悜
+        // 濡傛灉杩愬姩鏂瑰悜鍚戜笂锛�90搴︼級鈫� 闇�瑕佹棆杞�180搴︼紙270 - 90 = 180锛�
+        // 濡傛灉杩愬姩鏂瑰悜鍚戝彸锛�0搴︼級鈫� 闇�瑕佹棆杞�270搴︼紙270 - 0 = 270锛�
+        // 濡傛灉杩愬姩鏂瑰悜鍚戝乏锛�180搴︼級鈫� 闇�瑕佹棆杞�90搴︼紙270 - 180 = 90锛�
+        // 濡傛灉杩愬姩鏂瑰悜鍚戜笅锛�270搴︼級鈫� 闇�瑕佹棆杞�0搴︼紙270 - 270 = 0锛�
+        // 鍏紡锛歨eading = (270 - atan2Angle + 360) % 360
+        double heading = (270.0 - atan2Angle + 360.0) % 360.0;
         
         return heading;
     }
@@ -554,6 +495,11 @@
      */
     private void speedUp() {
         currentSpeed += SPEED_MULTIPLIER;
+        // 鍚屾鍒拌澶噛aw灞炴�э紙km/h锛�
+        try {
+            double kmh = currentSpeed * 3.6;
+            Device.getActiveDevice().setYaw(String.valueOf(kmh));
+        } catch (Exception ignore) { }
         updateSpeedDisplay();
     }
     
@@ -567,6 +513,11 @@
                 currentSpeed = 0.1;
             }
         }
+        // 鍚屾鍒拌澶噛aw灞炴�э紙km/h锛�
+        try {
+            double kmh = currentSpeed * 3.6;
+            Device.getActiveDevice().setYaw(String.valueOf(kmh));
+        } catch (Exception ignore) { }
         updateSpeedDisplay();
     }
     
@@ -574,8 +525,11 @@
      * 鏇存柊閫熷害鏄剧ず
      */
     private void updateSpeedDisplay() {
-        // 鍙互鍦ㄥ湴鍥句笂鏄剧ず褰撳墠閫熷害
-        // 杩欓噷鏆傛椂涓嶅疄鐜帮紝濡傛灉闇�瑕佸彲浠ュ湪MapRenderer涓坊鍔犻�熷害鏄剧ず
+        // 瀵艰埅棰勮涓嬪湪鍓茶崏鏈哄浘鏍囦笂鏂瑰疄鏃舵樉绀洪�熷害锛堝浐瀹氬儚绱犻棿璺濓級
+        if (mapRenderer != null) {
+            mapRenderer.setNavigationPreviewSpeed(currentSpeed);
+            mapRenderer.repaint();
+        }
     }
     
     /**
@@ -607,6 +561,11 @@
             mapRenderer.setNavigationPreviewSpeed(0.0); // 娓呴櫎閫熷害鏄剧ず
             mapRenderer.repaint();
         }
+
+        // 閫�鍑烘椂灏嗚澶噛aw灞炴�ч噸缃负0
+        try {
+            Device.getActiveDevice().setYaw("0");
+        } catch (Exception ignore) { }
         
         // 鎭㈠鍦板潡绠$悊椤甸潰
         // 鍦ㄦ竻绌篶urrentDikuai涔嬪墠淇濆瓨鍦板潡缂栧彿锛屼娇鐢╢inal鍙橀噺浠ヤ究鍦╨ambda涓娇鐢�

--
Gitblit v1.10.0