Compare commits
No commits in common. "b6629696d6b095471b4aa2e65328ae4e0944685d" and "9d54bdcb1aed0da4db2abd84c61a0797ed90db3b" have entirely different histories.
b6629696d6
...
9d54bdcb1a
@ -519,33 +519,28 @@ public class D331RtcmMessageExecutor implements Executor<D331RtcmMessage, Void>
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (insertIndex != -1) {
|
if (insertIndex != -1) {
|
||||||
// 检查基站是否有有效的ECEF坐标
|
ByteBuf newBuf = Unpooled.buffer();
|
||||||
|
newBuf.writeBytes(originalData, 0, insertIndex / 2);
|
||||||
|
|
||||||
|
// 使用f9p坐标生成1005消息
|
||||||
|
double[] ecef = new double[3];
|
||||||
|
// 修复:确保坐标值不为null,并正确处理Double类型
|
||||||
Double ecefX = deviceBs.getEcefx();
|
Double ecefX = deviceBs.getEcefx();
|
||||||
Double ecefY = deviceBs.getEcefy();
|
Double ecefY = deviceBs.getEcefy();
|
||||||
Double ecefZ = deviceBs.getEcefz();
|
Double ecefZ = deviceBs.getEcefz();
|
||||||
|
|
||||||
// 验证坐标有效性
|
ecef[0] = ecefX != null ? ecefX.doubleValue() : 0.0;
|
||||||
if (isValidEcefCoordinates(ecefX, ecefY, ecefZ)) {
|
ecef[1] = ecefY != null ? ecefY.doubleValue() : 0.0;
|
||||||
ByteBuf newBuf = Unpooled.buffer();
|
ecef[2] = ecefZ != null ? ecefZ.doubleValue() : 0.0;
|
||||||
newBuf.writeBytes(originalData, 0, insertIndex / 2);
|
|
||||||
|
|
||||||
double[] ecef = new double[3];
|
|
||||||
ecef[0] = ecefX.doubleValue();
|
|
||||||
ecef[1] = ecefY.doubleValue();
|
|
||||||
ecef[2] = ecefZ.doubleValue();
|
|
||||||
|
|
||||||
String rtcm1005 = Rtcm1005.generateRtcm1005Hex(ecef, 0);
|
String rtcm1005 = Rtcm1005.generateRtcm1005Hex(ecef, 0);
|
||||||
if (rtcm1005 != null && !rtcm1005.isEmpty()) {
|
if (rtcm1005 != null) {
|
||||||
byte[] rtcm1005Bytes = ByteUtil.hexStringTobyte(rtcm1005);
|
byte[] rtcm1005Bytes = ByteUtil.hexStringTobyte(rtcm1005);
|
||||||
newBuf.writeBytes(rtcm1005Bytes);
|
newBuf.writeBytes(rtcm1005Bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
newBuf.writeBytes(originalData, insertIndex / 2, originalData.length - insertIndex / 2);
|
newBuf.writeBytes(originalData, insertIndex / 2, originalData.length - insertIndex / 2);
|
||||||
buf = newBuf;
|
buf = newBuf;
|
||||||
} else {
|
|
||||||
logger.warn("Base station {} has invalid ECEF coordinates, skipping RTCM 1005 generation for device {}",
|
|
||||||
deviceBs.getDeviceId(), deviceId);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
lastD300ForwardTimeMap.put(deviceId, currentTime);
|
lastD300ForwardTimeMap.put(deviceId, currentTime);
|
||||||
@ -793,21 +788,29 @@ public class D331RtcmMessageExecutor implements Executor<D331RtcmMessage, Void>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 验证ECEF坐标是否有效
|
* 打印当前基站和设备状态(用于调试)
|
||||||
*/
|
*/
|
||||||
private boolean isValidEcefCoordinates(Double x, Double y, Double z) {
|
@Scheduled(fixedRate = 300000) // 5分钟执行一次
|
||||||
if (x == null || y == null || z == null) {
|
public void printStatusSummary() {
|
||||||
return false;
|
if (logger.isInfoEnabled() && !baseStationStatusMap.isEmpty()) {
|
||||||
|
StringBuilder summary = new StringBuilder();
|
||||||
|
summary.append("\n=== Base Station Status Summary ===\n");
|
||||||
|
|
||||||
|
for (BaseStationStatus status : baseStationStatusMap.values()) {
|
||||||
|
summary.append(String.format("Base Station: %s, Status: %s, Last Active: %s, Serving Devices: %d\n",
|
||||||
|
status.getBaseStationId(),
|
||||||
|
status.getStatus(),
|
||||||
|
status.getLastActiveTime(),
|
||||||
|
status.getServingDevices().size()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查是否为零坐标
|
summary.append("=== Device Base Mapping ===\n");
|
||||||
if (x == 0.0 && y == 0.0 && z == 0.0) {
|
for (Map.Entry<String, String> entry : deviceCurrentBaseMap.entrySet()) {
|
||||||
return false;
|
summary.append(String.format("Device: %s -> Base Station: %s\n",
|
||||||
|
entry.getKey(), entry.getValue()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查坐标是否在地球表面合理范围内(大致6.3M到6.4M米)
|
logger.info(summary.toString());
|
||||||
double distance = Math.sqrt(x * x + y * y + z * z);
|
}
|
||||||
return distance >= 6300000 && distance <= 6400000;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user