修改PWV计算

This commit is contained in:
fengyarnom 2025-05-20 11:51:22 +08:00
parent 3ff9cbbd50
commit 872f1d21ec
2 changed files with 11 additions and 16 deletions

View File

@ -272,7 +272,7 @@ public class TcpRtkServer implements CommandLineRunner {
} }
// 每10分钟执行一次数据保存 // 每10分钟执行一次数据保存
@Scheduled(fixedRate = 600000) // 600000毫秒 = 10分钟 @Scheduled(fixedRate = 60000) // 600000毫秒 = 10分钟
public void saveData() { public void saveData() {
try { try {
RtkData currentData = latestData.get(); RtkData currentData = latestData.get();
@ -288,7 +288,7 @@ public class TcpRtkServer implements CommandLineRunner {
// 检查是否需要保存距离上次保存超过10分钟 // 检查是否需要保存距离上次保存超过10分钟
if (lastSaveTime == null || if (lastSaveTime == null ||
ChronoUnit.MINUTES.between(lastSaveTime, now) >= 10) { ChronoUnit.MINUTES.between(lastSaveTime, now) >= 1) {
rtkDataRepository.save(currentData); rtkDataRepository.save(currentData);
lastSaveTime = now; lastSaveTime = now;
@ -299,4 +299,4 @@ public class TcpRtkServer implements CommandLineRunner {
logger.error("保存数据过程中发生错误: {}", e.getMessage(), e); logger.error("保存数据过程中发生错误: {}", e.getMessage(), e);
} }
} }
} }

View File

@ -32,22 +32,17 @@ public class PwvCalculator {
return false; return false;
} }
// 1. 计算ZHD静力学延迟标准Saastamoinen公式 // 1. 计算ZHD静力学延迟
double lat = Math.toRadians(data.getLatitude()); // 转换为弧度 double lat = Math.toRadians(data.getLatitude()); // 转换为弧度
double h = data.getHeight() / 1000.0; // 高度转换为千米 double zhd = (0.0022768 * data.getSurfacePressure()) /
double p = data.getSurfacePressure(); // 气压单位hPa (1 - 0.00266 * Math.cos(2 * lat) - 0.00028 * (data.getHeight() / 1000.0));
// 计算ZHD (单位mm) // 2. 计算ZWD湿延迟
// 标准公式ZHD = (2.2767 * p) / (1 - 0.00266 * cos() - 0.00028 * h)
double f = 1.0 - 0.00266 * Math.cos(2 * lat) - 0.00028 * h;
double zhd = (2.2767 * p) / f;
// 2. 计算ZWD湿延迟单位mm
double zwd = data.getZtd() - zhd; double zwd = data.getZtd() - zhd;
// 记录中间计算结果 // 记录中间计算结果
logger.info("ZHD计算中间值: 纬度={}°({}rad), 高度={}m({}km), 气压={}hPa, f={}, ZHD={}mm", logger.info("ZHD计算中间值: 纬度={}°({}rad), 高度={}m, 气压={}Pa, ZHD={}mm",
data.getLatitude(), lat, data.getHeight(), h, p, f, zhd); data.getLatitude(), lat, data.getHeight(), data.getSurfacePressure(), zhd);
// 3. 计算Tm加权平均温度 // 3. 计算Tm加权平均温度
double ts_K = data.getSurfaceTemp() + 273.15; // 转换为开尔文温度 double ts_K = data.getSurfaceTemp() + 273.15; // 转换为开尔文温度
@ -58,7 +53,7 @@ public class PwvCalculator {
double tao = b / (ROUW * RV * (K2P + K3 / tm)); double tao = b / (ROUW * RV * (K2P + K3 / tm));
// 5. 计算PWV以毫米为单位 // 5. 计算PWV以毫米为单位
double pwv = zwd * tao; double pwv = zwd * tao * 1000;
data.setPwv(pwv); data.setPwv(pwv);
logger.info("PWV计算成功: ZTD={}mm, ZHD={}mm, ZWD={}mm, Tm={}K, PWV={}mm", logger.info("PWV计算成功: ZTD={}mm, ZHD={}mm, ZWD={}mm, Tm={}K, PWV={}mm",
@ -69,4 +64,4 @@ public class PwvCalculator {
return false; return false;
} }
} }
} }