Skip To Content

流服务

随着提供实时数据流的数据源数量的增加,您的应用程序更需要具备使用并立即显示此事件数据的能力。 延迟是在企业级地理数据库中要素图层内首次存储该事件数据的过程中被引入,以使客户端可定期对要素服务进行轮询以检索用于显示的数据,但现已证明延迟存在问题,尤其是在使用大量的数据流的情况下。

必须对现有模式进行更改。 数据保留必须作为存档任务与实时传入客户端的事件数据并行处理。 建议您使用一种新的 ArcGIS Server 服务 - 流服务。

流服务简介

流服务侧重于客户端 - 服务器数据流的低延迟和实时数据传播。 连接到流服务的客户端将在订阅服务后立即开始接收数据。 客户端可以指定和重新配置空间和属性约束,而无需先取消订阅再重新连接到服务。

要使用流服务,必须在您的企业级 GIS 上安装已获许可的 GeoEvent Server。 流服务内容可以整合至 ArcGIS OnlinePortal for ArcGIS Web 地图以及 ArcGIS Pro 中,也可以通过使用 ArcGIS Maps SDK for JavaScript 开发的客户端显示。

流服务采用 WebSocket 技术,支持全双工双向通信。 这使客户端可以指定其要接收的数据,而无需取消订阅并重新建立与服务的连接。 客户端可以通过指定空间或属性约束来过滤流服务数据。

通过连接到流服务以接收实时数据源的数据,您可以将即时事件可视化的基本需求与将数据保留在数据库中的需求分开。 通过配置 GeoEvent Server 输出以便通过流服务传播事件数据,您可以在企业级关系数据存储或时空大数据存储中存储最新事件数据,但这些操作不是数据可视化的必要步骤。

下图比较了传统的要素数据接收、处理及使用方式和使用流服务时的实时数据接收和传播方式。

传统要素数据工作流与使用流服务接收并广播的实时数据

在本图上部可以看到,在流服务之前实时数据为何最初必须在要素类中,并需要企业级地理数据库。 要显示数据,客户端应用程序必须定期轮询要素服务以获取新要素和更新的要素。

图的下部分显示了如何通过流服务接收实时数据并使用 WebSocket 立即将数据传送至客户端。

有关在 GeoEvent Server 中使用流服务的详细信息,请参阅 GeoEvent Server 教程中的流服务教程

流服务发布

GeoEvent Manager 中创建和发布流服务是配置将要素发送至流服务输出连接器工作流的一部分。

配置“将要素发送至流服务输出连接器”时,建议使用在 GeoEvent Server 中注册为默认设置的 ArcGIS ServerPortal for ArcGIS 连接。

配置并作为 GeoEvent Server 实例的一部分运行的“将要素发送至流服务输出连接器”必须整合到在相同 GeoEvent Server 上配置并运行的 GeoEvent 服务中。

ArcGIS REST 服务目录中的流服务

流服务与任何其他 ArcGIS Server 服务一样,在 ArcGIS REST 服务目录中列出。 查看流服务的属性,同时使用控件广播事件数据并订阅,以便从流服务接收事件数据。

  • 单击广播将打开一个 Web 页面,您可以在其中提供一个或多个要素的 Esri 要素 JSON 制图表达,然后将要素发送到连接到流服务的客户端。
  • 单击订阅将打开一个Web 页面,您可以从中连接到流服务,以查看所有正在进行流式传输的要素。 如果数据流包含大量数据,则页面上的表单很快就会过载;短时间使用此页面只是为了确认订阅流服务的客户端正在接收数据。

有关 ArcGIS REST API 中的流服务的详细信息,请参阅流服务

使用流服务

在 ArcGIS REST 服务目录中流服务的属性页面中,单击 ArcGIS JavaScript 生成动态 HTML 页面,可在其中查看正在由流服务广播的数据。

右键单击 ArcGIS JavaScript,然后单击查看源以查看 JavaScript 代码。 开发人员可以使用并自定义此代码,从而创建 Web 应用程序以使用流服务。

另一种使用流服务的方式是将其整合至 Web 地图和 ArcGIS Pro 中。

