张世豪
7 天以前 f784463ab019c1113cf0b31a249e8802b07a57fa
保存地图最后位置
已修改4个文件
103 ■■■■ 文件已修改
set.properties 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/set/Sets.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/zhuye/MapRenderer.java 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/zhuye/Shouye.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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
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();
    }
    /**
     * 从配置文件加载视图中心坐标并应用到MapRenderer
     */
    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() {
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(无效PPS)、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;
        }
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));
        }
    }