From 214d7aae19ed3bd80530e978c57ce27330b17b64 Mon Sep 17 00:00:00 2001 From: OpenAI Codex Date: Mon, 21 Sep 2026 21:29:56 +0800 Subject: [PATCH] fix: stabilize S-52 sprite registration --- web/kyushu_compare.html | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/web/kyushu_compare.html b/web/kyushu_compare.html index 3792a50..bb44b31 100644 --- a/web/kyushu_compare.html +++ b/web/kyushu_compare.html @@ -667,7 +667,13 @@ async function loadS52SpriteAtlas(){ }); return {metadata:metadata,image:image}; })(); - return s52SpriteAtlasPromise; + try{ + return await s52SpriteAtlasPromise; + }catch(err){ + // Do not permanently cache a transient fetch/image failure. + s52SpriteAtlasPromise=null; + throw err; + } } async function ensureS52SpriteImages(map){ @@ -726,7 +732,9 @@ function prepareS52Style(raw){ source.maxzoom=12; source.bounds=[128.0,29.5,132.5,34.8]; source.attribution="CM95 九州当前 S-52 Production"; - style.sprite=location.origin + "/s52/sprite"; + // Dynamic setStyle() and MapLibre's automatic sprite loader are unreliable + // in this comparison page. Register S-52 images explicitly after style.load. + delete style.sprite; if(referenceStyleTemplate && referenceStyleTemplate.glyphs){ style.glyphs=referenceStyleTemplate.glyphs; } @@ -745,6 +753,9 @@ async function ensureS52StyleTemplate(){ async function applyLeftStyleMode(){ if(debugLeftS52.checked){ setState(leftState,"加载完整 S-52 style…",""); + // Prefetch the atlas before setStyle so style.load only has to register + // already-local pixels; this avoids transient fetch failures mid-style swap. + await loadS52SpriteAtlas(); const raw=await ensureS52StyleTemplate(); const style=prepareS52Style(raw); activeLeftStyleTemplate=style;