高频度定位数据的优化处理方法设计
2023-12-03王兴元
王兴元,徐 楠
(中电科申泰信息科技有限公司,江苏 无锡 214000)
0 引 言
随着智能终端的普及和其在各行业中的应用,智能终端定位数据的采集和上传成为智能应用的基本需要。实际应用中,多需要对智能终端的定位进行高频度的采集和上传,并且能够通过平台对一个或多个智能终端历史轨迹进行查询。在项目开发时,对该定位功能的数据量没有很好地进行评估,导致在开发完成后,该功能运行缓慢,结果展示杂乱,不能满足实际使用需要。出现问题的主要原因在于当终端数量和采集上传频度到达一定量级时,数据量指数级增加。在查询轨迹时,短时间内要处理太多数据,导致运行性能下降。文章主要研究如何从采集、传输、存储和展示等多方面优化通信和展示的数据量,提高相关业务性能并提供更好的展示效果。
1 优化目标
根据定位应用实际需要,智能终端最高的采集频率要求为1 s/次,正常工作时间为8 h,每个终端每天采集和上传的数据量为3 600×8=28 800 条。整个系统含1 万个终端,则每天需要增加288 000 000条数据。当需要对某终端某月轨迹进行查看时,需要拉取并展示的数据为28 800×30=864 000条。即使一次只查看一天的历史轨迹,也是28 800 条记录。当上万个坐标点在电子地图上绘制时,不光需要花费大量的时间和资源,而且展示效果很差,无法让使用者直观地了解真实轨迹情况。
针对这种情况,结合实际工作场景,将整体数据量减少到原来的1/10 ~1/100,将查询反馈时间缩短到3 s 以下,并优化轨迹展示方法,使展示的轨迹更加直观和有效。
2 采集和上传优化
对于智能终端的定位信息采集功能,采集到的信息包括时间戳、经纬度、定位方式等。智能终端定位方式主要由GPS、LBS、WiFi 定位等组成。在采集和上传时,需要保留这些信息,在分析和展示时需要用到。
智能终端在实际工作中由工作人员持有,记录工作人员在工作中的实时位置。工作人员行动方式有步行、骑行、汽车、地铁、火车等。当采用不同的交通工具时,移动速度存在很大差异。同时工作人员的工作模式也有很多种,有可能在一个位置长时间停留,也可能快速转移到其他位置。
当长时间在同一个位置时,智能终端采集到的坐标点由于本身误差和精度的原因,可能会在较小范围内不停变化,然而此时可能实际上工作人员一直没有移动,在这种情况下,从采集角度可以利用智能终端自身的传感器和设计优化算法,过滤无意义的坐标点。智能终端通过自带的陀螺仪传感器,判断当前的移动方向和速度。如果移动速度过小,例如小于1 m/s,则可以认为当前位置没有发生变化,此时沿用上一次的坐标位置即可,不需要重新采集坐标。这样可以避免重新采集造成的坐标晃动情况。由于智能终端携带的民用级GPS 误差最小也有5 ~10 m,因此这种过滤不会影响实际定位显示的精度。在上传时,这种情况也可以适当放大上传间隔,例如10 s 上传一次,一次包含10 个时间戳和一个坐标点信息,以减少上传数据量。
当工作人员快速移动时,智能终端高频采集的坐标都是有效的。此时高频采集的优势在绘制轨迹时能够发挥作用。但由于高速移动时,移动网络会不断切换基站,则需要对采集的数据进行缓存,当网络情况不佳时,对发送失败的数据进行保留,当恢复网络时,进行补发。为了减少网络通信次数,需要优化通信协议,在一个通信包中包含多个坐标位置,同时标注坐标点的性质,是历史坐标还是实时坐标。
3 存储优化
考虑到系统内需要大量数据查询的需要,数据库采用MySQL 关系型数据库,而不是时序数据库。但是由于坐标数据庞大,所以对定位数据采用分表保存的方式,每个终端根据ID 单独生成一张数据库表,轨迹数据表的名称由“GPS_”+终端ID 自动组成,在创建终端信息时自动生成该数据表。即使按照最大理论数据量,单终端3 年的坐标信息条目为28 800×365×3 = 31 536 000,也在单表的容纳范围内。数据保存内容包括坐标时间戳(double)、经度(double)、纬度(double)、定位方式(GPS、LBS、WiFi)、接收时间戳(double)等。
通过这种方式存储的数据,实际数据量还是较为庞大,当系统使用一定时间后,单表存储的数据扩大到几百万甚至上千万条数据之后,单次查询就可能需要几秒甚至十几秒,影响系统的查询性能。针对这种情况,有2 种优化方案:第一种是通过坐标的时间戳建立索引,虽然在保存时会降低速度,但是可以提高查询速度;第二种是优化存储方法,通过精简相同坐标点的条目,实际上减少存储的数据量。
第一种方法不需要细说,这里着重考虑第二种优化方法。配合采集采用的优化方案,当一段时间内,坐标点没有变化时,上传时不再多次上报相同的坐标点,而是将多个采集结果通过一条信令发送。此时作为接收服务端,收到一个时间段内的多个时间戳和同一个定位信息。考虑到展示轨迹时,短时间内同一个坐标点也不需要反复绘制,因此可以增加数据表的列,单条记录保存更多信息,减少总的行数。对于坐标时间戳,将其分解成2 个,分别是坐标开始时间戳和坐标结束时间戳,用于记录该条相同坐标信息的首次采集时间和末次采集时间,增加一个采样次数(int),记录该时段内,总共进行了多少次相同坐标的采样。通过这种方法与智能终端的采集优化联动,可以用一条记录保存多个采样记录。通过实际调整,甚至可以在一条记录中保存10 ~100 条采样结果,而不会影响查询和展示的效果。
4 查询优化
查询由展示端发起,申请某终端在某时间段内的定位点列表。经过采集和存储的优化之后,在查询服务接口需要对查询出来的数据进行处理,才可以发送到展示端。按照之前的计算,单终端每天的历史轨迹点最大可能有28 800 个,按1/10 计算,还可能存在将近3 000 条记录,如果3 000 条记录不作处理进行传输,实际上还是较大的一个数据量,并且不利于展示端展示。因此从数据库中取出数据后,在传输给展示端前,仍然有优化的必要和空间。
之前说到,采集端和接收存储服务对相同坐标点的采样进行了整合过滤,然而由于实效性的需要,这个整合不能等待太多采样,否则会影响系统的追踪、定位等功能,但是在轨迹展示时,可以对查询出的历史数据进行再次整合。当按照时间排列的坐标记录从数据库中取出并存放到内存队列后,按照先后顺序,对队列中的记录进行比对。比对判断的因素包括时间戳和坐标值。当先后两条连续坐标记录的结束时间和开始时间的时间戳相差超过一定值,比如5 min 时,不考虑整合。当时间戳相差不大时,判断两个坐标的差异值,如果这两个坐标之间的直线距离小于10 m(假设区域内地图为平面,将经纬度折算到米,然后再使用三角函数计算得出),即在GPS 精度范围内,则可以整合到一起,保留前一条记录,将后一条记录的结束时间作为新的结束时间,将两条记录的采样数相加作为新的采样数,然后去掉后一条信息,并使用修改后的新记录继续与后续的记录进行比对和整合,直到最后一条。通过整合,预计还能减少一半的记录,在保障展示内容的前提下,可有效减少传输和展示的数据量。
5 展示优化
展示优化主要考虑的是查询出的轨迹点,在地图上绘制时的策略,包括绘制坐标点时的动画效果和坐标点包含的展示内容。经过查询优化后,需要绘制的坐标点已经大大减少,然而坐标点需要展示的内容增加了。
展示端获取到的定位队列数据包括开始时间戳、结束时间戳、经度、纬度、定位方式、采样数量等。为了直观显示当时的运动路线,需要在绘制时根据时间先后,预留等待(sleep)时间,形成动画效果。比如预计用10 s 动画显示8 h 的历史轨迹,则要计算每0.1 s 需要展示出的时间段为8 h×3 600/100 = 288 s。那么从第一个坐标点开始,连续绘制288 s 内的坐标点数据,然后等待0.1 s,再绘制下一个288 s,继续等待,如此循环直到绘制完最后一个坐标点信息,这样可以呈现出人员行动时的动态效果。
对于每个显示的坐标点,需显示该点的第一个和最后一个时间戳、坐标的采样方式及在该坐标的采样点数量,通过这些数据可以让管理人员直观地了解人员在该坐标停留时间。
对于连续的坐标点之间,需要对间隔时间进行判断。如果连续的2 个点的时间小于一定值,则用实线连接;如果超过该值,则不需要连接。如此,实际上整天的轨迹会由多个轨迹线的集合组成,中间可能因为网络信号或者GPS 信号不佳,或者其他原因,导致轨迹线没有全部连接。
由于不同采样方式的精度不同,例如:GPS 精度在5 ~10 m;LBS 则根据基站分布,在千米级;WiFi 定位则不确定具体精度。因此,为了区别对待,对连续的GPS 定位点之间采用实线连接,对于前后2 个点不全是GPS 的,则采用虚线连接,以表示该坐标精度有限,仅供参考。
6 优化效果
通过上述多个模块对定位信息的优化方案设计了相应的算法,并通过实际测试,对优化结果进行了模拟。模拟结果表明,智能终端的续航比原设计提升了约30%,上传通信数据包减少了28%~74%(运动模式不同,差异较大);存储数据条数比原设计减少了约80%;对单个终端单独一天的历史轨迹查询反馈速度降低到2 s 以内;展示效果清晰流畅,不影响页面其他功能使用。整个功能设计能够满足实际工程需要。
7 结 语
整套优化方案全盘考虑了终端采集上传、数据库存储、查询接口处理以及页面展示等多个功能模组的实际需要,通过整合,过滤掉近似点,减少通信和存储的数据量,减少展示的资源,有效地实现了高频定位点大量数据的优化处理,从工程应用角度解决了简单架构下大数据量的应用问题,简化了部署架构,节约了工程造价。希望本文设计能够给类似规模的数据应用带来启发。