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