当前位置: 首页 > backend >正文

Vue3 + MQTT + 高德地图 实现车辆在线状态与实时位置更新

在车联网项目中,我们经常需要实时接收设备(车辆)状态、GPS 位置数据,并且动态更新到前端界面。本篇文章将结合 Vue3 + TypeScript  + MQTT + 高德地图,实现以下功能:

  • 🚦 车辆上下线状态实时更新(在线、离线、行驶、停车)

  • 📡 接收设备的 GPS 数据并动态更新位置

  • 🗺️ 与全局车辆信息绑定,实现响应式更新


一、MQTT 客户端封装

首先,我们基于 mqtt.js 封装一个 useMqtt 方法,用于连接 MQTT Broker 并处理消息。

(MQTT 订阅流程图 + 数据流转图)

import mqtt from "mqtt";
import { deviceStatusMap, latestLocationMap } from './deviceCache';export type DeviceStatus = 'online' | 'online_driving' | 'offline' | 'online_parking';const BROKER_URL = "你的MQTT Broker 的 WebSocket 接入地址";const statusMap: Record<string, DeviceStatus> = {'client.connected': 'online','client.disconnected': 'offline',
};export function useMqtt(onMessageCallback: (deviceId: string,data: { status: DeviceStatus; location: any; }) => void
) {const client = mqtt.connect(BROKER_URL);client.on("connect", () => {console.log("✅ [MQTT] Connected");const topics = ["device/status","login","dataStream/+/GPS",];topics.forEach((topic) => {client.subscribe(topic, (err) => {if (err) console.error(`❌ 订阅 ${topic} 失败`, err);else console.log(`📡 已订阅 topic: ${topic}`);});});});client.on("message", (topic, message) => {console.log("📨 收到 Topic:", topic);console.log("📦 原始消息:", message.toString());const str = message.toString();if (!str) return;try {// 设备上下线事件if (topic === "device/status") {/*** 预期消息格式:* {*   "clientid":"DEV001",*   "event":
http://www.xdnf.cn/news/19526.html

相关文章:

  • 云手机和云游戏之间有着哪些区别?
  • qData 数据中台【开源版】发布 1.0.4 版本,全面升级数据清洗与资产管理能力
  • 使用LoadBalancer替换Ribbon(五)
  • 使用C#语言 基于FTP协议进行文件夹上传下载
  • ansible知识点总结1
  • C/C++ Linux系统编程:进程通讯完全指南,管道通讯、共享内存以及消息队列
  • Linux之Docker虚拟化技术(三)
  • nacos微服务介绍及环境搭建
  • Oracle 查询有哪些用户 提示用户名密码无效
  • AI 入门指南:从 “听不懂人话” 到 “比你懂你”,人工智能到底是个啥?
  • shell编程 函数、数组与正则表达式
  • 网络与信息安全有哪些岗位:(13)安全服务工程师 / 顾问
  • pip不是内部或外部命令的问题怎么解决?
  • 基于.NET Framework 4.0的FTP文件传输类
  • 【云存储桶安全】怎么满足业务需求,又最大程度上满足信息安全要求呢?
  • 构建深度学习音频识别模型:从数据预处理到性能评估
  • 【K8s】整体认识K8s之监控与升级/ETCD的备份和恢复/kustomization/CRD
  • wpf之样式
  • PAT 1089 Insert or Merge
  • UBUNTU之Onvif开源服务器onvif_srvd:1、编译
  • 如何使用VMware创建一台Ubuntu机器
  • Shell脚本实用技巧集锦:从时间判断到系统监控
  • 【数据可视化-104】安徽省2025年上半年GDP数据可视化分析:用Python和Pyecharts打造炫酷大屏
  • HTTP/2 多路复用
  • 网络流量分析——熟悉Wireshark
  • 时序数据库国产的有哪些?
  • ​​--flush-logs 的作用:刷新 MySQL 的日志文件(主要是二进制日志 binlog)​
  • 解析简历重难点与面试回答要点
  • 【开题答辩全过程】以 健身爱好者饮食管理小程序为例,包含答辩的问题和答案
  • LeetCode82删除排序链表中的重复元素 II