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;
|
}
|
}
|
}
|