You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Thingsboard中实现车辆行驶路线可视化?

Thingsboard仪表盘路线显示实现方案

问题背景

我是Thingsboard新手,已创建仪表盘展示两个枢纽地点与一辆车辆,但不知如何实现路线显示。当前做法如下:

1. JSON定义路线

"route":{
    "name": "Route for Working Plan 1",
    "num_route": 0,
    "pos":  0,
    "arrival_time": "",
    "departure_time": "",
    "arr_veh_weight": 0.0,
    "dep_veh_weight": 0.0,
    "arrive_veh_items": 0,
    "dep_veh_items": 0,
    "accu_distance_km": 0.0,
    "point_List":
      "(41.6721, -0.8899), (41.6705, -0.8902), (41.6688, -0.8904), (41.6672, -0.8907), (41.6656, -0.8909), (41.6639, -0.8912), (41.6623, -0.8914), (41.6607, -0.8917), (41.6590, -0.8919), (41.6574, -0.8922), (41.6558, -0.8924), (41.6542, -0.8927), (41.6525, -0.8929), (41.6509, -0.8932), (41.6493, -0.8934), (41.6476, -0.8937), (41.6460, -0.8939), (41.6444, -0.8942), (41.6427, -0.8944), (41.6411, -0.8947)"
}

2. 按时间戳发送遥测数据

telemetry = []

ts = int(time.time() * 1000)
for route_point in route_points_lat:
    ts = ts

    telemetry.append({
        "ts": ts,
        "values": {
            "latitude": route_point,
            "longitude": route_points_lon[pos]
        }
    })

    pos += 1
    ts += 1000
 
    ...
try:
    route_point_tb_asset = API.find_asset(route.name)
    send_telemetry_asset(token, route_point_tb_asset.id.id, telemetry)
    print(f"Telemetry properly sent to {route.name}")

目前仅能看到发送给资产的最后一个点位,需要实现路线显示效果。


解决方案

核心问题

默认地图部件只显示最新单个点位,要绘制路线需调整数据格式或部件配置,以下两种方法任选:

方法1:静态路线(一次性绘制整条路线)

适合展示固定规划路线:

  1. 调整数据发送格式:将路线点位转换为GeoJSON的LineString格式,作为单个遥测字段发送(注意GeoJSON坐标顺序是[经度, 纬度]):
{
  "route_line": {
    "type": "LineString",
    "coordinates": [
      [-0.8899, 41.6721],
      [-0.8902, 41.6705],
      // 依次添加所有点位坐标
    ]
  }
}
  1. 仪表盘配置:
    • 添加「地图」部件,进入编辑模式
    • 在「图层」中添加轨迹图层
    • 绑定资产的route_line遥测字段,设置路线颜色、线宽等样式

方法2:实时轨迹(基于历史点位绘制)

适合展示车辆移动的动态轨迹:

  1. 确认数据存储:先检查资产的「遥测」页面,确保每个时间戳的经纬度都已成功写入(如果数据只存最后一条,检查发送逻辑是否有覆盖问题)
  2. 部件配置:
    • 添加「地图」部件,编辑时选择标记图层,绑定车辆的latitude和longitude字段
    • 开启「显示轨迹」选项,设置轨迹的时间范围(如最近1小时)、轨迹样式
    • 地图会自动连接该资产在指定时间范围内的所有历史点位,形成连续路线

当前代码优化

原代码中ts = ts是冗余代码,且用pos索引容易出错,建议改为同时遍历经纬度:

telemetry = []
ts = int(time.time() * 1000)
# 用zip同时遍历经纬度,避免索引越界
for lat, lon in zip(route_points_lat, route_points_lon):
    telemetry.append({
        "ts": ts,
        "values": {
            "latitude": lat,
            "longitude": lon
        }
    })
    ts += 1000  # 每个点位间隔1秒

try:
    route_point_tb_asset = API.find_asset(route.name)
    send_telemetry_asset(token, route_point_tb_asset.id.id, telemetry)
    print(f"Telemetry properly sent to {route.name}")
except Exception as e:
    print(f"Failed to send telemetry: {str(e)}")

内容的提问来源于stack exchange,提问作者Jesús Navarro Hernández

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 15:18:26