一种基于地图服务的高密度船位动态渲染系统的制作方法

文档序号:32392029发布日期:2022-11-30 08:40阅读:48来源:国知局
一种基于地图服务的高密度船位动态渲染系统的制作方法

1.本发明属于地理信息技术领域,尤其涉及一种基于地图服务的高 密度船位动态渲染系统。


背景技术:

2.目前在浏览器端加载船位主要通过请求获取json或geojson(一 种对各种地理数据结构进行编码的格式,基于javascript对象表示 法的地理空间信息数据交换格式)格式数据,以矢量要素(vector) 的形式加载至图层中。但受浏览器性能限制,传统方案无法满足海量 船位数据的加载需求。为解决该问题,主流的解决方案主要有以下三 大类:
[0003][0004]
(1)基于要素聚合的船位动态显示技术
[0005]
该方案通过简化要素结构或合并要素等方法达到加载海量数据 的目的,聚合效果如图1(a)、图1(b)所示,聚合优点是前端可 以采用常规要素操作方法控制要素,但船位作为展示核心要素,需要 在地图上完整展示,因此该方案只能作为一种临时的解决方案。
[0006]
(2)基于切片服务的船位动态显示技术
[0007]
常用的web地图瓦片服务(wmts)有栅格切片(rastertiles) 和矢量切片(vectortiles)两类。栅格切片服务的底层数据类型是栅 格图片,是目前理论中最适合渲染高密度船位的方案,但传统的栅格 切片服务存在切片速度过慢、切片缓存包过大、无法实现动态变化和 无法交互等问题;矢量切片是一种可交互的地图服务,包含geojson、 topojson和mapboxvectortile(mvt)等多种格式。如图2(a)、 图2(b)所示,虽然可以mvt实现前端自主控制样式渲染,但其本 质仍是对矢量要素进行聚合和稀疏处理,因此也不适用于高密度船位 渲染。
[0008]
(3)其他
[0009]
该类方案主要基于webgl技术实现,该方案通常需要对webgis 引擎框架的底层进行修改,开发成本较高,实际使用中海量数据需实 时请求传输,网络服务压力较大。


技术实现要素:

