在充电设施管理系统中应用飞渡 DTS 的技术实践

148 阅读3分钟

在充电设施管理系统中应用飞渡 DTS 的技术实践


一、坐标系处理规范

1.1 坐标系转换标准实现

// 严格遵循飞渡坐标转换规范
const transformCoordsByType = (rawCoords, type) => {
  /*
  坐标系类型说明:
  1: WGS84 -> BD09
  2: WGS84 -> GCJ02 (本项目采用)
  3: GCJ02 -> BD09
  */
  return __g.coord.transform(rawCoords, type);
};

// 实际应用案例
const deviceCoords = transformCoordsByType(
  [113.324553, 23.102871],
  2 // 明确指定转换类型
);

为什么需要转换

  1. 设备原始坐标(WGS84)与国内地图存在偏移
  2. 飞渡三维场景使用 GCJ02 坐标系
  3. 保证业务坐标与地图底图精确对齐

二、事件系统实现规范

2.1 事件监听与处理

// 注册全局事件监听器
useEmitt("AIRCITY_EVENT", (e) => {
  switch (e.eventtype) {
    case "LeftMouseButtonClick":
      if (e.GroupID === "charging-points") {
        const data = JSON.parse(e.UserData);
        handleDeviceClick(data);
      }
      break;
    case "MarkerCallBack":
      if (e.ID === "detail-close-btn") {
        __g.infoWindow.hideAll();
      }
      break;
  }
});

// 设备点击处理
const handleDeviceClick = (data) => {
  __g.camera.set(
    data.x + 50,
    data.y + 50,
    120,
    -45,
    60,
    2 // 2秒平滑过渡
  );
  showDevicePopup(data);
};

关键规范

  • 使用官方事件类型命名(LeftMouseButtonClick)
  • 通过 GroupID 过滤目标图层事件
  • 相机移动必须设置过渡时间参数

三、三维场景构建实践

3.1 动态图层管理

// 初始化加载
const loadPoints = async () => {
  const res = await Api.getDeviceData();
  createMarkers(res.data);
};

// 创建标记层
const createMarkers = (devices) => {
  const markers = devices.map((device, index) => ({
    id: `device_${device.id}`,
    groupId: "charging-points",
    coordinate: transformCoordsByType([device.lng, device.lat], 2),
    imagePath: getStatusIcon(device.status),
    imageSize: [scale(32), scale(32)],
    userData: JSON.stringify(device),
  }));

  __g.marker.add(markers, null);
};

// 状态图标映射
const getStatusIcon = (status) => {
  const iconMap = {
    0: "idle.png",
    1: "charging.png",
    2: "fault.png",
  };
  return getImageByCloud(iconMap[status]);
};

实现要点

  • 使用 groupId 进行图层分类管理
  • userData 必须序列化存储设备数据
  • 图标路径通过云服务接口获取

四、开发注意事项

4.1 内存管理规范

// 组件卸载时清理资源
onBeforeUnmount(async () => {
  await __g.marker.deleteByGroupId("charging-points");
  __g.infoWindow.hideAll();
  __g.infoTree.clear();
});

必须操作

  1. 按组删除标记图层
  2. 关闭所有信息窗口
  3. 清空信息树数据

4.2 交互优化建议

// 高频事件防抖处理
let debounceTimer;
const handleCameraMove = (position) => {
  clearTimeout(debounceTimer);
  debounceTimer = setTimeout(() => {
    saveViewport(position);
  }, 500);
};

// 注册相机移动事件
useEmitt("AIRCITY_EVENT", (e) => {
  if (e.eventtype === "CameraMoving") {
    handleCameraMove(e.CameraPosition);
  }
});

优化建议

  • 对 CameraMoving 等高频率事件进行防抖
  • 避免在事件回调中执行重操作
  • 使用 Web Worker 处理复杂计算

五、技术实现价值

通过飞渡 DTS 的技术规范实现,本方案展现了以下核心优势:

  1. 标准化开发流程

    • 统一的事件处理机制确保交互逻辑清晰
    • 严格的坐标系转换规范消除定位偏差
    • 显式的资源管理策略避免内存泄漏
  2. 高效可视化能力

    • 动态图层管理支持实时数据更新
    • 智能视角控制提升用户体验
    • 状态驱动的图标系统直观反映设备运行
  3. 工程化实践价值

    • 组件化的代码结构提升可维护性
    • 类型安全的 TS 实现降低运行时错误
    • 官方 API 的规范使用保障系统稳定性

技术选型启示

  • 飞渡 DTS 的坐标系管理系统能有效解决多源数据融合问题
  • 事件驱动的架构设计适合需要复杂交互的三维场景
  • 官方提供的图层管理 API 大幅降低开发复杂度

这套技术方案为新型基础设施的数字化管理提供了可靠的三维可视化基础,其规范化的实现方式也可为其他地理信息系统的开发提供参考范式。