优化三维导览模型加载与交互体验

This commit is contained in:
lyf
2026-06-27 23:49:38 +08:00
parent 4f6059bbdb
commit f043c85af0
12 changed files with 1433 additions and 509 deletions

View File

@@ -6,6 +6,9 @@ import type {
StaticNavPoiCategoryPayload,
StaticNavPoiPayload
} from '@/data/providers/staticNavAssetsProvider'
import {
isIndoorNavigableFloor
} from '@/domain/guideFloor'
const floorIdPattern = /^L(-?\d+(?:\.\d+)?)$/
@@ -31,6 +34,13 @@ export const navFloorIdFromLabel = (labelOrId: string) => {
return labelOrId
}
export const isStaticIndoorNavigableFloorId = (floorId: string) => (
isIndoorNavigableFloor({
floorId,
label: formatNavFloorLabel(floorId)
})
)
const toCategory = (category: StaticNavPoiCategoryPayload): MuseumCategory => ({
id: category.topCategory,
label: category.topCategoryZh,

View File

@@ -13,6 +13,9 @@ import type {
import {
NAV_ROUTE_UNAVAILABLE_MESSAGE
} from '@/domain/guideReadiness'
import {
isIndoorNavigableFloor
} from '@/domain/guideFloor'
import type {
SgsFloorDiagnosticsPayload,
SgsMapDiagnosticsPayload,
@@ -129,6 +132,8 @@ export const buildSgsFloorAliases = (floors: SgsSdkFloorSummaryPayload[]) => {
const aliases = new Map<string, string>()
floors.forEach((floor) => {
if (!isIndoorNavigableFloor(floor)) return
const floorId = stringifyId(floor.floorId)
if (!floorId) return
@@ -242,16 +247,17 @@ export const toGuideMapDiagnostics = (
const floors = diagnostics.floors?.length
? diagnostics.floors.map(toGuideFloorDetailFromSgs)
: (manifest?.floors || []).map(toGuideFloorDetailFromSgs)
const indoorFloors = floors.filter(isIndoorNavigableFloor)
return {
mapId: stringifyId(diagnostics.mapId || manifest?.mapId),
mapName: diagnostics.mapName || manifest?.mapName || 'SGS 地图',
sdkVersion: diagnostics.sdkVersion || manifest?.sdkVersion || undefined,
status: normalizeStatus(diagnostics.status),
floors,
floors: indoorFloors,
summary: {
floorCount: toNumber(summary.floorCount, floors.length),
modelReadyFloorCount: toNumber(summary.modelReadyFloorCount),
floorCount: indoorFloors.length,
modelReadyFloorCount: indoorFloors.filter((floor) => floor.modelReady === true).length || toNumber(summary.modelReadyFloorCount),
poiCount: toNumber(summary.poiCount),
spaceCount: toNumber(summary.spaceCount),
guideStopCount: toNumber(summary.guideStopCount),
@@ -267,7 +273,7 @@ export const toRouteReadinessFromSgsDiagnostics = (
diagnostics: SgsMapDiagnosticsPayload
): GuideRouteReadiness => {
const warnings = diagnostics.warnings || []
const floors = diagnostics.floors || []
const floors = (diagnostics.floors || []).filter(isIndoorNavigableFloor)
const notReadyFloors = floors.filter((floor) => (
floor.modelReady !== true
|| floor.routePlanningReady !== true