feat: 修正到达时间算法
This commit is contained in:
parent
a2a7cfd744
commit
5d6e967794
@ -104,6 +104,8 @@
|
|||||||
let gWindFromDeg = null, gWindSpeedMS = null;
|
let gWindFromDeg = null, gWindSpeedMS = null;
|
||||||
let gTimes = [];
|
let gTimes = [];
|
||||||
let gCurrentIdx = -1;
|
let gCurrentIdx = -1;
|
||||||
|
// 当前渲染瓦片的时间(用于 ETA 基准时间)
|
||||||
|
let gTileDT = null;
|
||||||
|
|
||||||
function toRad(d){ return d * Math.PI / 180; }
|
function toRad(d){ return d * Math.PI / 180; }
|
||||||
function toDeg(r){ return r * 180 / Math.PI; }
|
function toDeg(r){ return r * 180 / Math.PI; }
|
||||||
@ -217,6 +219,8 @@
|
|||||||
|
|
||||||
try{
|
try{
|
||||||
const base = forcedDt ? new Date(forcedDt.replace(/-/g,'/')) : new Date(t.dt.replace(/-/g,'/'));
|
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 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`;
|
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);
|
await loadRealtimeAt(dtStr);
|
||||||
@ -268,7 +272,10 @@
|
|||||||
const statusEl=document.getElementById('sectorStatus'); const detailEl=document.getElementById('sectorDetail');
|
const statusEl=document.getElementById('sectorStatus'); const detailEl=document.getElementById('sectorDetail');
|
||||||
if(!best){ statusEl.textContent='无(≥40 dBZ)'; detailEl.classList.add('hidden'); }
|
if(!best){ statusEl.textContent='无(≥40 dBZ)'; detailEl.classList.add('hidden'); }
|
||||||
else {
|
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())}`;
|
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('sectorDist').textContent=(best.dist/1000).toFixed(1);
|
||||||
document.getElementById('sectorETA').textContent=etaStr;
|
document.getElementById('sectorETA').textContent=etaStr;
|
||||||
|
|||||||
@ -103,6 +103,8 @@
|
|||||||
let gWindFromDeg = null, gWindSpeedMS = null;
|
let gWindFromDeg = null, gWindSpeedMS = null;
|
||||||
let gTimes = [];
|
let gTimes = [];
|
||||||
let gCurrentIdx = -1;
|
let gCurrentIdx = -1;
|
||||||
|
// 当前渲染瓦片的时间(用于 ETA 基准时间)
|
||||||
|
let gTileDT = null;
|
||||||
|
|
||||||
async function loadLatestTile() {
|
async function loadLatestTile() {
|
||||||
const res = await fetch('/api/radar/latest?z=7&y=40&x=102');
|
const res = await fetch('/api/radar/latest?z=7&y=40&x=102');
|
||||||
@ -286,6 +288,8 @@
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
const dt = forcedDt ? new Date(forcedDt.replace(/-/g,'/')) : new Date(t.dt.replace(/-/g,'/'));
|
const dt = forcedDt ? new Date(forcedDt.replace(/-/g,'/')) : new Date(t.dt.replace(/-/g,'/'));
|
||||||
|
// 记录本次瓦片的时间,供 ETA 计算使用
|
||||||
|
gTileDT = dt;
|
||||||
const ceil10 = new Date(dt);
|
const ceil10 = new Date(dt);
|
||||||
const m = dt.getMinutes();
|
const m = dt.getMinutes();
|
||||||
const up = (Math.floor(m/10)*10 + 10) % 60;
|
const up = (Math.floor(m/10)*10 + 10) % 60;
|
||||||
@ -421,7 +425,9 @@
|
|||||||
detailEl.classList.add('hidden');
|
detailEl.classList.add('hidden');
|
||||||
}else{
|
}else{
|
||||||
const etaSec = best.dist / gWindSpeedMS;
|
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 pad = (n)=> String(n).padStart(2,'0');
|
||||||
const etaStr = `${eta.getFullYear()}-${pad(eta.getMonth()+1)}-${pad(eta.getDate())} ${pad(eta.getHours())}:${pad(eta.getMinutes())}`;
|
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('sectorDist').textContent = (best.dist/1000).toFixed(1);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user