一种基于开源鸿蒙系统的地图呈现方法、装置和存储介质转让专利

申请号 : CN202311090753.1

文献号 : CN116860215B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李煊买瑞敏孙国栋李振华邵博丰

申请人 : 中国兵器装备集团兵器装备研究所

摘要 :

本发明提出基于开源鸿蒙系统的地图呈现方法、装置和存储介质,该方法包括:将所述地图按照从上到下的顺序分为多个图层,所述图层包括:态势标绘点图层、态势标绘线面图层和地图卫片图层;由第一线程加载地图引擎,展示所述地图卫片图层,由第二线程在后台加载所述态势标绘点图层和所述态势标绘线面图层;开源鸿蒙的Stack组件将所述态势标绘点图层和所述态势标绘线面图层堆叠在所述地图卫片图层上;在不同设备之间对所述态势标绘点图层和所述态势标绘线面图层进行加载时,所述不同设备根据其性能确定其自身地图加载精度,并可确定不同通信方式对分布式计算的结果进行共享;在同一个设备中其他业务调用地图业务时,通过数据库共享呈现所述地图。

权利要求 :

1.一种基于开源鸿蒙系统的地图呈现方法,其特征在于,包括:

将所述地图按照从上到下的顺序分为多个图层,所述图层包括:态势标绘点图层、态势标绘线面图层和地图卫片图层;

由第一线程加载地图引擎,展示所述地图卫片图层,由第二线程在后台加载所述态势标绘点图层和所述态势标绘线面图层;

通过所述开源鸿蒙的Stack组件将所述态势标绘点图层和所述态势标绘线面图层堆叠在所述地图卫片图层上;

其中,在不同设备之间对所述态势标绘点图层和所述态势标绘线面图层进行加载时,所述不同设备根据其性能确定其自身地图加载精度,并确定不同通信方式对分布式计算的结果进行共享;

在同一个设备中其他业务调用地图业务时,通过数据库共享呈现所述地图;

其中,所述不同设备根据其性能确定其自身地图加载精度包括:根据所述不同设备的性能指数分别计算所述不同设备加载地图的精度,通过如下公式实现:,

其中, 表示第i个设备的地图加载精度,是该设备所能呈现的地图精细程度的量化指标, 表示第i个设备中的在处理第j个地图层内容所需的计算能力大小,n表示地图层总数; 表示第i个设备所占据的总内存容量 ,反映了设备的存储容量大小,G表示该设备的处理器的性能或性能级别的系数,反映了设备的处理能力; 表示该设备的网络带宽和稳定性的系数,反映了设备的网络传输能力;

其中,所述通过数据库共享呈现地图包括以下多种方式中的至少一种:基于AIDL实现数据库连接池共享、通过EventBus实现数据库更新事件共享、基于Socket通信推送数据库更新或在应用间共享State对象同步数据库状态;

所述基于AIDL实现数据库连接池共享包括:DBHelper应用实现数据库连接池,在AIDL文件中定义获取连接池连接的接口;其他应用导入DBHelper的AIDL文件,调用接口获取连接;其他应用通过AIDL连接DBHelper进程,调用连接接口获取连接,操作数据库;

所述通过EventBus实现数据库更新事件共享包括:DBHelper应用定期扫描数据库变化,构造数据库更新事件并通过EventBus发布;其他应用导入DBHelper的事件类并订阅此事件;当DBHelper发布事件时,其他应用将收到事件回调并更新本地数据;

所述基于Socket通信推送数据库更新包括:DBHelper应用启动Socketserver,监听新连接并接收数据库更新请求;其他应用连接到DBHelper的Socketserver,并发送数据库更新请求;DBHelper接收到请求后查询最新数据库信息,通过Socket连接推送到其他应用;其他应用接收到推送数据并更新本地缓存,完成同步;

所述在应用间共享State对象同步数据库状态包括:DBHelper定义State对象,用以存储数据库状态,如更新时间戳;DBHelper监听所述State对象;当其发生变化时查询数据库并同步更新所述State对象;其他应用直接访问并读写所述State对象,当读到更新时更新本地数据;其他应用写入所述State对象时,DBHelper接收到通知,更新数据库并同步更新所述State对象。

2.如权利要求1所述的基于开源鸿蒙系统的地图呈现方法,其特征在于,定义第一平衡因子ω1为控制态势标绘点图层和所述态势标绘线面图层中的渲染的资源分配因子;定义第二平衡因子ω2为控制所述地图卫片图层中的渲染的资源分配因子;

对于加载地图的每一帧,检测加载所述态势标绘点图层和所述态势标绘线面图层的第一队列中的第一消息数量和加载所述地图卫片图层的第二队列中的第二消息数量;

若所述第一消息数量或所述第二消息数量大于阈值,则增加所述第一平衡因子ω1或第二平衡因子ω2,并根据所述第一平衡因子ω1、第二平衡因子ω2相应更新渲染态势标绘点图层和所述态势标绘线面图层对应的CPU及内存频率、渲染所述地图卫片图层对应的CPU及内存频率。

3.如权利要求1所述的基于开源鸿蒙系统的地图呈现方法,其特征在于,使用软总线组网分享的分布式能力创建数据对象,将计算结果同步到数据对象中,设置同样的SessionID在设备组网后会默认共享该数据对象,得到计算结果。

