From b272034a1fdbfe32b355fc6c264a4c45df107190 Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期二, 23 十二月 2025 14:55:03 +0800
Subject: [PATCH] 优化了新增地块功能

---
 src/dikuai/Dikuanbianjipage.java |  113 +++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 74 insertions(+), 39 deletions(-)

diff --git a/src/dikuai/Dikuanbianjipage.java b/src/dikuai/Dikuanbianjipage.java
index bceb6c2..c49083d 100644
--- a/src/dikuai/Dikuanbianjipage.java
+++ b/src/dikuai/Dikuanbianjipage.java
@@ -1,20 +1,14 @@
 package dikuai;
-
 import javax.swing.*;
 import java.awt.*;
-import java.awt.event.*;
-import java.util.ArrayList;
-import java.util.List;
-
-import bianjie.bianjieguihua2;
+import bianjie.Bianjieyouhuatoxy;
 import publicway.Fuzhibutton;
-import zhuye.Coordinate;
 import zhuye.Shouye;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
 /**
- * 鍦板潡杈圭晫绠$悊椤甸潰
+ * 杈圭晫绠$悊椤甸潰
  * 鏄剧ず锛氬師濮嬭竟鐣屽潗鏍囷紙缁忕含搴︺�侀珮绋嬶級銆佸師濮嬭竟鐣孹Y锛堢浉瀵逛簬鍩哄噯绔欙級銆佷互鍙婂彲缂栬緫鐨勪紭鍖栧悗杈圭晫鍧愭爣
  */
 public class Dikuanbianjipage extends JDialog {
@@ -105,43 +99,34 @@
                 JOptionPane.showMessageDialog(this, "鏈壘鍒板湴鍧椾俊鎭紝鏃犳硶浼樺寲", "閿欒", JOptionPane.ERROR_MESSAGE);
                 return;
             }
-            String baseStation = dikuai.getBaseStationCoordinates();
-            if (baseStation == null || baseStation.trim().isEmpty() || "-1".equals(baseStation)) {
-                JOptionPane.showMessageDialog(this, "鍩虹珯鍧愭爣鏈缃紝鏃犳硶浼樺寲", "閿欒", JOptionPane.ERROR_MESSAGE);
+            
+            // 鑾峰彇鍩哄噯绔欏潗鏍囦綔涓哄師鐐�
+            String originStr = dikuai.getBaseStationCoordinates();
+            if (originStr == null || originStr.trim().isEmpty() || "-1".equals(originStr.trim())) {
+                JOptionPane.showMessageDialog(this, "鍩哄噯绔欏潗鏍囦负绌猴紝鏃犳硶浼樺寲", "閿欒", JOptionPane.ERROR_MESSAGE);
                 return;
             }
             
-            // 鍑嗗 Coordinate 鍒楄〃
-            String originalCoords = dikuai.getBoundaryOriginalCoordinates();
-            if (originalCoords == null || originalCoords.trim().isEmpty() || "-1".equals(originalCoords)) {
+            // 鑾峰彇鍘熷杈圭晫鍧愭爣
+            String boundaryStr = dikuai.getBoundaryOriginalCoordinates();
+            if (boundaryStr == null || boundaryStr.trim().isEmpty() || "-1".equals(boundaryStr.trim())) {
                 JOptionPane.showMessageDialog(this, "鍘熷杈圭晫鍧愭爣涓虹┖锛屾棤娉曚紭鍖�", "閿欒", JOptionPane.ERROR_MESSAGE);
                 return;
             }
 
             try {
-                // 瑙f瀽鍘熷鍧愭爣鍒� Coordinate.coordinates
-                List<Coordinate> coords = new ArrayList<>();
-                String[] points = originalCoords.split(";");
-                for (String point : points) {
-                    String[] parts = point.split(",");
-                    if (parts.length >= 2) {
-                        double lonDecimal = Double.parseDouble(parts[0].trim());
-                        double latDecimal = Double.parseDouble(parts[1].trim());
-                        double alt = parts.length > 2 ? Double.parseDouble(parts[2].trim()) : 0.0;
-                        
-                        // 灏嗗崄杩涘埗搴﹁浆鎹负搴﹀垎鏍煎紡瀛楃涓�
-                        String latDM = decimalToDegreeMinute(latDecimal);
-                        String lonDM = decimalToDegreeMinute(lonDecimal);
-                        String latDir = latDecimal >= 0 ? "N" : "S";
-                        String lonDir = lonDecimal >= 0 ? "E" : "W";
-                        
-                        coords.add(new Coordinate(latDM, latDir, lonDM, lonDir, alt));
-                    }
+                // 璋冪敤Bianjieyouhuatoxy鐨刼ptimizeBoundary鏂规硶
+                // boundaryStr鏍煎紡锛氱含搴�(搴﹀垎),绾害鏂瑰悜,缁忓害(搴﹀垎),缁忓害鏂瑰悜,楂樼▼;...
+                // 闇�瑕佽浆鎹负optimizeBoundary鏈熸湜鐨勬牸寮忥細lat(搴﹀垎),lon(搴﹀垎);...
+                String convertedBoundaryStr = convertBoundaryFormat(boundaryStr.trim());
+                String optimized = Bianjieyouhuatoxy.optimizeBoundary(originStr.trim(), convertedBoundaryStr);
+                
+                // 妫�鏌ユ槸鍚︽湁閿欒
+                if (optimized != null && optimized.startsWith("ERROR:")) {
+                    JOptionPane.showMessageDialog(this, "浼樺寲澶辫触: " + optimized.substring(6), "閿欒", JOptionPane.ERROR_MESSAGE);
+                    return;
                 }
-                Coordinate.coordinates = coords;
-
-                // 璋冪敤浼樺寲绠楁硶
-                String optimized = bianjieguihua2.processCoordinateListAuto(baseStation);
+                
                 optTextArea.setText(optimized);
                 JOptionPane.showMessageDialog(this, "杈圭晫浼樺寲瀹屾垚", "鎻愮ず", JOptionPane.INFORMATION_MESSAGE);
             } catch (Exception ex) {
@@ -160,11 +145,22 @@
             // 鑾峰彇褰撳墠浼樺寲鍚庣殑杈圭晫
             String currentOptimized = optTextArea.getText();
             
+            // 淇濆瓨鍦板潡缂栧彿锛岀敤浜庤繑鍥炲洖璋�
+            final String targetLandNumber = dikuai.getLandNumber();
+            
             // 璋冪敤棣栭〉鏄剧ず棰勮
             SwingUtilities.invokeLater(() -> {
                 Shouye.showBoundaryPreview(dikuai, currentOptimized, () -> {
-                    // 杩斿洖鍥炶皟锛氶噸鏂版墦寮�姝ら〉闈�
-                    new Dikuanbianjipage(getOwner(), getTitle(), currentOptimized, dikuai).setVisible(true);
+                    // 杩斿洖鍥炶皟锛氶噸鏂版墦寮�姝ら〉闈紝浠庡湴鍧楀璞¢噸鏂拌鍙栨渶鏂扮殑杈圭晫鍧愭爣
+                    // 浠� dikuaiMap 閲嶆柊鑾峰彇鍦板潡瀵硅薄锛堢‘淇濊幏鍙栧埌鏈�鏂扮殑鍊硷級
+                    Dikuai updatedDikuai = Dikuai.getDikuai(targetLandNumber);
+                    if (updatedDikuai != null) {
+                        String latestBoundary = updatedDikuai.getBoundaryCoordinates();
+                        new Dikuanbianjipage(getOwner(), getTitle(), latestBoundary, updatedDikuai).setVisible(true);
+                    } else {
+                        // 濡傛灉鑾峰彇澶辫触锛屼娇鐢ㄥ綋鍓嶅��
+                        new Dikuanbianjipage(getOwner(), getTitle(), currentOptimized, dikuai).setVisible(true);
+                    }
                 });
             });
         });
@@ -189,7 +185,8 @@
             Dikuai.saveToProperties();
             this.result = trimmed;
             JOptionPane.showMessageDialog(this, "鍦板潡杈圭晫鍧愭爣宸叉洿鏂�", "鎴愬姛", JOptionPane.INFORMATION_MESSAGE);
-            dispose();
+            // 涓嶉��鍑洪〉闈紝鍙洿鏂版樉绀�
+            // dispose(); // 绉婚櫎閫�鍑洪�昏緫
         });
 
         closeBtn.addActionListener(e -> dispose());
