1.
引言
北斗船联网是北斗信服公司的主营业务,是国内首个,也是目前最大的北斗RDSS应用,通过整合卫星导航定位系统、GIS(地理信息系统)、移动通信网络、因特网、AIS(船舶自动识别系统)等技术,构建了统一的信息管理、共享平台。经过多年运营,北斗船联网已经形成规模效益,成功为8万余个终端用户、几千个集团用户、数十万个伴随手机用户提供不间断的服务。主要为各级渔业管理和执法部门、渔业公司提供渔业管理、船位监控、紧急救援指挥等信息服务,还可为船舶提供船岸之间的北斗短报文通信、航海通告、遇险求救、增值信息(如天气、海况、渔场、渔汛)等服务。
基于海图GIS引擎打造的渔业生产安全监控平台(在不同的项目中,有“渔船渔港动态监控系统平台、渔船动态监控管理平台”等名称,以下简称“监控平台”)是北斗船联网系统的重要组成部门,是客户使用船联网系统的主要用户界面接口,是公司的拳头产品。在海图上动态叠加10万以上的船舶目标,要对大量的位置数据进行处理和显示,对监控平台的稳定性和性能都提出非常高的要求。
早期的监控平台对动态目标的显示采用的方法是:在海图比例尺较小时,目标以点来显示,海图比例尺适中时,以加号(+)来显示,海图比例尺较大时,以船舶图标显示,如下图所示:
图1 非聚合模式下船舶目标的显示
为了和后面的显示方式加以区分并统一规则,这里我们称这为非聚合模式,另外两种模式为热力图模式和聚合模式,下面我们首先介绍非聚合模式的优化方法。
2.
非聚合模式的优化
1
非聚合模式的不足
非聚合模式的优点显而易见:在海图比例尺较小时,可视窗口范围内的船舶目标数量多,以简单的图形表示(点或加号),当海图比例尺放大到一定程度时,可视窗口范围内的船舶目标数量少,以复杂的图形表示(船舶图标)。早期船舶目标相对较少(5万以下)时,这种方式基本没有问题,并且渔船在靠岸时基本都会把通导设备(通讯导航设备,即北斗、AIS等)关闭,因此监控平台性能基本满足用户的需求。
但是近几年为了加强管理,适应强监管要求,各地对北斗终端进行了升级换代,同时也是为了在伏休期间对非法出海捕捞行为进行严密监控,更多的安装了带有电池的北斗船载终端,终端需要24小时在线。这样给监控平台带来的一个问题就是:当海图比例尺放大到需要显示船舶图标时,如果是港口附近,可视窗口范围内的船舶目标数量仍然很多,这时会导致软件性能急剧下降,对用户体验带来较大影响。
2
优化方法
优化的方法也很简单,当对海图进行漫游或放大、缩小操作时,计算用户操作完成后,可视窗口范围内的目标数量小于某个阈值(可设置,初始值为100)时,叠加显示船舶图标,否则根据比例尺的大小显示点或加号。
这样优化唯一的难点是,快速计算可视窗口范围内的目标数量,使得用户操作时不出现卡顿现象,考虑到用户操作海图时GIS引擎重绘等耗时因素,可视窗口范围内目标数量的计算时间最好控制在200毫秒左右,否则用户操作时会感受到明显的延迟,造成用户体验不佳的后果。
船舶目标是否在海图上显示有很多的控制因素,如在线时间设置、终端类型显示设置、船舶类型显示设置、组织机构显示设置等。如果这些显示计算都在用户操作时执行,迭代所有的船舶目标会占用大量资源,导致无法满足性能要求。因此,应该在接收到新的船舶位置时,就根据显示设置计算目标是否在海图上显示,并记录在容器中,这里选择MAP表,因为MAP表具备查询快速的优势,非常适合此处的使用场景。
另外,在根据经纬度计算目标是否在可视窗口范围内时,要注意海图的循环显示问题,当软件界面足够宽,在水平方向海图会循环显示,即可视窗口的经度范围可能超过一个完整的-180°~180°的范围。
1
算法的流程总结如下:
目标位置更新时,根据显示设置计算该目标是否在海图上显示,将结果保存在以目标ID(唯一)为键值的MAP表(mapIsDrawInScreen)中;
2
用户对海图进行漫游或放大、缩小操作时,遍历所有目标的位置数据;
3
计算目标的位置是否在可视窗口范围内,是则进入下一条判断;
4
在mapIsDrawInScreen表中查找该目标是否显示,是则计入总数。
3.
热力图模式简介
热力图(Heat Map)是通过密度函数进行可视化用于表示地图中点的密度的热图,是一种通过对色块着色来显示数据的统计图表。绘图时,需指定颜色映射的规则。例如,较大的值由较深的颜色表示,较小的值由较浅的颜色表示;较大的值由偏暖的颜色表示,较小的值由偏冷的颜色表示等等。热力图适合用于查看总体的情况、发现异常值、显示多个变量之间的差异,以及检测它们之间是否存在任何相关性等。
在监控平台上我们使用了两种热力图来显示渔船在地理空间上的分布情况,一种是表格型(色块型)一种是非表格型(平滑型)
1
表格型热力图
表格型热力图需要两个分类字段加一个数值字段,分类字段确定x、y轴,将图表划分为规整的矩形块,数值字段决定了矩形块的颜色,在监控平台中我们用渔区来定义矩形块,因此我们也称之为渔区网格模式。
我国将邻近的海洋水域按经纬度划分为若干个渔区,以经纬度各30分的范围为一个渔区,这是我们通常使用的渔区,对每个渔区再分成经纬度各10分的九宫格,每个格子这里我们称之为小渔区。
通过计算在每个渔区和每个小渔区内,当前有多少渔船在作业,然后将数量叠加显示到海图上的相应渔区位置上并根据数值填色。当比例尺缩小到一定程度时,在屏幕上渔区已经缩小到比较小的区域,如果数字也相应缩小在渔区范围内显示,则会造成用户无法阅读的问题。因此,我们将邻近的3*3共9个渔区合并成一个大渔区,并在大渔区范围内显示这9个渔区渔船数量的总和。
这样就构成由大渔区、渔区、小渔区组成的三级网格显示体系,叠加显示在海图上,并且根据数量级别使用不同的颜色填充(数量从少到多,颜色从黄到红渐变表示)加以区分,使用户可以直观的了解渔船在海上渔区内的分布情况,如下图所示:
图2 渔区网格模式显示效果图
2
非表格型热力图
非表格型热力图需要3个数值字段,可绘制在平行坐标系中(2个数值字段分别确定x、y轴,1个数值字段确定着色,与表格型热力图的区别在于每一个点都对应一个颜色值而不是一个矩形区域块对应一个颜色值。在实际绘制时为提升显示效果,为该点为中心且合理半径的圆进行填色,所有的圆填色、叠加后的效果如下图所示:
图3 平滑型热力图模式显示效果图
软件中创建圆的路径、填色等操作在内存DC(画布环境和上下文)中完成,然后再贴到显示DC上,这样可以达到提升显示效率、避免屏幕闪烁等目的。同时,采用异步的方式,当海图拖动或放大缩小时,创建一个线程来完成计算、填色、绘制等操作,完成后再通知主线程贴图,当目标数量较多时可以更好的减少海图刷新的延迟,给用户更好的操作体验。
4.
聚合模式简介和优化
1
聚合模式
聚合指的是将地图上一定区域内分散的目标聚集在一起,然后用数字表示这个区域内目标的数量,以此达到从直观上了解整个地图上各个区域的目标分布情况,数字越大表示这个区域内的目标更多,反之表示这个区域内的目标更少。将目标智能划分区域并计算区域内目标数量的算法叫做聚合算法或聚类算法。
聚类算法有很多种,包括划分法、层次法、密度算法、图论聚类法、网格算法、模型算法等,在实际应用中我们采用了划分法中的K-MEANS算法,本文简单介绍一下K-MEANS算法的原理,其它各类算法的原理、优缺点等不在本文的论述范围内。
1
算法原理
K-means聚类算法是一种迭代求解的聚类分析算法,步骤是随机选取K个对象作为初始的种子聚类中心,然后计算其余每个对象与各种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,或者没有(或最小数目)聚类中心再发生变化,达到了误差平方和局部最小。
2
实现步骤
1)首先随机生成K个聚类中心点;
2)对数据集中每一个点,计算其与每一个质心的距离(如欧式距离),离哪个质心近,就划分到那个质心所属的集合;
3)经过分类后得到K个数据集合,重新计算每个集合的质心;
4)如果新计算出来的质心和原来的质心之间的距离小于某一个设置的阈值(表示重新计算的质心的位置变化不大,趋于稳定,或者说收敛),我们可以认为聚类已经达到期望的结果,算法终止;
5)如果新质心和原质心距离变化很大,需要迭代2~4步骤,如下图所示:
2
聚合模式的优化
地图上目标的聚合,在目标位置不变化,哪怕数量再大如果只计算一次那就可以不用太关注算法的效率问题,但是我们的监控平台是对在海上航行的船舶的动态位置进行监控,船舶的位置每时每刻都在发生变化,位置发生变化后原则上就需要重新进行聚合计算,考虑船舶航行速度、位置上报频度等原因,实际代码中为每隔1分钟重新进行一次聚合计算,并且将地图比例尺分为8个等级,在每个等级上进行聚合计算,当数据量较大时8次计算的耗时还是很大的。
优化的方式是根据比例尺等级将地图划分为不同数量的方格,在方格内的目标进行K-means聚合计算,实际上就是将聚类算法分类中的网格算法与K-means算法进行结合,最后得出聚类数据集合。地图比例尺的等级划分以及对应的网格数量如下表所示:
经过聚合之后的显示效果如下图所示:
5.
结束语
作为北斗信服公司的主营产品,船联网监控平台的用户覆盖面广,用户使用时长较久,对性能要求也比较高,在丰富监控平台动态监控目标显示模式,给用户多样化选择的同时,更要关注用户操作响应效率以及显示性能,不断提升用户体验才能进一步增加用户粘性,从而提升公司的总体竞争力。

