提交室内导览交互与讲解优化

This commit is contained in:
lyf
2026-06-14 23:48:13 +08:00
parent a7c1879f60
commit feb7310a46
33 changed files with 3257 additions and 361 deletions

88
src/types/sgs-map-sdk.ts Normal file
View File

@@ -0,0 +1,88 @@
export type SgsMapNode =
| { type: 'coord'; floorId: number; x: number; z: number; y?: number }
| { type: 'poiId'; value: number }
| { type: 'nodeName'; value: string }
export interface SgsSnapDetail {
original: { x: number; z: number }
nearest: { x: number; z: number }
distance: number
}
export interface SgsRouteResult {
success: boolean
distance: number
duration: number
pathPoints: Array<{ x: number; y: number; z: number }>
startSnap: SgsSnapDetail
endSnap: SgsSnapDetail
computeTimeMs: number
polyCount: number
warnings: string[]
errorCode?: string
message?: string
}
export interface SgsMapSDKOptions {
container: string | HTMLElement
sdkUrl?: string
targetOrigin?: string
floorId?: number
timeout?: number
}
export interface SgsMapEvents {
ready: { engineVersion: string; protocolVersion: number }
poiClick: { id?: number; poiId?: number; name: string; type: string; floorId?: number; description?: string }
floorChanged: { floorId: number }
error: { code: string; message: string }
loadError: { type: string; detail: string }
}
export type SgsErrorCode =
| 'ERR_TIMEOUT'
| 'ERR_NO_PATH'
| 'ERR_FLOOR_NOT_FOUND'
| 'ERR_NOT_READY'
| 'ERR_POI_NOT_FOUND'
| 'ERR_NETWORK'
| 'ERR_IFRAME_DEAD'
| 'ERR_UNAUTHORIZED'
| 'ERR_UNSUPPORTED'
| 'ERR_FAILED'
export interface SgsMarkerConfig {
id: string
name?: string
iconUrl?: string
anchorNodeName?: string
position?: [number, number, number] | { x: number; y: number; z: number }
}
export interface SgsMapSDKInstance {
on<K extends keyof SgsMapEvents>(event: K, listener: (payload: SgsMapEvents[K]) => void): void
off<K extends keyof SgsMapEvents>(event: K, listener: (payload: SgsMapEvents[K]) => void): void
getIsReady(): boolean
getCurrentFloor(): number
focusTo(node: SgsMapNode | string): void
changeFloor(floorId: number, timeout?: number): Promise<{ success: boolean; floorId: number }>
addMarker(config: SgsMarkerConfig): void
removeMarker(markerId: string): void
clearMarkers(): void
highlightPolygon(nodeName: string): void
planRoute(from: SgsMapNode | string, to: SgsMapNode | string, options?: unknown, timeout?: number): Promise<SgsRouteResult>
clearRoute(): void
getState(): Promise<unknown>
resetView(): void
setViewMode(mode: '2d' | '3d'): void
toggleLayer(types: string[], visible: boolean, timeout?: number): Promise<{ success: boolean; visibleTypes: string[] }>
destroy(): void
}
export type SgsMapSDKConstructor = new (options: SgsMapSDKOptions) => SgsMapSDKInstance
declare global {
interface Window {
SGSMapSDK?: SgsMapSDKConstructor
}
}