一、背景

在GIS系统建设中,经常遇到对实时位置数据接入与展现的需求,比如车辆位置、实时航班、人员位置等,此类数据多以流数据的形式存在,如何对接多种来源的实时数据,如何实时推送至WEB前端?

二、技术方案

接下来我们选定SuperMap iServer实现实时位置数据(流数据)的接入、推送、展示

①流数据服务:实现流数据在iServer端的接入,比如socket、kafka等

②数据流服务:实现将数据以websocket形式推送至客户端

③客户端展示:客户端订阅websocket,实时接收数据更新

三、流数据接入

iServer流数据服务支持接入如下数据:Socket、WebSocket、Http、文件系统(CSV等)、kafka、JMS。在此,我们选择kafka作为数据来源。

使用流数据服务之前,需要先开启Spark集群,可以直接使用iServer内置的Spark来搭建集群,也支持既有的Spark集群,在此我们使用iServer内置的Spark来搭建集群。

①开启Spark集群:登陆iServer,集群》配置集群》启用分布式集群》启用本机Spark集群

sse如何获取接口流式回传的参数 java 流式数据接入_网络协议

②加入Spark集群:集群》加入集群》集群地址改为本机》勾选分布式分析节点和报告器

sse如何获取接口流式回传的参数 java 流式数据接入_kafka_02

 

③配置流数据服务

sse如何获取接口流式回传的参数 java 流式数据接入_数据_03

 ④配置kafka接收器:接收kafka数据

sse如何获取接口流式回传的参数 java 流式数据接入_网络_04

配置kafka连接信息及数据内容:接收数据格式、元数据、kafka服务器地址、topic数组、groupID

sse如何获取接口流式回传的参数 java 流式数据接入_网络协议_05

 配置kafka数据元信息:epsg(多为4326,即wgs84),id字段(唯一标识)、数据类型(支持点、线、属性等,多为点)、字段信息(源字段映射关系)

sse如何获取接口流式回传的参数 java 流式数据接入_websocket_06

 ⑤配置websocket发送器:将数据推送至客户端

结果信息格式设置为GeoJsonFromatter

填入Websocket服务地址,包含令牌信息(具体参考第四步中数据流服务发布)

 

sse如何获取接口流式回传的参数 java 流式数据接入_数据_07

 

四、数据推送至前端

iServer接收了kafka数据后,需要通过WebSocket以广播的形式推送至浏览器端,实现前端系统的实时展示,在此通过iServer数据流服务实现

①发布数据流服务:服务》概述》快速发布服务》数据流》指定服务名称

sse如何获取接口流式回传的参数 java 流式数据接入_kafka_08

 ②订阅测试:通过数据流服务页面订阅,测试数据是否正常接入

sse如何获取接口流式回传的参数 java 流式数据接入_websocket_09

 

五、前端展示

iServer通过流数据和数据流服务实现了kafka数据的接入,websocket消息的广播,接下来需要浏览器端接收订阅消息并进行实时位置及状态展示。

途径一:使用SuperMap客户端SDK对接数据流服务,可直接实现数据解析展示与上图,具体可参考范例及API

sse如何获取接口流式回传的参数 java 流式数据接入_网络协议_10

 途径二:自行开发直接对接数据流服务(即WebSocket),更加灵活的实现数据的解析与展示

sse如何获取接口流式回传的参数 java 流式数据接入_数据_11

 

后记

到此,我们基于iServer实现流数据的接入与展现,我们能够实现位置数据在地图上的实时展现,后续我们将介绍实时位置展示的另一个场景:电子围栏。