При возрастающем числе источников, предоставляющих потоковые данные в реальном времени, возможность приложений принимать и немедленно отображать эти данные становится все более важной. Задержка, связанная с хранением данных событий в классе объектов многопользовательской базы геоданных и периодическим обращением клиентов к сервису объектов для получения данных для отображения, становится проблематичной, особенно при работе с потоками данных большого объема.
Такой подход требует изменений. Необходимо обеспечить непрерывность потока данных в виде архивирования, параллельно с передачей данных событий клиентам. Рекомендуется использовать потоковый сервис - вариант сервиса ArcGIS Server.
Введение в потоковые сервисы
Потоковый сервис обеспечивает распространение данных в реальном времени с низкой задержкой для потоков данных клиент/сервер. Клиенты, подключившиеся к потоковому сервису, начинают получать данные сразу после подписки на сервис. Клиенты могут задавать и перенастраивать пространственные и атрибутивные ограничения без отключения и повторного подключения к сервису.
Для использования потоковых сервисов требуется лицензировать GeoEvent Server и установить его в среде ГИС. Потоковый сервис может быть включен в веб-карты ArcGIS Online и Portal for ArcGIS, в ArcGIS Pro, а также работает в клиентских приложениях, разработанных с помощью ArcGIS API for JavaScript.
Потоковые сервисы используют технологию WebSocket, которая поддерживает полнодуплексный двунаправленный обмен данными. Это позволяет клиентам указывать, какие данные им необходимо получить, без отключения и повторного подключения к сервису. Клиенты могут фильтровать данные потокового сервиса с помощью пространственных или атрибутивных условий.
Подключение к потоковому сервису для получения данных в реальном времени позволяет отделить необходимость немедленного отображения событий от необходимости хранения данных в базе. Настроив выход GeoEvent Server на передачу данных событий через потоковый сервис, вы получите возможность сохранения данных событий в корпоративном хранилище реляционных данных или в хранилище пространственно-временных больших данных, но для визуализации данных это не требуется.
На рисунке ниже показано сравнение традиционного способа получения, обработки и использования данных объектов с получением и передачей данных в реальном времени с помощью потоковых сервисов.
В верхней части рисунка показано, что до появления потоковых сервисов, данные, полученные в реальном времени, сначала записывались в класс объектов, что требовало наличия многопользовательской базы геоданных. Для отображения данных, клиентские приложения должны были периодически обращаться к сервису объектов, для получения новых объектов и обновлений.
В нижней части рисунка показано, как потоковые сервисы позволяют получать данные в реальном времени и сразу направлять их в приложения клиентов по протоколу WebSocket.
Обратитесь к учебному руководству по потоковым сервисам, доступному в руководствах к GeoEvent Server, чтобы получить более подробные сведения о создании и публикации потоковых сервисов в GeoEvent Server.
Публикация потокового сервиса
Потоковые сервисы создаются и публикуются в GeoEvent Manager с помощью выходного коннектора Отправить объекты в потоковый сервис.
При настройке отправки объектов в выходной коннектор потокового сервиса рекомендуется использовать подключение ArcGIS Server или Portal for ArcGIS, зарегистрированное как подключение по умолчанию в GeoEvent Server.
Отправка объектов в выходной коннектор потокового сервиса, настроенная и запущенная в рамках экземпляра GeoEvent Server, должна быть включена в GeoEvent Service, настроенный и запущенных на этом же GeoEvent Server.
Потоковые сервисы в ArcGIS REST Services Directory
Потоковые сервисы перечислены в ArcGIS REST Services Directory наряду с другими сервисами ArcGIS Server. Просмотрите свойства потокового сервиса, а также используйте элементы управления для потоковой передачи данных о событиях и подпишитесь на получение данных о событиях от потокового сервиса.
- Щелкните Вещание, чтобы открыть веб-страницу, с которой вы можете создать представление Esri Feature JSON одного или нескольких объектов и отправить их клиентам, подключенным к потоковому сервису.
- Щелкните Подписаться, чтобы открыть веб-страницу, на которой можно подключиться к потоковому сервису для просмотра передаваемых объектов. Если у вас имеется поток данных большого объема, форма на этой странице быстро станет перегруженной; используйте эту страницу в течение короткого времени, чтобы только убедиться, что подключенные клиенты получают данные.
Более подробно о потоковых сервисах в ArcGIS REST API см. Потоковые сервисы.
Использование потокового сервиса
Щелкните на странице свойств потокового сервиса в ArcGIS REST Services Directory ArcGIS JavaScript, чтобы "на лету" создать HTML-страницу, на которой визуализируются данные, передаваемые потоковым сервисом.
Щелкните ArcGIS JavaScript правой кнопкой мыши и выберите Посмотреть исходный код, вы увидите код JavaScript. Разработчики могут использовать и редактировать этот код для создания веб-приложений, использующих потоковые сервисы.
Потоковые сервисы также можно использовать, внедряя их в веб-карту и в ArcGIS Pro.
Более подробно об использовании потоковых сервисов в ArcGIS Pro см. в разделе Потоковые слои.
Фильтрация потокового сервиса
Потоковый сервис позволяет фильтровать данные на стороне клиента. Каждый клиент может запросить фильтр, применяемый к данным, перед их отправкой из потокового сервиса. Фильтр не влияет на поток данных к другим клиентам. Фильтр можно задать в момент подключения или после его установки.
Эти и другие параметры можно применить во время установки соединения, открыв подключение WebSocket.
Задание пространственной привязки для потока данных
Потоковый сервис имеет пространственную привязку по умолчанию, которую можно найти на странице описания сервиса в ArcGIS Server Manager. Если клиент хочет получать данные в другой пространственной привязке, ее нужно задать в момент подключения. После задания пространственной привязки ее нельзя изменить пока подключение работает. Для изменения пространственной привязки необходимо создать новое подключение WebSocket. Чтобы перезаписать пространственную привязку по умолчанию, необходимо использовать ключевое слово outSR, знать общепринятый ID (WKID) требующейся привязки и добавить outSR=<WKID> к URL-адресу. Например, чтобы задать по умолчанию систему координат WGS 1984 Web Mercator (Auxiliary Sphere), WKID которой равен 3857, добавьте outSR=3857 к URL-адресу, такому как ws://HOSTNAME:6180/arcgis/services/Vehicles/StreamService/0/subscribe?outSR=3857
Настройка фильтра
Фильтр потокового сервиса может содержать пространственный компонент, SQL-подобный компонент и компонент outFields. Каждая из них может быть задана или удалена независимо, т.е. любая, все или ни одна из них могут действовать в любой момент времени. Чтобы задать одну часть фильтра, задайте ее, не трогая другие. Другие части останутся неизменными.
Фильтр по геометрии
Геометрическая часть фильтра соответствует структуре геометрических объектов JSON, возвращаемых ArcGIS REST API. Для сохранения производительности потокового сервиса в качестве типа геометрии применяются только конверты.
Фильтр также может включать пространственное отношение, заданное ключевым словом 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, которое будет пропускать все объекты, имеющие значение true в поле active, например: "active".
Фильтр выходных полей
Поля внутри потока данных могут быть отфильтрованы по отдельности, с помощью фильтра выходных полей, задаваемого ключевым словом outFields. Желаемые поля можно задать с помощью списка имен полей, разделенных запятыми.