feat: 修正到达时间算法

This commit is contained in:
yarnom 2025-09-23 21:02:19 +08:00
parent a2a7cfd744
commit 5d6e967794
2 changed files with 15 additions and 2 deletions

View File

@ -104,6 +104,8 @@
let gWindFromDeg = null, gWindSpeedMS = null;
let gTimes = [];
let gCurrentIdx = -1;
// 当前渲染瓦片的时间(用于 ETA 基准时间)
let gTileDT = null;
function toRad(d){ return d * Math.PI / 180; }
function toDeg(r){ return r * 180 / Math.PI; }
@ -217,6 +219,8 @@
try{
const base = forcedDt ? new Date(forcedDt.replace(/-/g,'/')) : new Date(t.dt.replace(/-/g,'/'));
// 记录本次瓦片时间供 ETA 使用
gTileDT = base;
const ceil10=new Date(base); const m=base.getMinutes(); const up=(Math.floor(m/10)*10+10)%60; ceil10.setMinutes(up,0,0); if(up===0){ ceil10.setHours(base.getHours()+1); }
const pad=(n)=>String(n).padStart(2,'0'); const dtStr=`${ceil10.getFullYear()}-${pad(ceil10.getMonth()+1)}-${pad(ceil10.getDate())} ${pad(ceil10.getHours())}:${pad(ceil10.getMinutes())}:00`;
await loadRealtimeAt(dtStr);
@ -268,7 +272,10 @@
const statusEl=document.getElementById('sectorStatus'); const detailEl=document.getElementById('sectorDetail');
if(!best){ statusEl.textContent='无≥40 dBZ'; detailEl.classList.add('hidden'); }
else {
const etaSec=best.dist/gWindSpeedMS; const eta=new Date(Date.now()+etaSec*1000);
const etaSec=best.dist/gWindSpeedMS;
// 使用雷达瓦片时间作为 ETA 基准
const base = gTileDT instanceof Date ? gTileDT : new Date();
const eta=new Date(base.getTime()+etaSec*1000);
const pad=(n)=>String(n).padStart(2,'0'); const etaStr=`${eta.getFullYear()}-${pad(eta.getMonth()+1)}-${pad(eta.getDate())} ${pad(eta.getHours())}:${pad(eta.getMinutes())}`;
document.getElementById('sectorDist').textContent=(best.dist/1000).toFixed(1);
document.getElementById('sectorETA').textContent=etaStr;

View File

@ -103,6 +103,8 @@
let gWindFromDeg = null, gWindSpeedMS = null;
let gTimes = [];
let gCurrentIdx = -1;
// 当前渲染瓦片的时间(用于 ETA 基准时间)
let gTileDT = null;
async function loadLatestTile() {
const res = await fetch('/api/radar/latest?z=7&y=40&x=102');
@ -286,6 +288,8 @@
try {
const dt = forcedDt ? new Date(forcedDt.replace(/-/g,'/')) : new Date(t.dt.replace(/-/g,'/'));
// 记录本次瓦片的时间,供 ETA 计算使用
gTileDT = dt;
const ceil10 = new Date(dt);
const m = dt.getMinutes();
const up = (Math.floor(m/10)*10 + 10) % 60;
@ -421,7 +425,9 @@
detailEl.classList.add('hidden');
}else{
const etaSec = best.dist / gWindSpeedMS;
const eta = new Date(Date.now() + etaSec*1000);
// 使用雷达瓦片时间作为 ETA 基准
const base = gTileDT instanceof Date ? gTileDT : new Date();
const eta = new Date(base.getTime() + etaSec*1000);
const pad = (n)=> String(n).padStart(2,'0');
const etaStr = `${eta.getFullYear()}-${pad(eta.getMonth()+1)}-${pad(eta.getDate())} ${pad(eta.getHours())}:${pad(eta.getMinutes())}`;
document.getElementById('sectorDist').textContent = (best.dist/1000).toFixed(1);