4.如权利要求1所述的基于开源鸿蒙系统的地图呈现方法,其特征在于,确定不同通信方式对分布式计算的结果进行分享包括:根据设备的网络带宽和稳定性的系数 确定设备采用的传输模式和加载地图的优先顺序,所述传输模式包括:Socket、AIDL和MQTT三种中的任意一种。

5.如权利要求1‑4任意一项所述的基于开源鸿蒙系统的地图呈现方法,其特征在于,对地图的呈现包括根据用户手势实现地图的缩放、移动、二维、三维、卫星图和路网图的显示。

6.一种基于开源鸿蒙系统的地图呈现装置,其特征在于,包括:

分层模块,用于将所述地图按照从上到下的顺序分为多个图层,所述图层包括:态势标绘点图层、态势标绘线面图层和地图卫片图层;

隔离加载模块,用于由第一线程加载地图引擎,展示所述地图卫片图层,由第二线程在后台加载所述态势标绘点图层和所述态势标绘线面图层;

堆叠模块,用于通过所述开源鸿蒙的Stack组件将所述态势标绘点图层和所述态势标绘线面图层堆叠在所述地图卫片图层上;

设备间共享模块,用于在不同设备之间对所述态势标绘点图层和所述态势标绘线面图层进行加载时,所述不同设备根据其性能确定其自身地图加载精度,并确定不同通信方式对分布式计算的结果进行共享;

设备中共享模块,在同一个设备中其他业务调用地图业务时,通过数据库共享呈现所述地图;

其中,所述不同设备根据其性能确定其自身地图加载精度包括:根据所述不同设备的性能指数分别计算所述不同设备加载地图的精度,通过如下公式实现:,

其中, 表示第i个设备的地图加载精度,是该设备所能呈现的地图精细程度的量化指标, 表示第i个设备中的在处理第j个地图层内容所需的计算能力大小,n表示地图层总数; 表示第i个设备所占据的总内存容量 ,反映了设备的存储容量大小,G表示该设备的处理器的性能或性能级别的系数,反映了设备的处理能力; 表示该设备的网络带宽和稳定性的系数,反映了设备的网络传输能力;

其中,所述通过数据库共享呈现地图包括以下多种方式中的至少一种:基于AIDL实现数据库连接池共享、通过EventBus实现数据库更新事件共享、基于Socket通信推送数据库更新或在应用间共享State对象同步数据库状态;

所述基于AIDL实现数据库连接池共享包括:DBHelper应用实现数据库连接池,在AIDL文件中定义获取连接池连接的接口;其他应用导入DBHelper的AIDL文件,调用接口获取连接;其他应用通过AIDL连接DBHelper进程,调用连接接口获取连接,操作数据库;

所述通过EventBus实现数据库更新事件共享包括:DBHelper应用定期扫描数据库变化,构造数据库更新事件并通过EventBus发布;其他应用导入DBHelper的事件类并订阅此事件;当DBHelper发布事件时,其他应用将收到事件回调并更新本地数据;

所述基于Socket通信推送数据库更新包括:DBHelper应用启动Socketserver,监听新连接并接收数据库更新请求;其他应用连接到DBHelper的Socketserver,并发送数据库更新请求;DBHelper接收到请求后查询最新数据库信息,通过Socket连接推送到其他应用;其他应用接收到推送数据并更新本地缓存,完成同步;

所述在应用间共享State对象同步数据库状态包括:DBHelper定义State对象,用以存储数据库状态,如更新时间戳;DBHelper监听所述State对象;当其发生变化时查询数据库并同步更新所述State对象;其他应用直接访问并读写所述State对象,当读到更新时更新本地数据;其他应用写入所述State对象时,DBHelper接收到通知,更新数据库并同步更新所述State对象。

7.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至5任一项所述的基于开源鸿蒙系统的地图呈现方法。

说明书 :

一种基于开源鸿蒙系统的地图呈现方法、装置和存储介质

技术领域

[0001] 本发明属于通信领域,具体涉及一种基于开源鸿蒙系统的地图呈现方法、装置和存储介质。

背景技术

[0002] 近年来,地图类应用虽然得到了广泛的应用,但由于系统封闭性等原因,地图应用存在性能较低、开发难度大、扩展性差、数据共享难、与系统耦合和适用范围窄等问题。功能升级也较为缓慢,难以快速适应市场需求变化。
[0003] 本发明提出的基于开源鸿蒙系统的地图呈现方案,通过软总线与分布式计算提高性能,通过地图图层分离降低开发难度,通过小地图组件提高扩展性,通过State模型实现数据共享,依托开源鸿蒙系统实现与系统的紧密结合,并面向全球市场,功能迭代也更加迅速。这有效解决了现有地图应用存在的种种问题,为用户提供更佳体验。

发明内容

