2026山东大学软件学院创新项目实训博客(三)
2026/4/21 1:27:15
var result = []; var dataPoint = null; // 仅保留dev1下的lon和lat,删除所有多余字段 for (var i = data.length - 1; i < data.length; i++) { dataPoint = { dev1: { lon: data[i].current_value.lon, lat: data[i].current_value.lat } }; result.push(dataPoint); } return result;【定位器项目】效果演示:成功绑定经纬度到地图上,可视化平台显示。
这份脚本是精准适配你的 OneNET 数据流 + 地图组件解析规则的最终版本,核心解决了 “冗余字段干扰” 和 “数据结构不匹配” 问题,下面从「设计目标、逐行逻辑、适配要点、为什么能解决你的问题」四个维度拆解:
[ {dev1: {lon: 经度, lat: 纬度}} ];data[i].current_value下;| 代码行 | 作用 & 为什么这么写 |
|---|---|
var result = []; | 初始化空数组▸ 地图组件强制要求返回数组格式(参考成功示例的核心要求),不能返回对象 / 单个值;▸ 后续将解析后的经纬度数据存入这个数组。 |
var dataPoint = null; | 声明临时变量▸ 提前定义用于存放 “单条解析后的数据”,避免循环内重复创建变量,提升性能;▸ 符合 JS 代码规范,让逻辑更清晰。 |
for (var i = data.length - 1; i < data.length; i++) { | 循环只处理最新 1 条数据▸data:平台传入的数据源(数组,按时间从旧到新排列);▸data.length - 1:数组最后一个元素的索引(即最新一条数据);▸i < data.length:确保循环只执行 1 次,只取最新位置(不需要历史轨迹时,这是最高效的写法)。 |
dataPoint = { dev1: { lon: data[i].current_value.lon, lat: data[i].current_value.lat } }; | 构建核心数据结构▸dev1:复刻成功示例的固定标识(地图组件底层绑定了这个字段名,改了就识别不到);▸data[i].current_value.lon:你的经纬度存在current_value下(区别于别人的value,适配你的数据流版本);▸ 无任何多余字段(如之前的dev/lng冗余字段),避免组件解析出错。 |
result.push(dataPoint); | 将单条数据存入结果数组▸ 把解析好的dev1结构添加到result数组,满足 “返回数组” 的要求。 |
return result; | 返回最终数据▸ 把数组返回给地图组件,组件会遍历数组,读取dev1.lon/dev1.lat渲染标记。 |
data[i].current_value.lon而非data[i].value.lon,贴合你的新版数据流格式;dev1 + lon + lat,删除所有冗余字段(解决你之前数据处理结果里 “多字段干扰” 的问题);你之前的核心问题是:
dev/lng)→ 组件读错数据;value而非你的current_value)→ 读不到经纬度;dev1嵌套数组)→ 组件无法解析。这份脚本彻底解决了这三个问题:✅ 无冗余字段 → 组件能精准读取dev1.lon/dev1.lat;✅ 字段路径正确 → 能从你的数据流中拿到真实经纬度;✅ 格式完全匹配 → 符合地图组件的解析规则。
[ {dev1: {lon: xxx, lat: xxx}} ],无其他字段;这是最终能让你的地图显示的唯一脚本版本,核心就是 “极简、匹配、无冗余”。
要在 OneNET 地图组件中显示全部历史数据并汇成路线,需要修改过滤器脚本(遍历所有数据)+ 适配地图组件的 “轨迹渲染规则”,以下是完整的实现方案:
dev1.lon/dev1.lat,自动连接成轨迹路线(OneNET 地图组件原生支持轨迹渲染)。var result = []; var dataPoint = null; // 遍历所有数据(从最旧到最新,保证轨迹顺序) for (var i = 0; i < data.length; i++) { // 保留dev1结构,依次存入每条数据的经纬度 dataPoint = { dev1: { lon: data[i].current_value.lon, lat: data[i].current_value.lat } }; // 按时间顺序添加到结果数组 result.push(dataPoint); } return result;| 改动点 | 原写法(仅最新) | 新写法(全部历史) | 作用 |
|---|---|---|---|
| 循环起始索引 | i = data.length - 1 | i = 0 | 从最旧数据开始遍历 |
| 循环结束条件 | i < data.length | i < data.length | 遍历所有数据(无变化) |
| 数据顺序 | 最新 1 条 | 从旧到新所有数据 | 保证轨迹按时间顺序连接 |
WGS84转GCJ-02(适配国内地图)。dev1.lon(经度)、dev1.lat(纬度)。dev1数据(数量 = 你的历史数据条数);// 只取最近50条历史数据(平衡性能和轨迹完整性) var startIndex = Math.max(0, data.length - 50); for (var i = startIndex; i < data.length; i++) { dataPoint = { dev1: { lon: data[i].current_value.lon, lat: data[i].current_value.lat } }; result.push(dataPoint); }data数组默认按「时间从旧到新」排列,无需额外排序;如果轨迹方向反了,可改为for (var i = data.length - 1; i >= 0; i--)(从最新到最旧)。地图上会清晰显示设备从历史起点到当前位置的完整移动轨迹,节点标记每个停留点,路线连接所有节点,完全满足 “汇成路线” 的需求。
如果需要调整轨迹样式(如颜色、线宽)或数据量,可随时修改脚本 / 样式配置。