UNPKG

@v2x-three/cesium

Version:

V2X Cesium 核心库 - 基于Cesium的高性能地理可视化和车辆动画系统

410 lines (400 loc) 10.5 kB
import * as Cesium from 'cesium'; export { Cesium }; declare class MockWebSocket { constructor(url: any); url: any; readyState: 0; onopen: any; onmessage: any; onclose: any; onerror: any; startSendingMockData(): void; interval: NodeJS.Timeout | null | undefined; generateMockRSMData(): { msgType: string; rsuId: string; msgCnt: number; timestamp: number; refLongitude: number; refLatitude: number; refElevation: number; uuid: string; participants: { ptcId: number; ptcType: number; sourceType: number; ptcTimestamp: number; longitude: number; latitude: number; elevation: number; speed: number; heading: number; width: number; length: number; height: number; vehicleClass: number; fuelType: number; transmission: number; lonAccel: number; latAccel: number; vertAccel: number; yawRate: number; posConfidence: number; spdConfidence: number; headConfidence: number; }[]; }; close(): void; send(data: any): void; } declare namespace MockWebSocket { let CONNECTING: number; let OPEN: number; let CLOSING: number; let CLOSED: number; } /** * 智能实体管理器 * 统一处理车辆、非机动车、行人的创建、更新和智能清理 */ declare class EntityManager { constructor(viewer: any); viewer: any; entities: Map<any, any>; lastMessageIds: Set<any>; stats: { vehicleCount: number; bicycleCount: number; pedestrianCount: number; rsuCount: number; reservedCount: number; totalEntities: number; }; modelUrls: { vehicle: string; bicycle: string; pedestrian: string; }; realWorldDimensions: { 1: { length: number; width: number; height: number; scale: number; modelHeight: number; }; 2: { length: number; width: number; height: number; scale: number; modelHeight: number; }; 3: { length: number; width: number; height: number; scale: number; modelHeight: number; }; }; headingOffset: { 1: number; 2: number; 3: number; }; /** * 处理RSM参与者数据(主要入口) */ processParticipants(participants: any, timestamp: any): void; /** * 生成实体ID - 完全基于ptcId的唯一标识 */ generateEntityId(participant: any): string; /** * 更新或创建实体 */ updateEntity(entityId: any, participant: any, currentTime: any): void; /** * 创建实体 */ createEntity(entityId: any, participant: any): any; /** * 更新实体位置和方向 */ updateEntityTransform(entity: any, participant: any, position: any, currentTime: any): void; /** * 智能清理:删除不在当前消息中的实体 - 完全基于ptcId标识 */ cleanupMissingEntities(currentMessageIds: any): void; /** * 更新统计信息 */ updateStats(): void; /** * 如果是第一次有实体,飞到第一个实体位置 */ flyToFirstEntityIfNeeded(participants: any): void; /** * 清除所有实体 */ clearAllEntities(): void; /** * 获取统计信息 */ getStats(): { vehicleCount: number; bicycleCount: number; pedestrianCount: number; rsuCount: number; reservedCount: number; totalEntities: number; }; /** * 获取基于ptcId的设备详细信息 - 用于调试和监控 */ getDeviceInfo(): { devices: any[]; totalCount: number; devicesByType: any; oldestDevice: number; }; /** * 检查是否存在指定ptcId的设备 */ hasDevice(ptcId: any, ptcType: any): boolean; /** * 根据ptcId获取设备实体 */ getDeviceByPtcId(ptcId: any, ptcType: any): any; getEntityType(ptcType: any): "vehicle" | "bicycle" | "pedestrian" | "rsu" | "reserved"; getEntityTypeName(ptcType: any): "车辆" | "非机动车" | "行人" | "RSU" | "保留" | "未知"; /** * 🎯 获取实体缩放比例 - 基于真实世界尺寸 * 确保在任何视角下都显示合理的大小 */ getEntityScale(ptcType: any): number; /** * 🔍 获取最小像素尺寸 - 确保远距离可见性 */ getMinimumPixelSize(ptcType: any): 10 | 15 | 20; /** * 📏 获取最大缩放比例 - 防止近距离过大 */ getMaximumScale(ptcType: any): 15000 | 12000 | 10000 | 20000; /** * 📍 获取点标记大小 - 用于RSU等非3D模型实体 */ getPointSize(ptcType: any): 15 | 20; /** * 🎨 获取点标记颜色 - 用于RSU等非3D模型实体 */ getPointColor(ptcType: any): Cesium.Color; getLabelFont(ptcType: any): "12px Arial" | "11px Arial" | "10px Arial"; getLabelColor(ptcType: any): Cesium.Color; getLabelOffset(ptcType: any): Cesium.Cartesian2; generateLabelText(participant: any, entityTypeName: any): string; } /** * 🚀 高性能实体管理器 - 使用Cesium Primitive API优化渲染 * 修复版本:解决模型类型、性能卡顿和标签消失问题 * * 🚀 性能优势: * - 使用正确的模型URL配置 * - 减少不必要的异步操作 * - 添加插值和平滑移动 * - 修复标签显示系统 */ interface PrimitiveEntityManagerStats { totalEntities: number; vehicleCount: number; bicycleCount: number; pedestrianCount: number; memoryUsage: number; lastUpdateTime: number; createCount: number; updateCount: number; errorCount: number; } interface ModelConfig { url: string; scale: number; minimumPixelSize: number; maximumScale: number; headingOffset: number; } interface Participant { ptcId?: string; id?: string; ptcType?: number; lon?: number; longitude?: number; lat?: number; latitude?: number; height?: number; elevation?: number; heading?: number; pitch?: number; roll?: number; speed?: number; } interface EntityData { model: Cesium.Model; label: Cesium.Label; ptcType: number; lastUpdateTime: number; targetPosition?: Cesium.Cartesian3; targetHeading?: number; isAnimating?: boolean; } declare class PrimitiveEntityManager { viewer: Cesium.Viewer; scene: Cesium.Scene; primitiveCollection: Cesium.PrimitiveCollection; labelCollection: Cesium.LabelCollection; entities: Map<string, EntityData>; stats: PrimitiveEntityManagerStats; modelConfigs: Record<number, ModelConfig>; lastMessageIds: Set<string>; constructor(viewer: Cesium.Viewer); /** * 🏗️ 初始化集合 */ private initialize; /** * 🚗 处理参与者数据 - 主要入口(同步处理,避免性能问题) */ processParticipants(participants: Participant[]): void; /** * 📝 生成实体ID */ private generateEntityId; /** * 🔄 更新或创建实体 */ private updateEntity; /** * 🏗️ 创建新实体(同步创建,解决性能问题) */ private createEntity; /** * 🔧 更新实体位置和方向(添加平滑移动) */ private updateEntityTransform; /** * 🧹 清理不在当前消息中的实体 */ private cleanupMissingEntities; /** * 🗑️ 移除实体 */ private removeEntity; /** * 📊 更新统计信息 */ private updateStats; /** * 💾 估算内存使用 */ private estimateMemoryUsage; /** * 🧹 清除所有实体 */ clearAllEntities(): void; /** * 📊 获取统计信息 */ getStats(): PrimitiveEntityManagerStats; /** * 🔨 销毁管理器 */ destroy(): void; private getEntityTypeName; private getLabelFont; private getLabelColor; private getLabelOffset; private generateLabelText; } /** * 优化的WebSocket管理器 * 集成RSM数据处理和智能回调机制 */ declare class WebSocketManager { constructor(config: any); config: any; ws: MockWebSocket | WebSocket | null; reconnectAttempts: number; reconnectTimer: NodeJS.Timeout | null; isConnected: boolean; callbacks: { onConnectionChange: null; onRSMData: null; onStatsUpdate: null; onError: null; }; stats: { messageCount: number; participantCount: number; lastMessageTime: null; }; /** * 设置回调函数 */ setCallbacks(callbacks: any): void; /** * 连接WebSocket */ connect(): void; /** * 处理WebSocket消息 */ handleMessage(event: any): void; /** * 处理RSM消息 */ handleRSMMessage(rsmData: any): void; /** * 断开连接 */ disconnect(): void; /** * 完全销毁WebSocketManager实例 * 调用此方法后,实例将无法再使用 */ destroy(): void; /** * 切换模拟模式 */ toggleMockMode(): any; /** * 安排重连 */ scheduleReconnect(): void; /** * 触发连接状态变化回调 */ triggerConnectionChange(status: any): void; /** * 触发错误回调 */ triggerError(error: any): void; /** * 获取连接状态 */ getConnectionStatus(): "connected" | "connecting" | "disconnected"; /** * 获取统计信息 */ getStats(): { messageCount: number; participantCount: number; lastMessageTime: null; }; } declare function initViewer(options?: {}): Promise<Cesium.Viewer>; declare class MousePosition { constructor(viewer: any); } declare function modifyBuild(viewer: any): Promise<void>; export { EntityManager, MockWebSocket, MousePosition, PrimitiveEntityManager, WebSocketManager, initViewer, modifyBuild }; export type { ModelConfig, Participant, PrimitiveEntityManagerStats };