826220679@qq.com
2 天以前 64e0880d2d81ce2b3f0e366b1537c5efe2f2c4ea
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package lujing;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
 
/**
 * 保存X,Y坐标的工具类
 * 坐标单位:米,精确到小数点后2位小数
 */
public class SavaXyZuobiao {
    
    // 坐标集合,使用线程安全的List
    private static final List<double[]> COORDINATES = Collections.synchronizedList(new ArrayList<>());
    
    // 保存状态标志
    private static volatile boolean isSaving = false;
    
    // 数字格式化器,用于保留2位小数
    private static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat("0.00");
    
    // 私有构造方法,防止实例化
    private SavaXyZuobiao() {
        throw new UnsupportedOperationException("这是一个工具类,不能实例化");
    }
    
    /**
     * 添加坐标到集合中(仅在保存状态下)
     * @param x X坐标(米)
     * @param y Y坐标(米)
     */
    public static void addCoordinate(double x, double y) {
        if (isSaving) {
            // 格式化坐标,保留2位小数
            double formattedX = Double.parseDouble(DECIMAL_FORMAT.format(x));
            double formattedY = Double.parseDouble(DECIMAL_FORMAT.format(y));
            
            double[] coordinate = {formattedX, formattedY};
            synchronized (COORDINATES) {
                COORDINATES.add(coordinate);
            }
        }
    }
    
    /**
     * 获取坐标集合的字符串表示
     * 格式:X1,Y1;X2,Y2;...;Xn,Yn
     * @return 格式化后的坐标字符串
     */
    public static String getCoordinatesString() {
        if (COORDINATES.isEmpty()) {
            return "";
        }
        
        StringBuilder sb = new StringBuilder();
        synchronized (COORDINATES) {
            for (int i = 0; i < COORDINATES.size(); i++) {
                double[] coordinate = COORDINATES.get(i);
                sb.append(DECIMAL_FORMAT.format(coordinate[0]))
                  .append(",")
                  .append(DECIMAL_FORMAT.format(coordinate[1]));
                
                if (i < COORDINATES.size() - 1) {
                    sb.append(";");
                }
            }
        }
        return sb.toString();
    }
    
    /**
     * 开始保存坐标
     */
    public static void startSaving() {
        isSaving = true;
    }
    
    /**
     * 暂停保存坐标
     */
    public static void pauseSaving() {
        isSaving = false;
    }
    
    /**
     * 获取当前保存状态
     * @return true表示正在保存,false表示已暂停
     */
    public static boolean isSaving() {
        return isSaving;
    }
    
    /**
     * 清空坐标集合中的所有数据
     */
    public static void clearCoordinates() {
        synchronized (COORDINATES) {
            COORDINATES.clear();
        }
    }
    
    /**
     * 获取当前保存的坐标数量
     * @return 坐标数量
     */
    public static int getCoordinateCount() {
        synchronized (COORDINATES) {
            return COORDINATES.size();
        }
    }
    
    /**
     * 获取所有坐标的列表(副本,防止外部修改内部数据)
     * @return 坐标列表的副本
     */
    public static List<double[]> getAllCoordinates() {
        synchronized (COORDINATES) {
            List<double[]> copy = new ArrayList<>(COORDINATES.size());
            for (double[] coord : COORDINATES) {
                copy.add(new double[]{coord[0], coord[1]});
            }
            return copy;
        }
    }
}