thingsboard/summary/28-地图组件配置检查指南.md

10 KiB
Raw Blame History

地图组件配置检查指南

检查结果

从数据库和日志检查发现DEMO 仪表盘中有一个地图组件配置,存在以下配置错误

1. 位置数据类型配置错误 ⚠️ 关键问题

问题描述:

  • 地图配置中X轴纬度和Y轴经度都设置为 "type": "attribute"(属性类型)
  • X轴键名drone.latitude
  • Y轴键名drone.longitude

实际数据情况(从日志确认):

  • 设备发送的位置数据是遥测数据timeseries不是属性
  • 日志中可以看到:"drone.longitude":112.96570521660297,"drone.latitude":25.70685363466869
  • 这些数据在遥测数据中,不在属性中

问题原因:

  • 地图配置查找的是属性attribute但设备数据在遥测timeseries
  • 导致地图无法获取位置信息,设备无法显示在地图上

地图组件支持的数据类型:

  • timeseries(遥测数据)- 支持
  • attribute(属性)- 支持
  • function(函数)- 支持

结论: 地图不是只能用 attribute,可以修改为 timeseries

2. 默认中心位置配置

当前配置:

  • "defaultCenterPosition": "0,0" - 这是赤道和本初子午线的交点(大西洋中部)
  • "useDefaultCenterPosition": false - 已禁用,会尝试根据数据自动调整

建议:

  • 如果设备位置数据存在,地图应该会自动调整到设备位置
  • 如果看不到设备,可能是位置数据不存在或数据类型不匹配

3. 数据源配置

当前配置:

  • "dsType": "device" - 直接关联到单个设备
  • "dsDeviceId": "fc1be8f0-b95d-11f0-8c0a-afd4d00ac98a" - 设备ID7CTDM7H00B5EM1

修复建议

方案1检查数据实际类型

在 ThingsBoard Web UI 中:

  1. 进入设备详情页:7CTDM7H00B5EM1
  2. 查看 Latest Telemetry 标签页
  3. 检查是否有 drone.latitudedrone.longitude 数据
  4. 查看 Attributes 标签页
  5. 检查是否有 drone.latitudedrone.longitude 属性

根据实际情况:

  • 如果数据在 Telemetry 中 → 将地图配置中的 type 改为 "timeseries"
  • 如果数据在 Attributes 中 → 保持 type"attribute"

方案2在 Web UI 中修正地图配置(推荐)

确认:位置数据是遥测数据,需要在 Web UI 中修改配置

重要说明:

  1. 地图组件有 Basic ModeAdvanced Mode 两种配置模式
  2. Basic Mode 下可能无法直接配置数据键类型
  3. 需要先切换到 Advanced Mode,然后才能配置标记点的数据键

操作步骤:

步骤1切换到 Advanced Mode

  1. 打开地图组件配置:

    • 在 DEMO 仪表盘中,点击地图组件
    • 点击编辑按钮(或右键 → 编辑)
  2. 切换到 Advanced Mode

    • 在配置面板顶部找到切换按钮
    • 应该显示 "Basic Mode""Advanced Mode" 两个选项
    • 点击 "Advanced Mode" 切换到高级模式

