package zhuye;
|
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.Map;
|
|
public class MowerLocationData {
|
// 属性定义
|
/** 割草机编号(唯一标识或设备序号) */
|
private static String mowerNumber;
|
/** UTC 时间:GPS/上报时间戳,使用 UTC 格式(例如 HHmmss 或 ISO 时间戳) */
|
private static String utcTime;
|
/** 纬度(度分格式,常见为 DDMM.MMMM,例如 3907.1234 表示 39 度 07.1234 分) */
|
private static double latitude;
|
/** 纬度半球标识:"N" 北半球 或 "S" 南半球 */
|
private static String latitudeHemisphere;
|
/** 经度(度分格式,常见为 DDDMM.MMMM,例如 11607.1234 表示 116 度 07.1234 分) */
|
private static double longitude;
|
/** 经度半球标识:"E" 东经 或 "W" 西经 */
|
private static String longitudeHemisphere;
|
/** 定位质量(GPS 定位类型),例如 0=无定位,1=GPS,2=Differential 等) */
|
private static String positioningQuality;
|
/** 可见或用于定位的卫星数量 */
|
private static int satelliteCount;
|
/** 水平精度因子 HDOP(值越小精度越高) */
|
private static double hdop;
|
/** 高度(相对于海平面,数值) */
|
private static double altitude;
|
/** 高度单位(例如 "m" 表示米) */
|
private static String altitudeUnit;
|
/** 椭球面高度与大地水准面(大地水准面高度),用于高度校正 */
|
private static double geoidHeight;
|
/** 椭球面高度单位(例如 "m") */
|
private static String geoidHeightUnit;
|
/** 差分时间/差分年龄(秒),若使用差分定位则表明差分数据的年龄 */
|
private static int differentialTime;
|
/** 校验和(通常是 NMEA 报文末尾的校验字段) */
|
private static String checksum;
|
/** 设备编号(例如基站或割草机的设备 ID/卡号) */
|
private static String deviceNumber;
|
/** 设备电量(电压或百分比,根据上报格式) */
|
private static double deviceBattery;
|
/** 卫星信号强度(例如 RSSI 或平均信号质量) */
|
private static double satelliteSignalStrength;
|
/** 水平角 / 方位角(设备朝向或航向,单位通常为度) */
|
private static double horizontalAngle;
|
|
// 使用ConcurrentHashMap存储所有属性以便快速访问
|
private static final Map<String, Object> PROPERTIES_MAP = new ConcurrentHashMap<>();
|
|
// 更新属性映射的私有方法
|
private static void updatePropertiesMap() {
|
putSafe("mowerNumber", mowerNumber);
|
putSafe("utcTime", utcTime);
|
putSafe("latitude", latitude);
|
putSafe("latitudeHemisphere", latitudeHemisphere);
|
putSafe("longitude", longitude);
|
putSafe("longitudeHemisphere", longitudeHemisphere);
|
putSafe("positioningQuality", positioningQuality);
|
putSafe("satelliteCount", satelliteCount);
|
putSafe("hdop", hdop);
|
putSafe("altitude", altitude);
|
putSafe("altitudeUnit", altitudeUnit);
|
putSafe("geoidHeight", geoidHeight);
|
putSafe("geoidHeightUnit", geoidHeightUnit);
|
putSafe("differentialTime", differentialTime);
|
putSafe("checksum", checksum);
|
putSafe("deviceNumber", deviceNumber);
|
putSafe("deviceBattery", deviceBattery);
|
putSafe("satelliteSignalStrength", satelliteSignalStrength);
|
putSafe("horizontalAngle", horizontalAngle);
|
}
|
|
private static void putSafe(String key, Object value) {
|
if (value != null) {
|
PROPERTIES_MAP.put(key, value);
|
} else {
|
PROPERTIES_MAP.remove(key);
|
}
|
}
|
|
// 快速更新所有属性的静态方法
|
public static void updateAllProperties(
|
String mowerNum, String utc, double lat, String latHem,
|
double lon, String lonHem, String posQuality, int satCount,
|
double hdopVal, double alt, String altUnit, double geoidH,
|
String geoidHUnit, int diffTime, String check, String deviceNum,
|
double battery, double signalStrength, double hAngle) {
|
|
mowerNumber = mowerNum;
|
utcTime = utc;
|
latitude = lat;
|
latitudeHemisphere = latHem;
|
longitude = lon;
|
longitudeHemisphere = lonHem;
|
positioningQuality = posQuality;
|
satelliteCount = satCount;
|
hdop = hdopVal;
|
altitude = alt;
|
altitudeUnit = altUnit;
|
geoidHeight = geoidH;
|
geoidHeightUnit = geoidHUnit;
|
differentialTime = diffTime;
|
checksum = check;
|
deviceNumber = deviceNum;
|
deviceBattery = battery;
|
satelliteSignalStrength = signalStrength;
|
horizontalAngle = hAngle;
|
|
// 更新属性映射
|
updatePropertiesMap();
|
}
|
|
// 获取特定属性值的静态方法
|
public static Object getProperty(String propertyName) {
|
return PROPERTIES_MAP.get(propertyName);
|
}
|
|
// 单独更新某个属性的静态方法
|
public static void updateProperty(String propertyName, Object value) {
|
switch (propertyName) {
|
case "mowerNumber":
|
mowerNumber = (String) value;
|
break;
|
case "utcTime":
|
utcTime = (String) value;
|
break;
|
case "latitude":
|
latitude = (double) value;
|
break;
|
case "latitudeHemisphere":
|
latitudeHemisphere = (String) value;
|
break;
|
case "longitude":
|
longitude = (double) value;
|
break;
|
case "longitudeHemisphere":
|
longitudeHemisphere = (String) value;
|
break;
|
case "positioningQuality":
|
positioningQuality = (String) value;
|
break;
|
case "satelliteCount":
|
satelliteCount = (int) value;
|
break;
|
case "hdop":
|
hdop = (double) value;
|
break;
|
case "altitude":
|
altitude = (double) value;
|
break;
|
case "altitudeUnit":
|
altitudeUnit = (String) value;
|
break;
|
case "geoidHeight":
|
geoidHeight = (double) value;
|
break;
|
case "geoidHeightUnit":
|
geoidHeightUnit = (String) value;
|
break;
|
case "differentialTime":
|
differentialTime = (int) value;
|
break;
|
case "checksum":
|
checksum = (String) value;
|
break;
|
case "deviceNumber":
|
deviceNumber = (String) value;
|
break;
|
case "deviceBattery":
|
deviceBattery = (double) value;
|
break;
|
case "satelliteSignalStrength":
|
satelliteSignalStrength = (double) value;
|
break;
|
case "horizontalAngle":
|
horizontalAngle = (double) value;
|
break;
|
default:
|
throw new IllegalArgumentException("Unknown property: " + propertyName);
|
}
|
|
// 更新属性映射
|
putSafe(propertyName, value);
|
}
|
|
// 以下是各个属性的getter方法(可选,根据需要添加)
|
public static String getMowerNumber() {
|
return mowerNumber;
|
}
|
|
public static String getUtcTime() {
|
return utcTime;
|
}
|
|
public static double getLatitude() {
|
return latitude;
|
}
|
|
public static String getLatitudeHemisphere() {
|
return latitudeHemisphere;
|
}
|
|
public static double getLongitude() {
|
return longitude;
|
}
|
|
public static String getLongitudeHemisphere() {
|
return longitudeHemisphere;
|
}
|
|
public static String getPositioningQuality() {
|
return positioningQuality;
|
}
|
|
public static int getSatelliteCount() {
|
return satelliteCount;
|
}
|
|
public static double getHdop() {
|
return hdop;
|
}
|
|
public static double getAltitude() {
|
return altitude;
|
}
|
|
public static String getAltitudeUnit() {
|
return altitudeUnit;
|
}
|
|
public static double getGeoidHeight() {
|
return geoidHeight;
|
}
|
|
public static String getGeoidHeightUnit() {
|
return geoidHeightUnit;
|
}
|
|
public static int getDifferentialTime() {
|
return differentialTime;
|
}
|
|
public static String getChecksum() {
|
return checksum;
|
}
|
|
public static String getDeviceNumber() {
|
return deviceNumber;
|
}
|
|
public static double getDeviceBattery() {
|
return deviceBattery;
|
}
|
|
public static double getSatelliteSignalStrength() {
|
return satelliteSignalStrength;
|
}
|
|
public static double getHorizontalAngle() {
|
return horizontalAngle;
|
}
|
}
|