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

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

143
static/sgs-map-sdk/index.d.ts vendored Normal file
View File

@@ -0,0 +1,143 @@
declare class EventEmitter<Events extends Record<string, any>> {
private events;
constructor();
on<K extends keyof Events>(event: K, listener: (payload: Events[K]) => void): void;
off<K extends keyof Events>(event: K, listener: (payload: Events[K]) => void): void;
emit<K extends keyof Events>(event: K, data: Events[K]): void;
}
/** 统一位置描述符 */
type SgsMapNode = {
type: 'coord';
floorId: number;
x: number;
z: number;
y?: number;
} | {
type: 'poiId';
value: number;
} | {
type: 'nodeName';
value: string;
};
/** 单点吸附详情 */
interface SnapDetail {
original: {
x: number;
z: number;
};
nearest: {
x: number;
z: number;
};
distance: number;
}
/** 寻路结果 */
interface RouteResult {
success: boolean;
distance: number;
duration: number;
pathPoints: Array<{
x: number;
y: number;
z: number;
}>;
startSnap: SnapDetail;
endSnap: SnapDetail;
computeTimeMs: number;
polyCount: number;
warnings: string[];
errorCode?: string;
message?: string;
}
/** 寻路选项 */
interface RouteOptions {
mode?: 'walk' | 'accessible';
}
/** SDK 初始化配置 */
interface SGSMapSDKOptions {
container: string | HTMLElement;
sdkUrl?: string;
targetOrigin?: string;
floorId?: number;
timeout?: number;
}
/** SDK 事件映射 */
interface SGSMapEvents {
ready: {
engineVersion: string;
protocolVersion: number;
};
poiClick: {
id: number;
name: string;
type: string;
floorId?: number;
description?: string;
};
floorChanged: {
floorId: number;
};
error: {
code: string;
message: string;
};
loadError: {
type: string;
detail: string;
};
}
/** SDK 错误码 */
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';
/** 图钉配置参数 */
interface MarkerConfig {
id: string;
name?: string;
iconUrl?: string;
anchorNodeName?: string;
position?: [number, number, number] | {
x: number;
y: number;
z: number;
};
}
declare class SGSMapSDK extends EventEmitter<SGSMapEvents> {
private container;
private sdkUrl;
private floorId;
private targetOrigin;
private iframe;
private isReady;
private defaultTimeout;
private promiseQueue;
private _messageListener;
constructor(options: SGSMapSDKOptions);
private _initIframeBridge;
private _generateRequestId;
private _postCommand;
private _postCommandAsync;
getIsReady(): boolean;
getCurrentFloor(): number;
focusTo(node: SgsMapNode | string): void;
changeFloor(floorId: number, timeout?: number): Promise<{
success: boolean;
floorId: number;
}>;
addMarker(config: MarkerConfig): void;
removeMarker(markerId: string): void;
clearMarkers(): void;
highlightPolygon(nodeName: string): void;
planRoute(from: SgsMapNode | string, to: SgsMapNode | string, options?: any, timeout?: number): Promise<RouteResult>;
clearRoute(): void;
getState(): Promise<any>;
resetView(): void;
setViewMode(mode: '2d' | '3d'): void;
toggleLayer(types: string[], visible: boolean, timeout?: number): Promise<{
success: boolean;
visibleTypes: string[];
}>;
destroy(): void;
}
export { type MarkerConfig, type RouteOptions, type RouteResult, type SGSErrorCode, type SGSMapEvents, type SGSMapSDKOptions, type SgsMapNode, type SnapDetail, SGSMapSDK as default };