[0004] 有鉴于此,本发明提供了一种基于开源鸿蒙系统的地图呈现方法,包括:
[0005] 将所述地图按照从上到下的顺序分为多个图层,所述图层包括:态势标绘点图层、态势标绘线面图层和地图卫片图层;
[0006] 由第一线程加载地图引擎,展示所述地图卫片图层,由第二线程在后台加载所述态势标绘点图层和所述态势标绘线面图层;
[0007] 通过所述开源鸿蒙的Stack组件将所述态势标绘点图层和所述态势标绘线面图层堆叠在所述地图卫片图层上;
[0008] 其中,在不同设备之间对所述态势标绘点图层和所述态势标绘线面图层进行加载时,所述不同设备根据其性能确定其自身地图加载精度,并可确定不同通信方式对分布式计算的结果进行共享;
[0009] 在同一个设备中其他业务调用地图业务时,通过数据库共享呈现所述地图。
[0010] 特别地,定义平衡因子ω1为控制态势标绘点图层和所述态势标绘线面图层中的渲染的资源分配因子;定义平衡因子ω2为控制所述地图卫片图层中的渲染的资源分配因子;
[0011] 对于加载地图的每一帧,检测加载所述态势标绘点图层和所述态势标绘线面图层的第一队列中的第一消息数量和加载所述地图卫片图层的第二队列中的第二消息数量;
[0012] 若所述第一消息数量或所述第二消息数量大于阈值,则增加所述第一平衡因子ω1或第二平衡因子ω2,并根据所述第一平衡因子ω1、第二平衡因子ω2相应更新渲染态势标绘点图层和所述态势标绘线面图层对应的CPU及内存频率、渲染所述地图卫片图层对应的CPU及内存频率。
[0013] 特别地,使用软总线组网分享的分布式能力创建该数据对象,将计算结果同步到数据对象中,设置同样的SessionID在设备组网后会默认共享该数据对象,得到计算结果。
[0014] 特别地,不同设备根据其性能确定其自身地图加载精度包括:根据所述不同设备的性能指数分别计算所述不同设备加载地图的精度,通过如下公式实现:
[0015]
[0016] 其中,表示第i个设备的地图加载精度,是该设备所能呈现的地图精细程度的量化指标,表示第i个设备中的在处理第j个地图层内容所需的计算能力大小,n表示地图层总数;表示第i个设备所占据的总内存容量,反映了设备的存储容量大小,G表示该设备的处理器的性能或性能级别的系数,反映了设备的处理能力;表示该设备的网络带宽和稳定性的系数,反映了设备的网络传输能力。
[0017] 特别地,确定不同通信方式对分布式计算的结果进行分享包括:根据设备的网络带宽和稳定性的系数确定设备采用的传输模式和加载地图的优先顺序,所述传输模式包括:Socket、AIDL和MQTT三种中的任意一种。
[0018] 特别地,对地图的呈现包括根据用户手势实现地图的缩放、移动、二维、三维、卫星图和路网图的显示。
[0019] 特别地,所述通过数据库共享呈现地图包括以下多种方式中的至少一种:基于AIDL实现数据库连接池共享、通过EventBus实现数据库更新事件共享、基于Socket通信推送数据库更新或在应用间共享State对象同步数据库状态。
[0020] 特别地,所述基于AIDL实现数据库连接池共享包括:DBHelper应用实现数据库连接池,在AIDL文件中定义获取连接池连接的接口;其他应用导入DBHelper的AIDL文件,调用接口获取连接;其他应用通过AIDL连接DBHelper进程,调用连接接口获取连接,操作数据库;
[0021] 所述通过EventBus实现数据库更新事件共享包括:DBHelper应用定期扫描数据库变化,构造数据库更新事件并通过EventBus发布;其他应用导入DBHelper的事件类并订阅此事件;当DBHelper发布事件时,其他应用将收到事件回调并更新本地数据;
[0022] 所述基于Socket通信推送数据库更新包括:DBHelper应用启动Socketserver,监听新连接并接收数据库更新请求;其他应用连接到DBHelper的Socketserver,并发送数据库更新请求;DBHelper接收到请求后查询最新数据库信息,通过Socket连接推送到其他应用;其他应用接收到推送数据并更新本地缓存,完成同步;
[0023] 所述在应用间共享State对象同步数据库状态包括:DBHelper定义State对象,用以存储数据库状态,如更新时间戳;DBHelper监听所述State对象;当其发生变化时查询数据库并同步更新所述State对象;其他应用直接访问并读写所述State对象,当读到更新时更新本地数据;其他应用写入所述State对象时,DBHelper接收到通知,更新数据库并同步更新所述State对象。
[0024] 本发明还提出了一种基于开源鸿蒙系统的地图呈现装置,包括:
[0025] 分层模块,用于将所述地图按照从上到下的顺序分为多个图层,所述图层包括:态势标绘点图层、态势标绘线面图层和地图卫片图层;
[0026] 隔离加载模块,用于由第一线程加载地图引擎,展示所述地图卫片图层,由第二线程在后台加载所述态势标绘点图层和所述态势标绘线面图层;
[0027] 堆叠模块,用于通过所述开源鸿蒙的Stack组件将所述态势标绘点图层和所述态势标绘线面图层堆叠在所述地图卫片图层上;
[0028] 设备间共享模块,其中,用于在不同设备之间对所述态势标绘点图层和所述态势标绘线面图层进行加载时,所述不同设备根据其性能确定其自身地图加载精度,并可确定不同通信方式对分布式计算的结果进行共享;
[0029] 设备中共享模块,在同一个设备中其他业务调用地图业务时,通过数据库共享呈现所述地图。
[0030] 本发明还提出了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现所述的基于开源鸿蒙系统的地图呈现方法。
[0031] 通过本发明的方案,利用开源鸿蒙的软总线与分布式能力,实现多设备协同计算,充分利用设备计算资源处理复杂地图业务,相比单设备计算性能大幅提高。
[0032] 通过本发明的方案,地图图层分离,降低业务逻辑复杂度,相比整体逻辑过重的方案,本发明更易开发与维护。
[0033] 通过本发明的方案,小地图组件以npm包形式提供,方便其他业务插件调用与集成,实现路线显示等功能,相比硬集成的方案扩展性更强。
[0034] 通过本发明的方案,利用开源鸿蒙的State模型,不同应用可以共享数据库与地图数据,相比应用间无法共享数据的方案,本发明数据共享范围更广。
[0035] 通过本发明的方案,基于开源鸿蒙系统,可以更加密切地与系统服务集成,相比独立开发的方案,用户体验更加流畅。
[0036] 通过本发明的方案,面向全球开源社区的开源鸿蒙系统,本发明的适用范围更加广阔,可以为全球用户提供服务。
[0037] 综上,本发明提供的地图应用开发设计方案相比现有技术有更高的性能、更简单的开发、更强的扩展性、更广的数据共享、更加密集的系统集成和更广阔的发展前景等优势。

