При возрастающем числе источников, предоставляющих потоковые данные в реальном времени, возможность приложений принимать и немедленно отображать эти данные становится все более важной. Традиционный подход, при котором имеется задержка, связанная с хранением данных событий в классе объектов многопользовательской базы геоданных и периодическим обращением клиентов к сервису объектов для получения данных для отображения, становится проблематичным – особенно при работе с потоками данных большого объема.
Такой подход требует изменений. Необходимо обеспечить непрерывность потока данных в виде архивирования, параллельно с передачей данных событий клиентам. Ответом Esri является новый тип сервиса ArcGIS Server – потоковый сервис.
Что такое потоковый сервис?
Потоковый сервис является новым типом сервиса 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. Оно представляет пространственное отношение, которое должно применяться для входной геометрии при выполнении запроса. Единственное поддерживаемое пространственное отношение – это «пересекает» (intersects)(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, применяя подстановочные символы. Знак процента (%) означает любое количество символов, подчеркивание (_) может быть одним любым знаком. В следующем примере выбираются люди, в именах которых второй и третий символы соответствуют символам имен Samantha и James: "name LIKE '_am%'".
- Выражения IN – выражение IN позволяет задавать списки буквенных значений. Если поле соответствует любому значению в списке, объект передается потоком.
- Ниже приводится пример списка строк: "name IN ('Bob','Jane','Henry')".
- Ниже приводится пример выражения IN, использующего список числовых значений: "alertCode IN (404,500,505)".
- Также можно использовать логическое поле вместо логического выражения. Например, если объекты содержат логическое поле с именем active, можно написать выражение where, которое будет пропускать все объекты, имеющие значение true в поле active, например: "active".
Фильтр выходных полей
Поля внутри потока данных могут быть отфильтрованы по-отдельности с помощью фильтра выходных полей, задаваемого ключевым словом outFields. Желаемые поля можно задать с помощью списка имен полей, разделенных запятыми.