From f784463ab019c1113cf0b31a249e8802b07a57fa Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期二, 16 十二月 2025 15:26:15 +0800
Subject: [PATCH] 保存地图最后位置
---
src/set/Sets.java | 43 +++++++++++++++++++++
src/zhuye/MapRenderer.java | 45 +++++++++++++++++-----
set.properties | 6 ++-
src/zhuye/Shouye.java | 9 +++-
4 files changed, 89 insertions(+), 14 deletions(-)
diff --git a/set.properties b/set.properties
index b32ece6..c47ccb3 100644
--- a/set.properties
+++ b/set.properties
@@ -1,14 +1,16 @@
#Mower Configuration Properties - Updated
-#Mon Dec 15 19:36:26 CST 2025
+#Tue Dec 16 15:12:34 CST 2025
appVersion=-1
currentWorkLandNumber=LAND1
cuttingWidth=200
firmwareVersion=-1
handheldMarkerId=
idleTrailDurationSeconds=60
-mapScale=41.66666666666667
+mapScale=34.71
mowerId=1234
serialAutoConnect=true
serialBaudRate=115200
serialPortName=COM15
simCardNumber=-1
+viewCenterX=-3.49
+viewCenterY=6.93
diff --git a/src/set/Sets.java b/src/set/Sets.java
index 39db2d6..1529e53 100644
--- a/src/set/Sets.java
+++ b/src/set/Sets.java
@@ -5,6 +5,7 @@
import zhuye.MapRenderer;
import zhuye.Shouye;
import zhuye.buttonset;
+import set.Setsys;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
@@ -333,6 +334,48 @@
setData.initializeFromProperties();
baseStation.load();
updateDisplay();
+ // 鍔犺浇骞跺簲鐢ㄤ笂娆′繚瀛樼殑瑙嗗浘涓績鍧愭爣
+ loadViewCenterFromProperties();
+ }
+
+ /**
+ * 浠庨厤缃枃浠跺姞杞借鍥句腑蹇冨潗鏍囧苟搴旂敤鍒癕apRenderer
+ */
+ private void loadViewCenterFromProperties() {
+ Shouye shouye = Shouye.getInstance();
+ if (shouye == null) {
+ return;
+ }
+ MapRenderer renderer = shouye.getMapRenderer();
+ if (renderer == null) {
+ return;
+ }
+
+ // 浠庨厤缃枃浠惰鍙栬鍥句腑蹇冨潗鏍�
+ String viewCenterXValue = Setsys.getPropertyValue("viewCenterX");
+ String viewCenterYValue = Setsys.getPropertyValue("viewCenterY");
+
+ double savedTranslateX = 0.0;
+ double savedTranslateY = 0.0;
+
+ if (viewCenterXValue != null && !viewCenterXValue.trim().isEmpty()) {
+ try {
+ savedTranslateX = Double.parseDouble(viewCenterXValue.trim());
+ } catch (NumberFormatException e) {
+ savedTranslateX = 0.0;
+ }
+ }
+ if (viewCenterYValue != null && !viewCenterYValue.trim().isEmpty()) {
+ try {
+ savedTranslateY = Double.parseDouble(viewCenterYValue.trim());
+ } catch (NumberFormatException e) {
+ savedTranslateY = 0.0;
+ }
+ }
+
+ // 搴旂敤瑙嗗浘涓績鍧愭爣锛堜繚鎸佸綋鍓嶇缉鏀炬瘮渚嬶級
+ double currentScale = renderer.getScale();
+ renderer.setViewTransform(currentScale, savedTranslateX, savedTranslateY);
}
private void updateDisplay() {
diff --git a/src/zhuye/MapRenderer.java b/src/zhuye/MapRenderer.java
index 8083749..8406d2b 100644
--- a/src/zhuye/MapRenderer.java
+++ b/src/zhuye/MapRenderer.java
@@ -114,14 +114,15 @@
this.mowerUpdateTimer = createMowerTimer();
this.mowerInfoManager = new GecaojiMeg(visualizationPanel, mower);
setupMouseListeners();
- // 浠庨厤缃枃浠惰鍙栦笂娆′繚瀛樼殑缂╂斁姣斾緥
- loadScaleFromProperties();
+ // 浠庨厤缃枃浠惰鍙栦笂娆′繚瀛樼殑缂╂斁姣斾緥鍜岃鍥句腑蹇冨潗鏍�
+ loadViewSettingsFromProperties();
}
/**
- * 浠庨厤缃枃浠惰鍙栫缉鏀炬瘮渚�
+ * 浠庨厤缃枃浠惰鍙栫缉鏀炬瘮渚嬪拰瑙嗗浘涓績鍧愭爣
*/
- private void loadScaleFromProperties() {
+ private void loadViewSettingsFromProperties() {
+ // 鍔犺浇缂╂斁姣斾緥
String scaleValue = Setsys.getPropertyValue(MAP_SCALE_PROPERTY);
if (scaleValue != null && !scaleValue.trim().isEmpty()) {
try {
@@ -140,6 +141,28 @@
// 濡傛灉娌℃湁淇濆瓨鐨勫�硷紝浣跨敤榛樿鍊�
scale = DEFAULT_SCALE;
}
+
+ // 鍔犺浇瑙嗗浘涓績鍧愭爣
+ String viewCenterXValue = Setsys.getPropertyValue("viewCenterX");
+ String viewCenterYValue = Setsys.getPropertyValue("viewCenterY");
+ if (viewCenterXValue != null && !viewCenterXValue.trim().isEmpty()) {
+ try {
+ translateX = Double.parseDouble(viewCenterXValue.trim());
+ } catch (NumberFormatException e) {
+ translateX = 0.0;
+ }
+ } else {
+ translateX = 0.0;
+ }
+ if (viewCenterYValue != null && !viewCenterYValue.trim().isEmpty()) {
+ try {
+ translateY = Double.parseDouble(viewCenterYValue.trim());
+ } catch (NumberFormatException e) {
+ translateY = 0.0;
+ }
+ } else {
+ translateY = 0.0;
+ }
}
/**
@@ -147,7 +170,8 @@
*/
private void saveScaleToProperties() {
Setsys setsys = new Setsys();
- setsys.updateProperty(MAP_SCALE_PROPERTY, String.valueOf(scale));
+ // 淇濈暀2浣嶅皬鏁�
+ setsys.updateProperty(MAP_SCALE_PROPERTY, String.format("%.2f", scale));
}
/**
@@ -1328,7 +1352,7 @@
/**
* 鍒ゆ柇瀹氫綅鐘舵�佹槸鍚︽湁鏁堬紝鍙敤浜庢樉绀烘嫋灏�
- * 鎺ュ彈鐘舵��1锛堝崟鐐瑰畾浣嶏級鍜�4锛堝浐瀹氳В锛�
+ * 鎺ュ彈鐘舵��1锛堝崟鐐瑰畾浣嶏級銆�2锛堢爜宸垎锛夈��3锛堟棤鏁圥PS锛夈��4锛堝浐瀹氳В锛夈��5锛堟诞鐐硅В锛�
*/
private boolean isValidFixForTrail(String fixQuality) {
if (fixQuality == null) {
@@ -1338,14 +1362,15 @@
if (trimmed.isEmpty()) {
return false;
}
- // 鎺ュ彈鐘舵��1锛堝崟鐐瑰畾浣嶏級鍜�4锛堝浐瀹氳В锛�
- if ("1".equals(trimmed) || "4".equals(trimmed)) {
+ // 鎺ュ彈鐘舵��1,2,3,4,5锛堝彧瑕佷笉鏄�0鎴栨棤鏁堢姸鎬侊級
+ if ("1".equals(trimmed) || "2".equals(trimmed) || "3".equals(trimmed) ||
+ "4".equals(trimmed) || "5".equals(trimmed)) {
return true;
}
try {
double value = Double.parseDouble(trimmed);
- // 鎺ュ彈1.0鎴�4.0
- return Math.abs(value - 1.0d) < 1e-6 || Math.abs(value - 4.0d) < 1e-6;
+ // 鎺ュ彈1.0, 2.0, 3.0, 4.0, 5.0锛堝彧瑕佷笉鏄�0锛�
+ return value >= 1.0 && value <= 5.0;
} catch (NumberFormatException ex) {
return false;
}
diff --git a/src/zhuye/Shouye.java b/src/zhuye/Shouye.java
index 7d78ab2..c462a83 100644
--- a/src/zhuye/Shouye.java
+++ b/src/zhuye/Shouye.java
@@ -245,13 +245,18 @@
}
/**
- * 淇濆瓨褰撳墠鍦板浘缂╂斁姣斾緥鍒伴厤缃枃浠�
+ * 淇濆瓨褰撳墠鍦板浘缂╂斁姣斾緥鍜岃鍥句腑蹇冨潗鏍囧埌閰嶇疆鏂囦欢
*/
public void saveCurrentScale() {
if (mapRenderer != null) {
double currentScale = mapRenderer.getScale();
+ double translateX = mapRenderer.getTranslateX();
+ double translateY = mapRenderer.getTranslateY();
Setsys setsys = new Setsys();
- setsys.updateProperty("mapScale", String.valueOf(currentScale));
+ // 淇濈暀2浣嶅皬鏁�
+ setsys.updateProperty("mapScale", String.format("%.2f", currentScale));
+ setsys.updateProperty("viewCenterX", String.format("%.2f", translateX));
+ setsys.updateProperty("viewCenterY", String.format("%.2f", translateY));
}
}
--
Gitblit v1.10.0