附图说明

[0038] 图1为基于开源鸿蒙系统的地图呈现方法的流程图;
[0039] 图2为基于开源鸿蒙系统的常规地图各图层的架构图;
[0040] 图3为在不同设备之间加载地图的结构示意图;
[0041] 图4为基于开源鸿蒙系统的地图呈现装置示意图。

具体实施方式

[0042] 下面结合附图并举实施例,对本发明进行详细描述。
[0043] 本发明提供了一种基于开源鸿蒙系统的地图呈现方法,如图1所示,包括:
[0044] 步骤101,将所述地图按照从上到下的顺序分为多个图层,所述图层包括:态势标绘点图层、态势标绘线面图层和地图卫片图层,其常规地图的架构图框图如图2所示。
[0045] 其中地图卫片层使用了开源鸿蒙的XComponent组件textrue形态用于加载C++地图引擎。实现地图缩放,移动,3D,2D,卫星图,路网图的基本地图功能;其提供丰富的地图基础数据,是实现各类地图浏览和业务需求的基础。地图卫片层主要包括卫星影像:高清的卫星图像,提供真实的地表视图;路网图:显示道路的位置、名称和等级,用于导航和路径规划;2D地图:简化的二维地图,主要显示道路、建筑物、地名等信息,内容较丰富;3D地图:三维建模的地图,可以显示建筑物的高度和体积,具有更强的空间感;行政区划:清晰显示每个行政区域的边界,如省份、城市等;POI点:显示地图上兴趣点,如餐厅、酒店、医院、学校等信息;交通信息:显示公交、地铁线路和站点信息,方便用户查阅。
[0046] 态势标绘点图层、态势标绘线面图层则提供了用户可以添加自定义标绘点,设置样式、坐标等信息;用户添加的定制化线段或多边形,用于在地图上标注道路、建筑物轮廓等。这些标绘点会在地图上显示,实现用户定制化标注需求。
[0047] 步骤201,由第一线程加载地图引擎,展示所述地图卫片图层,由第二线程在后台加载所述态势标绘点图层和所述态势标绘线面图层。该步骤中,通过将态势能力的绘制逻辑计算在ServiceExtensionAbility中,通过后台非主线程的机制,隔离业务计算造成UI卡顿的问题。首先创建ServiceExtensionAbility,这是一个后台服务能力。处理态势能力的绘制计算逻辑,这些运算会在后台线程中执行。前台UI线程只负责将计算结果画到地图界面上,不直接执行复杂的绘图运算逻辑。通过Binder机制,ServiceExtensionAbility将计算结果返回给前台UI线程,UI线程接收结果后将其画到界面上。这样前台UI线程就不会因繁重的绘图运算导致界面卡顿,提高了用户体验。
[0048] 步骤301,通过所述开源鸿蒙的Stack组件将所述态势标绘点图层和所述态势标绘线面图层堆叠在所述地图卫片图层上;该步骤中,为了防止图层堆叠时造成卡顿,保证系统顺利加载,定义平衡因子ω1为控制态势标绘点图层和所述态势标绘线面图层中的渲染的资源分配因子;定义平衡因子ω2为控制所述地图卫片图层中的渲染的资源分配因子;对于加载地图的每一帧,检测加载所述态势标绘点图层和所述态势标绘线面图层的第一队列中的第一消息数量和加载所述地图卫片图层的第二队列中的第二消息数量;若所述第一消息数量或所述第二消息数量大于阈值,则增加所述第一平衡因子ω1、第二平衡因子ω2,并根据所述第一平衡因子ω1、第二平衡因子ω2更新渲染态势标绘点图层和所述态势标绘线面图层对应的CPU及内存频率、渲染所述地图卫片图层对应的CPU及内存频率。定义:Stack中渲染层级数量为n,地图卫片图层的MessageQueue数量为m;定义平衡因子:stackBalanceFactor=ω1,mapBalanceFactor=ω2;当ω1>1,增加Stack层级资源;当ω1<
1,减少Stack层级资源;ω2同理;Stack每层级CPU频率:
,内存频率: ;
地图卫片图层CPU频率: ,内存频率:
;如果CPU/内存超过阈值,ω1与ω2同比例减小;
每一帧,主线程根据stackCpuFrequencyi与stackMemoryFrequencyi检查Stack第i层MessageQueue,如果消息过多,
;如果消息过少,ω1/=(ΣstackLayeri+1QueueSize/ΣstackLayeriQueueSize);根据mapCpuFrequency与mapMemoryFrequency检查底图MessageQueue,如果消息过多,;如果消息过少,ω 2/=( Σ
mapQueueSize/ΣrenderMapTimes);相应的,根据Stack每层与底图的CPU/内存频率,确定下一帧相应层级与地图的渲染次数;根据Stack各层MessageQueue与底图MessageQueue的消息数量,选择ω1与ω2,实现动态负载均衡,确保地图顺畅加载。
[0049] 可见该步骤中限定的动态负载均衡不使用固定渲染频率的算法,主要思想是:
[0050] 1.定义Stack中渲染层级数量n与底图MessageQueue数量m;
[0051] 2.定义平衡因子ω1、ω2控制Stack层级与底图资源;当ω>1增加资源,ω<1减少资源;
[0052] 3.定义Stack各层级与底图的CPU/内存频率,依赖于ω1、ω2与层级数量n、m;
[0053] 4.如果CPU/内存超过阈值,ω1、ω2同比例减小,减缓渲染;
[0054] 5.每一帧检查Stack各层MessageQueue与底图MessageQueue消息数量;
[0055] 如果消息过多,ω1、ω2增加,加速渲染;
[0056] 如果消息过少,ω1、ω2减小,减缓渲染;
[0057] 6.根据ω1、ω2更新Stack各层CPU/内存频率与底图CPU/内存频率;
[0058] 7.根据更新后的频率确定下一帧Stack各层与底图的渲染次数;该算法通过ω1与ω2可以根据Stack各层MessageQueue与底图MessageQueue的实际消息数量,动态分配CPU/内存资源,实现工作负载的均衡。它可以加速或减慢某层级的渲染,确保上层级与底图的MessageQueue得到及时处理,实现地图的高效与顺畅加载。
[0059] 步骤401,其中,在不同设备之间对所述态势标绘点图层和所述态势标绘线面图层进行加载时,通过分布式计算可以减少单个设备的计算数量,所述不同设备根据其性能确定其自身地图加载精度,并可确定不同通信方式对分布式计算的结果进行共享,如图3所示;因为不同的设备根据业务会计算不同的标绘信息,在各自设备上使用硬件资源计算后的结果,使用软总线组网分享的分布式能力distributedDataObject,创建该对象,将计算结果同步到对象中,设置同样的SessionID在设备组网后会默认共享该数据对象,就可以得到计算结果。即,多设备协同计算。
[0060] 在地图缩放等操作过程中,我们可以如下实现多种分布式能力:1.分布式地图数据计算:当用户缩小地图比例尺时,可以选择部分计算能力较强的设备计算更高精度的地图数据,然后使用distributedDataObject对象共享该结果,其他设备加载共享数据实现地图details的显示。这可以避免所有设备重复计算更高精度地图数据,提高效率。
[0061] 不同设备根据其性能确定其自身地图加载精度包括:根据所述不同设备的性能指数分别计算所述不同设备加载地图的精度,通过如下公式实现:
[0062]
[0063] 其中, 表示第i个设备的地图加载精度,是该设备所能呈现的地图精细程度的量化指标, 表示第i个设备中的在处理第j个地图层内容所需的计算能力大小,n表示地图层总数; 表示第i个设备所占据的总内存容量 ,反映了设备的存储容量大小,G表示该设备的处理器的性能或性能级别的系数,反映了设备的处理能力; 表示该设备的网络带宽和稳定性的系数,反映了设备的网络传输能力。 是一个与设备的网络带宽和稳定性相关的系数,可以通过一系列实验和测试来计算得出。在计算 值时,需要进行不同网络环境下的测试和数据统计,以评估不同网络带宽和网络稳定性对设备性能的影响,并将其归一化为一个系数。常用的测试方法包括测量设备在特定网络带宽和延迟条件下进行大文件传输的速度,以及在网络拥塞和其他干扰因素下承受的数据包丢失率等指标。通过统计不同网络环境下的测试数据,可以计算出一个针对设备的 值。这个值可以在设备的产品规格中标注,以供用户或第三方开发者参考。 值越高,表示设备的网络传输性能越好,能够支持更高质量的数据传输和应用效果。
[0064] 对于不同的网络加载方式,其网络带宽和网络传输稳定性等参数都有所不同。因此,对于每种不同的网络加载方式, 可以赋予不同的值,以反映其在加载地图过程中所具有的不同网络传输能力。当设备的 值较高时,还可以优先加载高分辨率的地图瓦片或者采用同时加载多个地图片层的方式,以提高地图加载效率和用户体验。
[0065] 例如,在使用Socket进行地图内容共享时,Socket性能高,网络稳定性较好,因此其网络传输能力可以设为1.0,即完全支持地图加载。而在使用AIDL或MQTT进行地图内容共享时,由于网络传输效率相对较低,因此其网络传输能力可以设置为小于1.0的值,以反映其在地图加载过程中效率不如Socket的特点。
[0066] 在计算设备的地图加载精度时,可以在公式中将 设为不同的值,以匹配不同的网络加载方式。例如,在使用Socket进行地图加载时,可以将 设为1.0,而在使用AIDL或MQTT进行地图加载时,可以将 设为0.8或其他适当的值,以反映网络传输效率的影响。这样就可以根据不同的网络加载方式对公式进行适当调整,以准确反映设备的地图加载性能。
[0067] 在地图缩放过程中,我们可以如下实现多种分布式能力:1.分布式地图数据计算:当用户缩小地图比例尺时,可以选择部分计算能力较强的设备计算更高精度的地图数据,然后使用distributedDataObject对象共享该结果,其他设备加载共享数据实现地图details的显示。这可以避免所有设备重复计算更高精度地图数据,提高效率。当用户放大地图比例尺时,可以选择部分设备计算更低精度的地图概览数据,并共享至其他设备,然后由各设备再次细化与渲染,实现地图特征的快速显示。这可以通过分散计算降低单设备的压力。2.MQTT消息共享:当地图缩放时,每个设备可以将自身正在处理的地图数据量、性能参数等信息通过MQTT发布至主题。其他设备订阅该主题得到相关信息,根据整体设备性能情况调整自身地图数据计算或加载量,实现colormap的动态调整与优化。这可以充分利用多个设备的计算资源,避免某设备过载。3.基于AIDL的远程调用:每个设备通过AIDL公开自身的地图服务接口,当设备地图缩放时,可以调用其他设备的AIDL接口请求其计算部分地图数据或某区域地图详情。该结果再通过distributedDataObject共享给其他设备。这可以避免某设备单独计算较大或较复杂地图区域的数据,实现负载均衡。当设备的值较高时,还可以优先加载高分辨率的地图或者采用同时加载多个地图片层的方式,以提高地图加载效率和用户体验。
[0068] 步骤501,在同一个设备中其他业务调用地图业务时,通过数据库共享呈现所述地图。本实施例中有多种方式实现这个功能。
[0069] 例如:DBHelper应用定义数据库连接池及相关操作方法;DBHelper通过AIDL公开获取连接池连接的接口:getConnection();其他应用通过AIDL连接DBHelper,调用getConnection()获取数据库连接;进行数据库操作,共享数据库连接池与数据。
[0070] 2.通过EventBus实现数据库更新事件的共享:DBHelper应用定期扫描数据库变化,发布更新事件;其他应用订阅事件,接收数据库更新消息;更新本地缓存数据,实现数据同步。
[0071] 3.基于Socket通信实现实时数据库更新推送:DBHelper应用开启Socketserver,监听新连接;其他应用连接到Socketserver,发送数据库更新请求;DBHelper接收请求,查询最新数据推送至其他应用;其他应用接收更新数据,更新本地缓存,实现实时数据同步。
[0072] 4.定义State对象在应用间共享数据库状态:DBHelper定义State对象dbState存储数据库状态;监听dbState变化,更新数据库;其他应用直接访问dbState读写数据,实现状态同步;DBHelper根据dbState同步更新数据库,反之亦然。
[0073] 在地图功能有其他业务插件需要使用的地图组件的需求。业务上会将地图模块封装为小地图组件,以npm的形式提供给插件进行集成。地图小组件项目使用Module的形式创建,打包为tgz,在其他项目中将taz使用npm安装。
[0074] 因为不同应用间的业务结果需要同步共享到地图上,使用开源鸿蒙OpenHarmony的State模型datashareability能力。即,应用间数据库共享的能力。可用于其他逻辑调用和共享地图数据,达到无感知的效果。
[0075] 本发明还提供了一种基于开源鸿蒙系统的地图呈现装置,如图4所示,包括:
[0076] 分层模块,用于将所述地图按照从上到下的顺序分为多个图层,所述图层包括:态势标绘点图层、态势标绘线面图层和地图卫片图层;
[0077] 其中地图卫片层使用了开源鸿蒙的XComponent组件textrue形态用于加载C++地图引擎。实现地图缩放,移动,3D,2D,卫星图,路网图的基本地图功能;其提供丰富的地图基础数据,是实现各类地图浏览和业务需求的基础。地图卫片层主要包括卫星影像:高清的卫星图像,提供真实的地表视图;路网图:显示道路的位置、名称和等级,用于导航和路径规划;2D地图:简化的二维地图,主要显示道路、建筑物、地名等信息,内容较丰富;3D地图:三维建模的地图,可以显示建筑物的高度和体积,具有更强的空间感;行政区划:清晰显示每个行政区域的边界,如省份、城市等;POI点:显示地图上兴趣点,如餐厅、酒店、医院、学校等信息;交通信息:显示公交、地铁线路和站点信息,方便用户查阅。
[0078] 态势标绘点图层、态势标绘线面图层则提供了用户可以添加自定义标绘点,设置样式、坐标等信息;用户添加的定制化线段或多边形,用于在地图上标注道路、建筑物轮廓等。这些标绘点会在地图上显示,实现用户定制化标注需求。
[0079] 隔离加载模块,用于由第一线程加载地图引擎,展示所述地图卫片图层,由第二线程在后台加载所述态势标绘点图层和所述态势标绘线面图层;该模块中,通过将态势能力的绘制逻辑计算在ServiceExtensionAbility中,通过后台非主线程的机制,隔离业务计算造成UI卡顿的问题。首先创建ServiceExtensionAbility,这是一个后台服务能力。处理态势能力的绘制计算逻辑,这些运算会在后台线程中执行。前台UI线程只负责将计算结果画到地图界面上,不直接执行复杂的绘图运算逻辑。通过Binder机制,ServiceExtensionAbility将计算结果返回给前台UI线程,UI线程接收结果后将其画到界面上。这样前台UI线程就不会因繁重的绘图运算导致界面卡顿,提高了用户体验。
[0080] 堆叠模块,用于通过所述开源鸿蒙的Stack组件将所述态势标绘点图层和所述态势标绘线面图层堆叠在所述地图卫片图层上;该模块中,为了防止图层堆叠时造成卡顿,保证系统顺利加载,定义平衡因子ω1为控制态势标绘点图层和所述态势标绘线面图层中的渲染的资源分配因子;定义平衡因子ω2为控制所述地图卫片图层中的渲染的资源分配因子;对于加载地图的每一帧,检测加载所述态势标绘点图层和所述态势标绘线面图层的第一队列中的第一消息数量和加载所述地图卫片图层的第二队列中的第二消息数量;若所述第一消息数量或所述第二消息数量大于阈值,则相应地增加所述第一平衡因子ω1、第二平衡因子ω2,并根据所述第一平衡因子ω1、第二平衡因子ω2更新渲染态势标绘点图层和所述态势标绘线面图层对应的CPU及内存频率、渲染所述地图卫片图层对应的CPU及内存频率。定义:Stack中渲染层级数量为n,地图卫片图层的MessageQueue数量为m;定义平衡因子:stackBalanceFactor=ω1,mapBalanceFactor=ω2;当ω1增加时,增加新渲染态势标绘点图层和所述态势标绘线面图层对应的CPU及内存频率;当ω2增加时,增加新渲染地图卫片图层对应的CPU及内存频率。
[0081] 如果CPU/内存超过阈值,ω1与ω2同比例减小;每一帧,主线程根据stackCpuFrequencyi与stackMemoryFrequencyi检查Stack第i层MessageQueue,如果消息过多, ;如果消息过少,ω1/=(ΣstackLayeri+1QueueSize/ΣstackLayeriQueueSize);根据mapCpuFrequency与mapMemoryFrequency检查底图MessageQueue,如果消息过多,
;如果消息过少,ω2/=(ΣmapQueueSize/Σ
renderMapTimes);相应的,根据Stack每层与底图的CPU/内存频率,确定下一帧相应层级与地图的渲染次数;根据Stack各层MessageQueue与底图MessageQueue的消息数量,选择ω1与ω2,实现动态负载均衡,确保地图顺畅加载。
[0082] 设备间共享模块,其中,用于在不同设备之间对所述态势标绘点图层和所述态势标绘线面图层进行加载时,通过分布式计算可以减少单个设备的计算数量,所述不同设备根据其性能确定其自身地图加载精度,并可确定不同通信方式对分布式计算的结果进行共享;如图3所示;因为不同的设备根据业务会计算不同的标绘信息,在各自设备上使用硬件资源计算后的结果,使用软总线组网分享的分布式能力distributedDataObject,创建该对象,将计算结果同步到对象中,设置同样的SessionID在设备组网后会默认共享该数据对象,就可以得到计算结果,即,多设备协同计算。
[0083] 在地图缩放等操作过程中,我们可以如下实现多种分布式能力:1.分布式地图数据计算:当用户缩小地图比例尺时,可以选择部分计算能力较强的设备计算更高精度的地图数据,然后使用distributedDataObject对象共享该结果,其他设备加载共享数据实现地图details的显示。这可以避免所有设备重复计算更高精度地图数据,提高效率。
[0084] 不同设备根据其性能确定其自身地图加载精度包括:根据所述不同设备的性能指数分别计算所述不同设备加载地图的精度,通过如下公式实现:
[0085]
[0086] 其中, 表示第i个设备的地图加载精度,是该设备所能呈现的地图精细程度的量化指标, 表示第i个设备中的在处理第j个地图层内容所需的计算能力大小,n表示地图层总数; 表示第i个设备所占据的总内存容量 ,反映了设备的存储容量大小,G表示该设备的处理器的性能或性能级别的系数,反映了设备的处理能力; 表示该设备的网络带宽和稳定性的系数,反映了设备的网络传输能力。 是一个与设备的网络带宽和稳定性相关的系数,可以通过一系列实验和测试来计算得出。在计算 值时,需要进行不同网络环境下的测试和数据统计,以评估不同网络带宽和网络稳定性对设备性能的影响,并将其归一化为一个系数。常用的测试方法包括测量设备在特定网络带宽和延迟条件下进行大文件传输的速度,以及在网络拥塞和其他干扰因素下承受的数据包丢失率等指标。通过统计不同网络环境下的测试数据,可以计算出一个针对设备的 值。这个值可以在设备的产品规格中标注,以供用户或第三方开发者参考。 值越高,表示设备的网络传输性能越好,能够支持更高质量的数据传输和应用效果。
[0087] 对于不同的网络加载方式,其网络带宽和网络传输稳定性等参数都有所不同。因此,对于每种不同的网络加载方式, 可以赋予不同的值,以反映其在加载地图过程中所具有的不同网络传输能力。
[0088] 例如,在使用Socket进行地图内容共享时,Socket性能高,网络稳定性较好,因此其网络传输能力可以设为1.0,即完全支持地图加载。而在使用AIDL或MQTT进行地图内容共享时,由于网络传输效率相对较低,因此其网络传输能力可以设置为小于1.0的值,以反映其在地图加载过程中效率不如Socket的特点。当设备的 值较高时,还可以优先加载高分辨率的地图片层或者采用同时加载多个地图片层的方式,以提高地图加载效率和用户体验。
[0089] 在计算设备的地图加载精度时,可以在公式中将 设为不同的值,以匹配不同的网络加载方式。例如,在使用Socket进行地图加载时,可以将 设为1.0,而在使用AIDL或MQTT进行地图加载时,可以将 设为0.8或其他适当的值,以反映网络传输效率的影响。这样就可以根据不同的网络加载方式对公式进行适当调整,以准确反映设备的地图加载性能。
[0090] 在地图缩放过程中,我们可以如下实现多种分布式能力:1.分布式地图数据计算:当用户缩小地图比例尺时,可以选择部分计算能力较强的设备计算更高精度的地图数据,然后使用distributedDataObject对象共享该结果,其他设备加载共享数据实现地图details的显示。这可以避免所有设备重复计算更高精度地图数据,提高效率。当用户放大地图比例尺时,H可以选择部分设备计算更低精度的地图概览数据,并共享至其他设备,然后由各设备再次细化与渲染,实现地图特征的快速显示。这可以通过分散计算降低单设备的压力。2.MQTT消息共享:当地图缩放时,每个设备可以将自身正在处理的地图数据量、性能参数等信息通过MQTT发布至主题。其他设备订阅该主题得到相关信息,根据整体设备性能情况调整自身地图数据计算或加载量,实现colormap的动态调整与优化。这可以充分利用多个设备的计算资源,避免某设备过载。3.基于AIDL的远程调用:每个设备通过AIDL公开自身的地图服务接口,当设备地图缩放时,可以调用其他设备的AIDL接口请求其计算部分地图数据或某区域地图详情。该结果再通过distributedDataObject共享给其他设备。这可以避免某设备单独计算较大或较复杂地图区域的数据,实现负载均衡。当设备的值较高时,还可以优先加载高分辨率的地图或者采用同时加载多个地图片层的方式,以提高地图加载效率和用户体验。
[0091] 设备中共享模块,在同一个设备中其他业务调用地图业务时,通过数据库共享呈现所述地图。本实施例中有多种方式实现这个功能。
[0092] 例如:DBHelper应用定义数据库连接池及相关操作方法;DBHelper通过AIDL公开获取连接池连接的接口:getConnection();其他应用通过AIDL连接DBHelper,调用getConnection()获取数据库连接;进行数据库操作,共享数据库连接池与数据。
[0093] 2.通过EventBus实现数据库更新事件的共享:DBHelper应用定期扫描数据库变化,发布更新事件;其他应用订阅事件,接收数据库更新消息;更新本地缓存数据,实现数据同步。
[0094] 3.基于Socket通信实现实时数据库更新推送:DBHelper应用开启Socketserver,监听新连接;其他应用连接到Socketserver,发送数据库更新请求;DBHelper接收请求,查询最新数据推送至其他应用;其他应用接收更新数据,更新本地缓存,实现实时数据同步。
[0095] 4.定义State对象在应用间共享数据库状态:DBHelper定义State对象dbState存储数据库状态;监听dbState变化,更新数据库;其他应用直接访问dbState读写数据,实现状态同步;DBHelper根据dbState同步更新数据库,反之亦然。
[0096] 在地图功能有其他业务插件需要使用的地图组件的需求。业务上会将地图模块封装为小地图组件,以npm的形式提供给插件进行集成。地图小组件项目使用Module的形式创建,打包为tgz,在其他项目中将taz使用npm安装。
[0097] 因为不同应用间的业务结果需要同步共享到地图上,使用开源鸿蒙OpenHarmony的State模型datashareability能力。即,应用间数据库共享的能力。可用于其他逻辑调用和共享地图数据,达到无感知的效果。
[0098] 本发明还提出了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现所述的基于开源鸿蒙系统的地图呈现方法。
[0099] 综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
[0100] 对于本领域技术人员而言,显然本发明实施例不限于上述示范性实施例的细节,而且在不背离本发明实施例的精神或基本特征的情况下,能够以其他的具体形式实现本发明实施例。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明实施例的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明实施例内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。系统、装置或终端权利要求中陈述的多个单元、模块或装置也可以由同一个单元、模块或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
[0101] 最后应说明的是,以上实施方式仅用以说明本发明实施例的技术方案而非限制,尽管参照以上较佳实施方式对本发明实施例进行了详细说明,本领域的普通技术人员应当理解,可以对本发明实施例的技术方案进行修改或等同替换都不应脱离本发明实施例的技术方案的精神和范围。