修复 SGS SDK 导览数据源与模型加载

升级 SDK API 数据契约,补齐 guideStops、业务 POI、诊断与路线数据接口。

修复 SDK 模式下 POI/模型/楼层混用静态数据的问题,并为 ThreeMap 模型加载增加短退避重试。
This commit is contained in:
lyf
2026-07-02 10:26:52 +08:00
parent 9efcef5190
commit 7cda427de9
13 changed files with 966 additions and 104 deletions

View File

@@ -350,6 +350,7 @@ const floorExitConfirmThresholdMultiplier = 1.34
const floorExitZoomOutIntentMinDeltaRatio = 0.015
const floorExitAccumulatedZoomOutRatio = 0.26
const floorExitCandidateHoldMs = 900
const modelLoadRetryDelaysMs = [300, 900]
const syncControlInteractionOptions = () => {
if (!controls) return
@@ -2165,7 +2166,11 @@ const clearSceneData = () => {
clearPoiGroupChildren()
}
const loadModel = (
const wait = (delayMs: number) => new Promise<void>((resolve) => {
window.setTimeout(resolve, delayMs)
})
const loadModelOnce = (
url: string,
label: string,
loadToken?: number,
@@ -2193,6 +2198,41 @@ const loadModel = (
)
})
const loadModel = async (
url: string,
label: string,
loadToken?: number,
options: LoadModelOptions = {}
) => {
let lastError: unknown = null
for (let attempt = 0; attempt <= modelLoadRetryDelaysMs.length; attempt += 1) {
if (loadToken !== undefined && !isCurrentModelLoad(loadToken)) {
throw createStaleModelLoadError()
}
try {
return await loadModelOnce(url, label, loadToken, options)
} catch (error) {
if (loadToken !== undefined && !isCurrentModelLoad(loadToken)) {
throw createStaleModelLoadError()
}
lastError = error
const retryDelay = modelLoadRetryDelaysMs[attempt]
if (retryDelay === undefined) break
if (!options.suppressProgress) {
setProgress(18, `${label} 加载失败,正在重试 ${attempt + 1}/${modelLoadRetryDelaysMs.length}`)
}
await wait(retryDelay)
}
}
throw lastError instanceof Error ? lastError : new Error('模型资源加载失败')
}
const prepareModel = (model: THREE.Object3D) => {
model.traverse((child) => {
if (child instanceof THREE.Mesh) {