From 13d032241e1a2938a8be4f64c9171e1240e9ea1e Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期一, 22 十二月 2025 18:50:42 +0800
Subject: [PATCH] 新增了边界管理页面和首页边界虚线功能
---
src/zhangaiwu/AddDikuai.java | 62 ++++++++++++++++++++++++++++--
1 files changed, 57 insertions(+), 5 deletions(-)
diff --git a/src/zhangaiwu/AddDikuai.java b/src/zhangaiwu/AddDikuai.java
index 8d8001b..8f53100 100644
--- a/src/zhangaiwu/AddDikuai.java
+++ b/src/zhangaiwu/AddDikuai.java
@@ -27,12 +27,12 @@
import dikuai.Dikuaiguanli;
import bianjie.bianjieguihua2;
import lujing.Lunjingguihua;
+import publicway.buttonset;
import set.Setsys;
import ui.UIConfig;
import zhuye.MowerLocationData;
import zhuye.Shouye;
import zhuye.Coordinate;
-import zhuye.buttonset;
import gecaoji.Device;
/**
@@ -103,6 +103,7 @@
final boolean success;
final String errorMessage;
final String originalBoundary;
+ final String originalBoundaryXY;
final String optimizedBoundary;
final String areaSqMeters;
final String baseStationCoordinates;
@@ -111,6 +112,7 @@
private BoundarySnapshotResult(boolean success,
String errorMessage,
String originalBoundary,
+ String originalBoundaryXY,
String optimizedBoundary,
String areaSqMeters,
String baseStationCoordinates,
@@ -118,18 +120,19 @@
this.success = success;
this.errorMessage = errorMessage;
this.originalBoundary = originalBoundary;
+ this.originalBoundaryXY = originalBoundaryXY;
this.optimizedBoundary = optimizedBoundary;
this.areaSqMeters = areaSqMeters;
this.baseStationCoordinates = baseStationCoordinates;
this.messageType = messageType;
}
- static BoundarySnapshotResult success(String original, String optimized, String area, String baseStation) {
- return new BoundarySnapshotResult(true, null, original, optimized, area, baseStation, JOptionPane.INFORMATION_MESSAGE);
+ static BoundarySnapshotResult success(String original, String originalXY, String optimized, String area, String baseStation) {
+ return new BoundarySnapshotResult(true, null, original, originalXY, optimized, area, baseStation, JOptionPane.INFORMATION_MESSAGE);
}
static BoundarySnapshotResult failure(String message, int messageType) {
- return new BoundarySnapshotResult(false, message, null, null, null, null, messageType);
+ return new BoundarySnapshotResult(false, message, null, null, null, null, null, messageType);
}
}
@@ -1675,6 +1678,7 @@
Dikuai dikuai = getOrCreatePendingDikuai();
if (dikuai != null) {
dikuai.setBoundaryOriginalCoordinates(snapshot.originalBoundary);
+ dikuai.setBoundaryOriginalXY(snapshot.originalBoundaryXY);
dikuai.setBoundaryCoordinates(snapshot.optimizedBoundary);
dikuai.setLandArea(snapshot.areaSqMeters);
dikuai.setBaseStationCoordinates(snapshot.baseStationCoordinates);
@@ -1683,11 +1687,13 @@
}
dikuaiData.put("boundaryOriginalCoordinates", snapshot.originalBoundary);
+ dikuaiData.put("boundaryOriginalXY", snapshot.originalBoundaryXY);
dikuaiData.put("boundaryCoordinates", snapshot.optimizedBoundary);
dikuaiData.put("landArea", snapshot.areaSqMeters);
dikuaiData.put("baseStationCoordinates", snapshot.baseStationCoordinates);
if (activeSession != null) {
activeSession.data.put("boundaryOriginalCoordinates", snapshot.originalBoundary);
+ activeSession.data.put("boundaryOriginalXY", snapshot.originalBoundaryXY);
activeSession.data.put("boundaryCoordinates", snapshot.optimizedBoundary);
activeSession.data.put("landArea", snapshot.areaSqMeters);
activeSession.data.put("baseStationCoordinates", snapshot.baseStationCoordinates);
@@ -1743,6 +1749,47 @@
}
return sb.toString();
}
+
+ /**
+ * 鏋勫缓鍘熷杈圭晫XY鍧愭爣瀛楃涓诧紙鐩稿浜庡熀鍑嗙珯鐨刋Y鍧愭爣锛�
+ */
+ private static String buildOriginalBoundaryXYString(List<Coordinate> coordinates, String baseStationCoordinates) {
+ if (coordinates == null || coordinates.isEmpty()) {
+ return "-1";
+ }
+ if (baseStationCoordinates == null || baseStationCoordinates.trim().isEmpty() || "-1".equals(baseStationCoordinates.trim())) {
+ return "-1";
+ }
+
+ try {
+ // 瑙f瀽鍩哄噯绔欏潗鏍�
+ String[] baseParts = baseStationCoordinates.split(",");
+ if (baseParts.length < 4) {
+ return "-1";
+ }
+ double baseLat = publicway.Gpstoxuzuobiao.parseDMToDecimal(baseParts[0], baseParts[1]);
+ double baseLon = publicway.Gpstoxuzuobiao.parseDMToDecimal(baseParts[2], baseParts[3]);
+
+ StringBuilder sb = new StringBuilder();
+ DecimalFormat xyFormat = new DecimalFormat("0.00");
+ for (Coordinate coord : coordinates) {
+ double lat = convertToDecimalDegree(coord.getLatitude(), coord.getLatDirection());
+ double lon = convertToDecimalDegree(coord.getLongitude(), coord.getLonDirection());
+
+ // 杞崲涓篨Y鍧愭爣
+ double[] xy = publicway.Gpstoxuzuobiao.convertLatLonToLocal(lat, lon, baseLat, baseLon);
+
+ if (sb.length() > 0) {
+ sb.append(";");
+ }
+ sb.append(xyFormat.format(xy[0])).append(",").append(xyFormat.format(xy[1]));
+ }
+ return sb.toString();
+ } catch (Exception e) {
+ e.printStackTrace();
+ return "-1";
+ }
+ }
private static double convertToDecimalDegree(String dmm, String direction) {
if (dmm == null || dmm.isEmpty()) {
@@ -1865,10 +1912,11 @@
}
String originalBoundary = buildOriginalBoundaryString(uniqueCoordinates);
+ String originalBoundaryXY = buildOriginalBoundaryXYString(uniqueCoordinates, baseStationCoordinates);
DecimalFormat areaFormat = new DecimalFormat("0.00");
String areaString = areaFormat.format(area);
- return BoundarySnapshotResult.success(originalBoundary, optimizedBoundary, areaString, baseStationCoordinates);
+ return BoundarySnapshotResult.success(originalBoundary, originalBoundaryXY, optimizedBoundary, areaString, baseStationCoordinates);
}
private String resolvePlannerMode(String patternDisplay) {
@@ -2407,6 +2455,7 @@
BoundarySnapshotResult snapshot = computeBoundarySnapshot();
if (snapshot.success && activeSession != null) {
activeSession.data.put("boundaryOriginalCoordinates", snapshot.originalBoundary);
+ activeSession.data.put("boundaryOriginalXY", snapshot.originalBoundaryXY);
activeSession.data.put("boundaryCoordinates", snapshot.optimizedBoundary);
activeSession.data.put("landArea", snapshot.areaSqMeters);
activeSession.data.put("baseStationCoordinates", snapshot.baseStationCoordinates);
@@ -2466,6 +2515,9 @@
if (dikuaiData.containsKey("boundaryOriginalCoordinates")) {
dikuai.setBoundaryOriginalCoordinates(dikuaiData.get("boundaryOriginalCoordinates"));
}
+ if (dikuaiData.containsKey("boundaryOriginalXY")) {
+ dikuai.setBoundaryOriginalXY(dikuaiData.get("boundaryOriginalXY"));
+ }
if (dikuaiData.containsKey("boundaryCoordinates")) {
dikuai.setBoundaryCoordinates(dikuaiData.get("boundaryCoordinates"));
}
--
Gitblit v1.10.0