有关在 ArcGIS Pro 中使用流服务的详细信息,请参阅流图层

过滤流服务

每个客户端都可以对流服务进行过滤。 在从流服务发送数据之前,每个客户端都可以请求对数据应用过滤器。 此过滤器不会影响流向任何其他客户端的数据。 可在建立连接时或在建立连接后对过滤器进行指定。

这些设置和其他设置可以在通过打开 WebSocket 连接建立连接时应用。

为数据流设置空间参考

流服务具有默认空间参考,可在 ArcGIS Server Manager 中的服务描述页面查看该参考。 如果客户端想在不同于默认参考的空间参考中接收数据,则必须在连接时进行设置。 设置空间参考后,无法在该连接的使用期限内对其进行更改。 要更改空间参考,必须创建一个新的 WebSocket 连接。 要覆盖默认空间参考,请使用关键字 outSR 并知晓所需空间参考的熟知 ID (WKID),将 outSR=<WKID> 添加到 URL。 例如:要将默认空间参考设置为 WKID 为 3857 的 WGS 1984 Web 墨卡托(辅助球体),需将 outSR=3857 添加到 URL,如 ws://HOSTNAME:6180/arcgis/services/Vehicles/StreamService/0/subscribe?outSR=3857

配置过滤器

流服务过滤器可包括空间组件、类似 SQL 的查询组件以及 outFields 组件。 可以独立设置和清除每个组件,从而在任意事件点使其中的任意或全部组件生效,或者均不生效。 要设置过滤器的一部分,请指定该部分并忽略其余部分。 过滤器的其他部分将保持不变。

几何过滤器

过滤器的几何部分与 ArcGIS REST API 返回的 JSON 几何对象的结构相同。 要保持流服务的性能,仅接受包络矩形作为几何类型。

过滤器也可包括通过关键字 spatialRel 来识别的空间关系。 这表示执行查询时应用于输入几何的空间关系。 唯一受支持的空间关系是相交 (esriSpatialRelIntersects),这是默认设置。

几何过滤器将假定为与连接位于相同的空间参考中,该空间参考仅可以在连接时覆盖。 如果将不同的空间参考指定为几何的一部分,则包络矩形会投影到连接的空间参考中,以供从数据流中过滤要素时使用。

Where 过滤器

Where 过滤器是类似于 SQL 的表达式,通过检查要素属性是否符合指定的 Where 子句来过滤数据流中的要素。 该表达式必须是带引号的 JSON 字符串值。 支持的运算包括 AND、OR、NOT、=、!=、<、<=、>、>=、IS NULL、IS NOT NULL、IN 以及 LIKE。 可对字段和文本值(例如 'field1 > 1')或两个相似类型的字段(例如 'field1 >field2')进行比较。 可添加括号以明确优先执行。

  • 数值比较 - 如比较字段 (Altitude) 与数值:"Altitude < 1000"
  • 字段比较 - 如比较两个字段:"speed > maxSpeed"
  • 字符串比较 - 还可比较字符串。 比较区分大小写,文字值必须用单引号括起来,例如:"Departure_Airport='KZSE'"
  • LIKE 语句 - 通过 LIKE 语句可使用通配符比较字符串。 百分号可以是任意数量的字符,下划线可以是任意单个字符。 以下示例将接受第二个和第三个字符为字母 am 的名称,例如 Samantha 和 James:"name LIKE '_am%'"
  • IN 语句 - IN 语句允许指定文本值列表。 如果字段与列表中的任意值匹配,则要素会经过该流。
    • 以下为字符串列表的示例:"name IN ('Bob','Jane','Henry')"
    • 以下示例为使用数值列表的 IN 语句:"alertCode IN (404,500,505)"
    • 您也可以使用布尔型字段代替布尔表达式。 例如,如果您的要素中包含一个名为 active 的布尔型字段,则可编写一个 where 子句,该子句可传递任意 active 字段设置为 true 的要素,如:"active"

输出字段过滤器

使用由关键字 outFields 标识的输出字段过滤器可逐一过滤数据流中的字段。 所需的字段使用逗号分隔的字段名称列表定义。