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

291 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 地图组件配置检查指南
## 检查结果
从数据库和日志检查发现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.latitude``drone.longitude` 数据
4. 查看 **Attributes** 标签页
5. 检查是否有 `drone.latitude``drone.longitude` 属性
**根据实际情况:**
- 如果数据在 **Telemetry** 中 → 将地图配置中的 `type` 改为 `"timeseries"`
- 如果数据在 **Attributes** 中 → 保持 `type``"attribute"`
### 方案2在 Web UI 中修正地图配置(推荐)
**确认:位置数据是遥测数据,需要在 Web UI 中修改配置**
**重要说明:**
1. 地图组件有 **Basic Mode****Advanced Mode** 两种配置模式
2.**Basic Mode** 下可能无法直接配置数据键类型
3. 需要先切换到 **Advanced Mode**,然后才能配置标记点的数据键
**操作步骤:**
#### 步骤1切换到 Advanced Mode
1. **打开地图组件配置:**
- 在 DEMO 仪表盘中,点击地图组件
- 点击编辑按钮(或右键 → 编辑)
2. **切换到 Advanced Mode**
- 在配置面板**顶部**找到切换按钮
- 应该显示 **"Basic Mode"** 和 **"Advanced Mode"** 两个选项
- 点击 **"Advanced Mode"** 切换到高级模式
#### 步骤2配置 Markers 数据键
3. **进入 Markers 配置:**
- 在 Advanced Mode 的配置面板中,找到 **"Overlays"**(覆盖层)部分
- 应该可以看到 **Markers**、**Polygons**、**Circles** 等选项
- 点击 **"Markers"** 标签
4. **编辑标记点配置:**
- 找到标记点列表(应该有一个标记点)
- 点击标记点右侧的**编辑按钮**(或点击标记点本身)
- 这会打开标记点配置对话框
5. **修改 Latitude纬度配置**
- 在标记点配置对话框中,找到 **Latitude** 字段(显示 `drone.latitude`
- 点击字段右侧的 **"×"** 按钮,删除当前数据键
- 在输入框中输入:`drone.latitude`
- 系统会自动显示下拉列表,选择带有 **timeline 图标**(📈)的选项(表示 timeseries
- **不要选择带 "A" 图标**(表示 attribute的选项
6. **修改 Longitude经度配置**
- 找到 **Longitude** 字段(显示 `drone.longitude`
- 点击字段右侧的 **"×"** 按钮,删除当前数据键
- 在输入框中输入:`drone.longitude`
- 系统会自动显示下拉列表,选择带有 **timeline 图标**(📈)的选项(表示 timeseries
- **不要选择带 "A" 图标**(表示 attribute的选项
7. **保存配置:**
- 点击标记点配置对话框底部的 **"应用"** 或 **"保存"** 按钮
- 点击地图组件配置面板底部的 **"应用"** 按钮
- 刷新仪表盘查看效果
**如果找不到切换按钮:**
- 检查配置面板顶部是否有 "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` (合适的缩放级别)
## 配置检查清单
### ✅ 已检查项
- [x] 地图类型:`geoMap`(地理地图)
- [x] 地图提供商:`openstreet`OpenStreetMap
- [x] 数据源类型:`device`(设备)
- [x] 设备ID已配置`fc1be8f0-b95d-11f0-8c0a-afd4d00ac98a`
- [x] 标记点配置存在
- [x] 标签显示:`${entityName}` ✓
- [x] 工具提示已配置 ✓
### ✅ 已确认项
- [x] **位置数据是遥测数据**:从日志确认,数据在 timeseries 中
- [x] **位置数据键名**`drone.latitude` 和 `drone.longitude`
- [x] **位置数据存在**:设备正在发送位置数据 ✓
- [x] **配置错误**:地图配置为 `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 Mode**Basic 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. **测试地图:**
- 刷新仪表盘
- 查看地图是否显示设备位置
- 如果仍不显示,检查浏览器控制台错误信息
## 当前配置摘要
```json
{
"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. **如果数据不存在,检查设备是否正确发送位置数据**