| | |
| | | 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 { |
| | |
| | | // 如果没有保存的值,使用默认值 |
| | | 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; |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | 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)); |
| | | } |
| | | |
| | | /** |
| | |
| | | |
| | | /** |
| | | * 判断定位状态是否有效,可用于显示拖尾 |
| | | * 接受状态1(单点定位)和4(固定解) |
| | | * 接受状态1(单点定位)、2(码差分)、3(无效PPS)、4(固定解)、5(浮点解) |
| | | */ |
| | | private boolean isValidFixForTrail(String fixQuality) { |
| | | if (fixQuality == null) { |
| | |
| | | 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; |
| | | } |