@@ -313,4 +310,42 @@
         double degreeMinutes = degrees * 100.0 + minutes;
         return String.format(java.util.Locale.US, "%.8f", degreeMinutes);
     }
+    
+    /**
+     * 灏哹oundaryOriginalCoordinates鏍煎紡杞崲涓簅ptimizeBoundary鏈熸湜鐨勬牸寮�
+     * 杈撳叆鏍煎紡锛氱含搴�(搴﹀垎),绾害鏂瑰悜,缁忓害(搴﹀垎),缁忓害鏂瑰悜,楂樼▼;...
+     * 杈撳嚭鏍煎紡锛氱含搴�(搴﹀垎),缁忓害(搴﹀垎);...
+     * 
+     * @param boundaryOriginalCoordinates 鍘熷杈圭晫鍧愭爣瀛楃涓�
+     * @return 杞崲鍚庣殑鏍煎紡瀛楃涓�
+     */
+    private String convertBoundaryFormat(String boundaryOriginalCoordinates) {
+        if (boundaryOriginalCoordinates == null || boundaryOriginalCoordinates.trim().isEmpty() || "-1".equals(boundaryOriginalCoordinates.trim())) {
+            return "";
+        }
+        
+        StringBuilder sb = new StringBuilder();
+        String[] points = boundaryOriginalCoordinates.split(";");
+        
+        for (String point : points) {
+            if (point == null || point.trim().isEmpty()) {
+                continue;
+            }
+            
+            String[] parts = point.trim().split("[,锛宂");
+            // 鏍煎紡锛氱含搴�(搴﹀垎),绾害鏂瑰悜,缁忓害(搴﹀垎),缁忓害鏂瑰悜,楂樼▼
+            // 鑷冲皯闇�瑕�4涓瓧娈碉紙绾害銆佹柟鍚戙�佺粡搴︺�佹柟鍚戯級锛岄珮绋嬫槸鍙�夌殑
+            if (parts.length >= 4) {
+                String lat = parts[0].trim();
+                String lon = parts[2].trim();
+                
+                if (sb.length() > 0) {
+                    sb.append(";");
+                }
+                sb.append(lat).append(",").append(lon);
+            }
+        }
+        
+        return sb.toString();
+    }
 }

--
Gitblit v1.10.0