[0010]
为解决上述技术问题,本发明提出一种基于地图服务的高密度船 位动态渲染系统,通过在后端利用geoserver服务器发布地图服务, 并对其提供的restapi进行加工处理和封装,浏览器端进行适量的 规则约束,最终系统的解决了目前切片制作速度慢、无法更换样式、 无法交互等一系列问题,实现浏览器端的高效、动态、海量、高密度、 可交互、可自定义样式的船位渲染。
[0011]
为实现上述目的,本发明提供了一种基于地图服务的高密度船位 动态渲染系统,包括:
[0012]
服务身份验证模块、数据处理模块、自动发布切片模块、自定义 样式模块和点击交互模块;
[0013]
所述服务身份验证模块用于对后端服务架构进行系统的设计,实 现后端的业务服务器和geoserver服务器的分离;
[0014]
所述数据处理模块用于对保存在业务服务器数据库中的船位数 据进行数据预处理,生成shipfile文件;
[0015]
所述自动发布切片模块用于利用后端调用geoserver服务器提 供的api,实现对所述shipfile文件进行发布;
[0016]
所述自定义样式模块用于利用后端开发技术与geoserver服务 器提供的api和发布的所述shipfile文件,实现对船位的自定义渲 染;
[0017]
所述点击交互模块用于利用javascript和webgis前端技术,提 高用户在前端的使用体验。
[0018]
优选的,所述服务身份验证模块的工作内容包括:
[0019]
用户登录后获取密钥,前端对wmts服务url进行改造并将密钥 作为参数参见至url中,后端通过请求获取key,并对key进行验证, 实现后端的业务服务器和geoserver服务器的分离。
[0020]
优选的,所述数据处理模块进行数据预处理的过程包括:
[0021]
从船位数据库中,获取需要通过栅格切片展示的船位数据;
[0022]
将所述船位数据中的多字段数据融合至一个字段;
[0023]
删除所述船位数据中的冗余字段,仅保留所述船位数据中的经纬 度、终端号和设备类型信息。
[0024]
优选的,所述自动发布切片模块在第一次发布shipfile文件后, 需进入geoserver服务器的geowebcache管理页面检查发布服务是否 开启切片缓存功能,开启切片缓存功能后,会有本地目录下生成栅格 缓存文件,在切片服务更新后需及时删除缓存文件,防止geoserver 服务器继续调用旧服务缓存资源。
[0025]
优选的,切片服务更新后,前端的webgis需要重置url以防止 由于浏览器缓存资源而导致用户船位数据不更新的问题。
[0026]
优选的,所述自定义样式模块包括图标上传子模块、创建符号系 统子模块、创建样式子模块和图层样式子模块;
[0027]
所述图标上传子模块用于将图标文件从前端上传至后端,后端再 将图标文件的数据流转换为对应的格式文件;
[0028]
所述创建符号系统子模块用于根据指定过滤规则,转换格式后的 图标文件自动生成对应的sld规则样式内容;
[0029]
所述创建样式子模块用于调用geoserver服务器中的styles相 关api,将生成的sld规则样式内容上传至geoserver服务器的样式 中;
[0030]
所述图层样式子模块用于利用geoserver服务器中api,获取指 定图层原有的样式记录,对原有的样式记录进行修改后,生成新的样 式记录并再次调用layers相关api将新的样式记录应用至指定图层 上。
[0031]
优选的,所述点击交互模块包括地图点击交互事件子模块、wmts 服务与矢量要素切换渲染子模块;
[0032]
所述地图点击交互事件子模块用于通过前端webgis引擎获取点 击位置的坐标并
传给后端业务服务器;
[0033]
所述wmts服务与矢量要素切换渲染子模块用于在地图缩1-14级 之前强制前端地图引擎采用地图服务的方式进行船位渲染,15级以 后强制采用矢量要素方式渲染船位。
[0034]
优选的,通过前端webgis引擎获取点击位置的坐标并传给后端 业务服务器的过程包括:
[0035]
根据瓦片矩阵集反算点击位置的相对位置,请求geoserver服务 器获取船位识别号;
[0036]
根据船位识别号查询数据库中的船位相关信息,对查询结果进行 标准化处理后返还给前端,即实现前端点击切片服务地图达到与点击 矢量要素相似的效果。
[0037]
与现有技术相比,本发明具有如下优点和技术效果:
[0038]
(1)定时从数据库获取船位数据并发布栅格切片服务,实现地 图服务的动态更新;
[0039]
(2)用户可根据需求自定义wmts服务中的船位样式;
[0040]
(3)浏览器端流畅的进行船位渲染,实现任意缩放等级下的地 图数据交互效果。
附图说明
[0041]
构成本技术的一部分的附图用来提供对本技术的进一步理解,本 申请的示意性实施例及其说明用于解释本技术,并不构成对本技术的 不当限定。在附图中:
[0042]
图1为基于要素聚合的船位动态显示技术要素聚合效果示意图, 其中,(a)为聚合前示意图,(b)为聚合后示意图;
[0043]
图2为基于切片服务的船位动态显示技术mvt预览图,其中,(a) 为z级别下的mvt预览图,(b)为z+1级别下的mvt预览图;
[0044]
图3为本发明一种基于地图服务的高密度船位动态渲染系统结 构示意图;
[0045]
图4为本发明身份验证流程图;
[0046]
图5为本发明定时发布服务示意图;
[0047]
图6为本发明自定义样式流程图。
具体实施方式
[0048]
需要说明的是,在不冲突的情况下,本技术中的实施例及实施例 中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本 申请。
[0049]
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算 机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻 辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或 描述的步骤。
[0050]
geoserver是一款基于je22的开源地图服务器,其遵循ogc开 放标准,具有功能全、拓展性高等优点,并且为用户提供rest规范 api,用户可通过api完成对geoserver中的workspace(工作区)、 datastore(存储空间)、layers(图层)及styles(样式)等内容 进行管理操作。
[0051]
为解决浏览器端动态、海量、高密度船位的渲染问题,本发明从 船位与webgis引擎特性出发,利用geoserver并结合前、后端技术, 提出一种基于地图服务的高密度船位动
态渲染系统,本发明的技术方 案需要前端、后端、geoserver协同处理方能实现最终的效果。
[0052]
如图3所示,本发明提供一种基于地图服务的高密度船位动态渲 染系统,根据功能可以划分为服务身份验证模块、数据处理模块、自 动发布切片模块、自定义样式模块和点击交互模块4大模块进行阐述:
[0053]
服务身份验证模块,对后端服务架构进行系统的设计,实现后端 业务服务器和geoserver服务器的分离,即所有的geoserver操作必 须通过后端验证后方可进行,控制用户的高危操作行为并减轻 geoserver服务器压力。如图4所示,用户登录成功时,后端服务器 会返给key用于身份验证,由于webgis引擎在请求切片时无法直接 在请求头中携带key且请求方式采用的get方式,因此在切片请求的 url中直接携带密钥key,服务器截获url后获取密钥,进而进行身 份验证。
[0054]
数据处理模块,对保存在数据库中的船位数据进行数据预处理, 预处理工作包含筛选、融合、精简三步。其中筛选:从船位数据库中 获取需要通过栅格切片展示的船位数据;融合:将多字段数据融合至 一个字段,如渔船雷达类型有ais、北斗等多种类型,将所有雷达类 型字段融合至“type”为例的字段中,type等于1代表ais、2为北 斗、10为ais离线等;精简:删除冗余字段,仅保留船位的经纬度、 终端号、设备类型等必要信息。最后将预处理后数据存储至shapfile 文件中并保存至指定目录下。
[0055]
自动发布切片模块,利用服务器调用geoserver提供的api实现。 遵循不存在则新建,存在则先删除旧图层再重新创建的原则,从而达 到数据覆盖的目的。发布的数据源为数据处理模块生成的shipfile 文件。
[0056]
具体的,发布服务前对船位数据进行预处理,从数据库中读取船 位数据,筛选过滤后创建shipfile(一种主流空间数据开放格式) 文件。调用geoserverapi中的工作区、存储空间及图层接口实现图 层发布。对api进行二次封装,传入对应参数即可将shp数据发布为 wmts服务。前后端预定更新频率和时间,通过定时任务即可完成 发布和更新服务即可实现船位的动态渲染。经过实际测试,更新频率 在5分钟时,更新延迟对实际使用体验影响可以忽略不计,如图5所 示。
[0057]
注意,第一次发布后,需进入geoserver的geowebcache管理页 面检查发布服务是否开启切片缓存功能。开启切片缓存功能后,会有 本地目录下生成栅格缓存文件,因此在切片更新后需及时删除缓存文 件,防止geoserver继续调用旧服务缓存资源。切片服务更新后,浏 览器前端的webgis需要重置url以防止由于浏览器缓存资源而导致 用户船位数据不更新的问题,前、后端可约定自动更新频率,自动执 行相关任务。目前,该方案存在大量切片数据被存储在内存中的弊端, 当内存紧张时可能会造成服务卡顿,但可通过适量提高服务器性能并 在给geoserver服务器分配足够数量内存解决该问题。
[0058]
自定义样式模块,利用成熟的后端开发技术与geoserver提供的 api,解决wmts发布后无法修改样式的问题,实现船位的自定义渲染。 自定义样式主要包含图标上传、创建符号系统、创建样式、图层样式 应用四大子模块。
[0059]
(1)图标上传子模块,利用base64或者xml格式将目标png(一 种非失真性压缩位图图形文件格式)或svg(可缩放矢量图形)文件 从前端上传至后端服务器,后端服务器再将数据流转换为对应的格式 文件,图标文件需要保存至指定的样式目录的同时在数据库
中添加相 应记录;
[0060]
(2)创建符号系统子模块,根据指定过滤规则,系统自动生成 对应的sld规则样式内容,默认采用8像素红色圆形符号,支持利用 标签绑定船位旋转角度字段。若用户指定使用第一步上传的图标作为 渲染样式,则系统会通过查询数据库获取对应图标的绝对路径并应用 至sld中;
[0061]
(3)创建样式子模块,调用geoserver中的styles相关api(一 些预先定义的函数)将第二步生成的sld样式内容上传至geoserver 的样式中。
[0062]
(4)图层样式子模块,利用geoserverapi获取指定图层原有 的样式记录,对原有样式记录进行修改后,生成新的样式记录并再次 调用layers相关api将新样式记录应用至指定图层上。
[0063]
系统对上述步骤进行了全面的封装并以api的形式供用户调用, 用户调用接口时,传入相应的参数即可完成上述任意子模块的执行效 果。
[0064]
具体的,以切片服务显示指定区域为例,前端在url(统一资 源定位器)中传入显示区域编号(如370282)并对请求url增加style 字段,最终请求地址示例如下所示:
[0065]
http://ltserver.com/wmts?z=4&x=13&y=6&style=370282&key=xxxx.xxx
[0066]
后端根据图6所示流程进行样式配置,即可实现只显示区域编号 为370282的船位效果。
[0067]
用户要指定船位图标或使用上传图片时,可通过表单的形式将样 式过滤条件上传至后端,后端根据过滤条件创建sld(一种风格化图 层描述器的简称)内容并生成对应样式。样例中的ship为样式名,zd 为船位终端类型,fwj为角度字段。最终创建名为ship的样式,当zd 等于1时,采用绿色20大小的三角形表示船位,当zd等于2时,采 用geoserver根目录下的sj.png表示点位并以fwj字段值作为图片旋转 角度。适量增加过滤条件即可达到清晰明了的船位渲染效果。
[0068]
地图交互模块,利用javascript(即时编译型的编程语言)和 webgis(网络地理信息系统)等前端技术提高用户在浏览器端的实际 使用体验,包含地图点击交互事件、wmts服务与矢量要素切换渲染 两个子模块
[0069]
(1)地图点击交互事件子模块,浏览器端通过webgis引擎获取 点击位置的坐标并传给后端业务服务器,根据表1所示的瓦片矩阵集 反算点击位置的相对位置,根据相对位置请求geoserver获取船位识 别号,再根据识别号查询数据库中的船位相信信息,对结果进行标准 化处理后返还给前端,即实现浏览器端点击切片服务地图达到与点击 矢量要素相似的效果。
[0070]
表1
[0071][0072]
(2)地图服务与矢量要素动态切换渲染子模块,本方法在地图 缩放1-14级之前强制前端地图引擎采用地图服务的方式进行船位渲 染,15级以后强制采用矢量要素方式渲染船位,以此提高资源利用 效率和用户使用体验。
[0073]
以上,仅为本技术较佳的具体实施方式,但本技术的保护范围并 不局限于此,任何熟悉本技术领域的技术人员在本技术揭露的技术范 围内,可轻易想到的变化或替换,都应涵盖在本技术的保护范围之内。 因此,本技术的保护范围应该以权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1