步骤2配置 Markers 数据键

  1. 进入 Markers 配置:

    • 在 Advanced Mode 的配置面板中,找到 "Overlays"(覆盖层)部分
    • 应该可以看到 MarkersPolygonsCircles 等选项
    • 点击 "Markers" 标签
  2. 编辑标记点配置:

    • 找到标记点列表(应该有一个标记点)
    • 点击标记点右侧的编辑按钮(或点击标记点本身)
    • 这会打开标记点配置对话框
  3. 修改 Latitude纬度配置

    • 在标记点配置对话框中,找到 Latitude 字段(显示 drone.latitude
    • 点击字段右侧的 "×" 按钮,删除当前数据键
    • 在输入框中输入:drone.latitude
    • 系统会自动显示下拉列表,选择带有 timeline 图标📈)的选项(表示 timeseries
    • 不要选择带 "A" 图标(表示 attribute的选项
  4. 修改 Longitude经度配置

    • 找到 Longitude 字段(显示 drone.longitude
    • 点击字段右侧的 "×" 按钮,删除当前数据键
    • 在输入框中输入:drone.longitude
    • 系统会自动显示下拉列表,选择带有 timeline 图标📈)的选项(表示 timeseries
    • 不要选择带 "A" 图标(表示 attribute的选项
  5. 保存配置:

    • 点击标记点配置对话框底部的 "应用""保存" 按钮
    • 点击地图组件配置面板底部的 "应用" 按钮
    • 刷新仪表盘查看效果

如果找不到切换按钮:

  • 检查配置面板顶部是否有 "Basic Mode" / "Advanced Mode" 切换开关
  • 如果看不到切换按钮,可能是当前已经在 Advanced Mode 了
  • 直接进入步骤2在配置面板中查找 Markers 配置部分

图标识别:

  • 📈 timeline 图标 = Timeseries遥测数据- 选择这个
  • 🔵 "A" 图标 = Attribute属性- 不要选这个

配置位置图示:

地图组件配置
├── Markers
│   └── [标记点配置] → 点击编辑
│       ├── Latitude 字段
│       │   ├── 删除当前值(点击 ×
│       │   ├── 输入: drone.latitude
│       │   └── 选择 📈 图标Timeseries← 重要!
│       └── Longitude 字段
│           ├── 删除当前值(点击 ×
│           ├── 输入: drone.longitude
│           └── 选择 📈 图标Timeseries← 重要!

方案3设置合适的默认中心位置

如果设备位置在中国:

  1. 在地图配置中,设置:
    • "useDefaultCenterPosition": true
    • "defaultCenterPosition": "35,110" (中国中心位置,可根据实际情况调整)
    • "defaultZoomLevel": 6 (合适的缩放级别)

配置检查清单

已检查项

  • 地图类型:geoMap(地理地图)
  • 地图提供商:openstreetOpenStreetMap
  • 数据源类型:device(设备)
  • 设备ID已配置fc1be8f0-b95d-11f0-8c0a-afd4d00ac98a
  • 标记点配置存在
  • 标签显示:${entityName}
  • 工具提示已配置 ✓

已确认项

  • 位置数据是遥测数据:从日志确认,数据在 timeseries 中
  • 位置数据键名drone.latitudedrone.longitude
  • 位置数据存在:设备正在发送位置数据 ✓
  • 配置错误:地图配置为 attribute,但数据是 timeseries ⚠️

⚠️ 需要修复项

  • 修改数据类型
    1. 删除 Latitude 字段的当前数据键(点击 ×
    2. 重新输入 drone.latitude,选择带 📈 图标的选项Timeseries
    3. 删除 Longitude 字段的当前数据键(点击 ×
    4. 重新输入 drone.longitude,选择带 📈 图标的选项Timeseries
    5. 保存配置

常见问题

Q1: 地图显示空白

可能原因:

  1. 位置数据类型不匹配(配置为 attribute但数据是 timeseries
  2. 位置数据键名不正确
  3. 设备没有发送位置数据

解决方法:

  1. 检查设备实际发送的数据(在设备详情页查看 Latest Telemetry
  2. 确认键名和类型
  3. 在地图配置中删除并重新选择数据键,确保选择 timeseries 类型(📈 图标)

Q1.1: 找不到配置的地方 / 找不到类型选择下拉框

问题: 在地图配置中找不到配置 Latitude/Longitude 的地方,或者找不到类型选择下拉框

可能原因:

  1. 当前在 Basic ModeBasic Mode 可能不显示详细的数据键配置
  2. 数据类型是在选择数据键时自动识别的,不是单独的下拉框配置

解决方法:

方法1切换到 Advanced Mode推荐

  1. 在配置面板顶部找到 "Basic Mode" / "Advanced Mode" 切换按钮
  2. 切换到 "Advanced Mode"
  3. 在 Advanced Mode 中,找到 "Overlays" 部分
  4. 点击 "Markers" 标签
  5. 编辑标记点,修改 Latitude 和 Longitude 数据键

方法2如果仍找不到配置

  1. 确认是否在编辑模式下(点击了地图组件的编辑按钮)
  2. 检查配置面板是否完全展开
  3. 尝试滚动配置面板,查看是否有更多配置选项
  4. 如果确实找不到,可能需要检查 ThingsBoard 版本是否支持此功能

关于类型选择:

  • 数据类型不是单独的下拉框,而是在输入数据键名时自动识别的
  • 删除当前数据键,重新输入键名
  • 在下拉列表中选择正确的类型:
    • 📈 timeline 图标 = Timeseries遥测数据- 选择这个
    • 🔵 "A" 图标 = Attribute属性- 不要选这个
  • 系统会根据设备实际数据自动识别,如果设备有该键的遥测数据,会显示 timeseries 选项

Q2: 地图显示但设备位置不对

可能原因:

  1. 经纬度数据顺序错误(纬度/经度搞反)
  2. 数据单位问题(度 vs 弧度)
  3. 数据格式问题

解决方法:

  1. 检查实际数据的经纬度值
  2. 确认数据格式正确
  3. 可能需要调整坐标转换

Q3: 地图显示默认位置0,0

可能原因:

  1. 设备没有位置数据
  2. 位置数据类型配置错误
  3. 位置数据键名不匹配

解决方法:

  1. 检查设备是否有位置数据
  2. 确认配置中的键名和类型
  3. 设置合适的默认中心位置

验证步骤

  1. 检查设备数据:

    • 进入设备详情页
    • 查看 Latest Telemetry 和 Attributes
    • 确认位置数据的键名和类型
  2. 检查地图配置:

    • 打开地图组件编辑
    • 检查 Markers 配置
    • 确认 X轴和Y轴的键名和类型
  3. 测试地图:

    • 刷新仪表盘
    • 查看地图是否显示设备位置
    • 如果仍不显示,检查浏览器控制台错误信息

当前配置摘要

{
  "mapType": "geoMap",
  "markers": [{
    "dsType": "device",
    "dsDeviceId": "fc1be8f0-b95d-11f0-8c0a-afd4d00ac98a",
    "xKey": {
      "name": "drone.latitude",
      "type": "attribute"  // ⚠️ 需要确认实际数据类型
    },
    "yKey": {
      "name": "drone.longitude",
      "type": "attribute"  // ⚠️ 需要确认实际数据类型
    }
  }],
  "useDefaultCenterPosition": false,
  "defaultCenterPosition": "0,0",
  "fitMapBounds": true  // ✓ 会自动调整到设备位置
}

下一步操作

  1. 在 Web UI 中检查设备数据
  2. 根据实际数据类型修正地图配置
  3. 如果数据不存在,检查设备是否正确发送位置数据