张世豪
6 天以前 9d171a3c3a57ea54454d7e9d64dec213aa885a2c
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
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;
    }
}