Mit der steigenden Anzahl an Datenquellen, die Echtzeit-Datenströme bereitstellen, wird es immer wichtiger, dass Ihre Anwendungen diese Ereignisdaten sofort verwenden und anzeigen können. Traditionell ist die Latenz problematisch, die durch das vorherige Speichern dieser Ereignisdaten in einer Feature-Class in einer Enterprise-Geodatabase entsteht, um Clients das regelmäßige Abfragen eines Feature-Service zu ermöglichen und die Daten zur Anzeige abzurufen - insbesondere beim Arbeiten mit sehr umfangreichen Datenströmen.
Es ist Zeit für einen Paradigmenwechsel. Datenpersistenz muss als Archivierungsaufgabe behandelt werden, die parallel zur Echtzeitübertragung der Ereignisdaten an Clients stattfindet. Esris Antwort ist ein neuer ArcGIS Server-Service-Typ: ein Stream-Service.
Was ist ein Stream-Service?
Ein Stream-Service ist ein ArcGIS Server-Service-Typ, bei dem besonderer Wert auf geringe Latenz und Echtzeit-Datenverbreitung für Client-Server-Datenflüsse gelegt wird. Clients, die eine Verbindung mit einem Stream-Service herstellen, empfangen sofort beim Abonnieren des Service Daten. Clients können räumliche und Attribut-Beschränkungen festlegen und neu konfigurieren, ohne zuvor den Service abzubestellen und dann erneut eine Verbindung zu ihm herzustellen.
GeoEvent Server muss lizenziert und in Ihrem Enterprise-GIS installiert werden, damit Stream-Services genutzt werden können. In der ersten Version lassen sich Stream-Service-Inhalte in ArcGIS Online- und Portal for ArcGIS-Webkarten einbinden und über Clients anzeigen, die mit ArcGIS API for JavaScript entwickelt wurden. Zukünftige Versionen werden eine breitere Palette an Client-Abonnements unterstützen.
Stream-Services nutzen die WebSocket-Technologie, die bidirektionale Vollduplex-Kommunikation unterstützt. Damit können Clients angeben, welche Daten sie empfangen möchten, ohne die Verbindung zum Service abbestellen und neu herstellen zu müssen. Clients können Stream-Service-Daten filtern, indem sie räumliche oder Attributbeschränkungen angeben.
Durch die Verbindung zu einem Stream-Service für den Empfang von Echtzeitdaten können Sie den grundlegenden Bedarf an sofortiger Visualisierung der Ereignisse von dem Bedarf trennen, die Daten in einer Datenbank zu speichern. Durch Konfigurieren der GeoEvent Server-Ausgabe zur Übertragung von Ereignisdaten über einen Stream-Service haben Sie die Möglichkeit, aktuelle Ereignisdaten in einem Enterprise-Data Store vom Typ "Relational" oder in einem Big Data Store vom Typ "spatiotemporal" zu speichern. Für die Datenvisualisierung ist dies allerdings nicht zwingend erforderlich.
Die folgende Abbildung vergleicht, wie Feature-Daten traditionell empfangen, verarbeitet und verwendet wurden und wie Echtzeitdaten über Stream-Services empfangen und übertragen werden.
Beachten Sie in der Abbildung, wie in den Zeiten vor Stream-Services Echtzeitdaten zunächst in einer Feature-Class vorhanden sein mussten, wofür eine Enterprise-Geodatabase erforderlich war. Client-Anwendungen, die Daten anzeigen wollten, mussten regelmäßig den Feature-Service abfragen, um neue und aktualisierte Features zu erhalten.
Der untere Teil der Abbildung veranschaulicht, wie Stream-Services den Empfang und die sofortige Weiterübertragung von Echtzeitdaten an Clients über einen WebSocket erlauben.
Weitere Informationen zum Arbeiten mit Stream-Services in GeoEvent Server können Sie dem Stream-Services-Lernprogramm in den GeoEvent Server-Lernprogrammen entnehmen.
Veröffentlichen eines Stream-Service
Stream-Services werden in GeoEvent Manager als Teil des Workflows zum Konfigurieren des Ausgabe-Konnektors "Send Features to a Stream Service" erstellt und veröffentlicht.
Es wird empfohlen, beim Konfigurieren des Ausgabe-Konnektors "Send Features to a Stream Service" ArcGIS Server oder ArcGIS Portal für die als Standard in GeoEvent Server registrierte ArcGIS-Verbindung zu verwenden.
Wenn GeoEvent Server auf einem zweiten Servercomputer installiert und lizenziert ist, können Sie alternativ in GeoEvent Manager eine Data-Store-Verbindung zu diesem zweiten Computer registrieren und festlegen, dass der Stream-Service auf dem zweiten Computer veröffentlicht wird. So können Sie konfigurieren, dass die Feature-Datensätze der Ausgabe eines Computers über einen auf einem anderen Computer ausgeführten Stream-Service gesendet werden.
Der als Teil einer GeoEvent Server-Instanz konfigurierte und ausgeführte Ausgabe-Konnektor "Send Features to a Stream Service" muss in einen GeoEvent-Service eingebunden sein, der auf demselben GeoEvent Server konfiguriert ist und ausgeführt wird.
Stream-Services im ArcGIS REST-Services-Verzeichnis
Stream-Services werden wie jeder andere ArcGIS Server-Service im ArcGIS REST Services-Verzeichnis aufgelistet. Benutzer können per Klick die Eigenschaften eines Stream-Service anzeigen. Am unteren Rand der Stream-Service-Seite im ArcGIS REST Services-Verzeichnis befinden sich Links zum Übertragen von Ereignisdaten und Abonnieren der Ereignisdaten von einem Stream-Service.
Klicken Sie auf Broadcast, um eine Webseite zu öffnen, von der Sie eine Esri Feature JSON-Repräsentation von einem oder mehreren Features öffnen und die Features an Clients senden können, die mit einem Stream-Service verbunden sind.
Klicken Sie auf Abonnieren, um eine Webseite zu öffnen, von der Sie eine Verbindung zu einem Stream-Service herstellen und alle gestreamten Features sehen können. Bei einem sehr umfangreichen Datenstrom kann diese Seite schnell überlastet werden. Verwenden Sie diese Seite nur für kurze Zeitspannen, um sich zu vergewissern, dass Clients, die den Stream-Service abonniert haben, Daten empfangen sollten.
Weitere Informationen zu Stream-Services in der ArcGIS REST API finden Sie unter Stream-Services.
Verwenden eines Stream-Service
Beachten Sie in der obigen Abbildung der REST-Seite des Stream-Service den Link am oberen Rand zur Anzeige der Inhalte eines Stream-Service in einer ArcGIS JavaScript-Karte – eine Option, die üblicherweise in Kartenservices verfügbar ist.
Klicken Sie auf ArcGIS JavaScript, um "on-the-fly" eine HTML-Seite zu erstellen, in der Sie von einem Stream-Service übertragene Daten ansehen können.
Wenn Sie mit der rechten Maustaste auf ArcGIS JavaScript klicken und dann auf Quelltext anzeigen klicken, können Sie den JavaScript-Code prüfen. Entwickler können diesen Code verwenden und anpassen, um Webanwendungen zur Nutzung von Stream-Services zu erstellen.
Stream-Services lassen sich auch in eine Web-Karte und in ArcGIS Pro einbinden.
Weitere Informationen zum Verwenden von Stream-Services in ArcGIS Pro finden Sie unter Stream-Layer.
Filtern eines Stream-Service
Der Stream-Service erlaubt die Filterung auf Client-Basis. Jeder Client kann einen Filter anfordern, der auf die Daten angewendet wird, bevor diese vom Stream-Service gesendet werden. Dieser Filter beeinflusst nicht die Daten, die an andere Clients übertragen werden. Der Filter kann während oder nach dem Aufbau der Verbindung angegeben werden.
Diese und andere Einstellungen können durch Öffnen einer WebSocket-Verbindung angewendet werden, während die Verbindung aufgebaut wird.
Festlegen eines Raumbezugs für den Datenstrom
Ein Stream-Service besitzt einen Standard-Raumbezug, der auf der Service-Beschreibungsseite in ArcGIS Server Manager angegeben ist. Wenn der Client die Daten in einem vom Standard abweichenden Raumbezug empfangen möchte, muss dieser zur Verbindungszeit festgelegt werden. Sobald der Raumbezug eingestellt ist, kann er für die Dauer der Verbindung nicht mehr geändert werden. Eine neue WebSocket-Verbindung müsste erstellt werden, um den Raumbezug zu ändern. Wenn ein Standard-Raumbezug überschrieben werden soll, müssen Sie das Schlüsselwort "outSR" und die WKID (Well-Known ID) des gewünschten Raumbezugs kennen und der URL outSR=<WKID> hinzufügen. Beispiel: Um den Standard auf WGS 1984 Web Mercator (Auxiliary Sphere), dessen WKID 3857 lautet, fügen Sie der URL outSR=3857 hinzu: ws://HOSTNAME:6180/arcgis/services/Vehicles/StreamService/0/subscribe?outSR=3857
Konfigurieren des Filters
Ein Stream-Service-Filter kann eine Raumkomponente, eine SQL-ähnliche Abfragekomponente und eine outFields-Komponente umfassen. Jede kann unabhängig festgelegt und gelöscht werden, es können also zu einem beliebigen Zeitpunkt alle, eine oder keine davon wirksam sein. Wenn Sie nur einen Teil des Filters festlegen möchten, geben Sie einfach diesen Teil an. Die übrigen Teile des Filters bleiben unverändert.
Der Geometriefilter
Der Geometrieteil des Filters ist identisch mit der Struktur der JSON-Geometrieobjekte, die von ArcGIS REST API zurückgegeben werden. Um die Performance des Stream-Service beizubehalten, werden nur Envelopes als Geometrietyp akzeptiert.
Der Filter kann auch einen Raumbezug umfassen, den das Schlüsselwort "spatialRel" identifiziert. Dieses repräsentiert die räumliche Beziehung, die während der Abfrage auf die Eingabegeometrie angewendet wird. Die einzige unterstützte räumliche Beziehung ist der Standard "intersects" (esriSpatialRelIntersects).
Der Geometriefilter wird im selben Raumbezug wie die Verbindung angenommen und kann nur während der Verbindungszeit überschrieben werden. Wenn ein anderer Raumbezug als Teil der Geometrie angegeben wird, wird der Envelope in den Raumbezug der Verbindung projiziert, um Features aus dem Datenstrom zu filtern.
Der where-Filter
Der where-Filter ist ein SQL-ähnlicher Ausdruck, der Features aus einem Datenstrom filtert, indem er prüft, ob deren Attribute mit der angegebenen WHERE-Klausel übereinstimmen. Der Ausdruck muss ein JSON-Zeichenfolgen Wert in Anführungszeichen sein. Die unterstützten Operationen sind AND, OR, NOT, =, !=, <, <=, >, >=, IS NULL, IS NOT NULL, IN und LIKE. Vergleiche können zwischen einem Feld und einem Literalwert wie ('feld1 > 1') oder zwischen zwei Feldern ähnlichen Typs wie ('feld1 > feld2') erfolgen. Klammern können die Rangfolge explizit erzwingen.
- Zahlenvergleich – Beispiel für den Vergleich eines Felds (Altitude) mit einem Zahlenwert: "Altitude < 1000".
- Feldvergleich – Beispiel für den Vergleich zweier Felder: "speed > maxSpeed".
- Zeichenfolgenvergleich – Zeichenfolgen können ebenfalls verglichen werden. Vergleiche unterscheiden immer Groß- und Kleinschreibung und Zeichenliterale müssen zwischen einfache Anführungszeichen gesetzt werden. Z. B.: "Departure_Airport='KZSE'".
- LIKE-Anweisungen – Zeichenfolgen lassen sich mit der LIKE-Anweisung vergleichen, um Platzhalterzeichen zu nutzen. Das Prozentzeichen (%) steht für eine beliebige Anzahl an Zeichen und der Unterstrich (_) steht für ein beliebiges Einzelzeichen. Das folgende Beispiel akzeptiert Personen, in deren Namen das zweite und dritte Zeichen identisch mit einem Namen wie Samantha und James ist: "name LIKE '_am%'".
- IN-Anweisungen – Die IN-Anweisung ermöglicht die Angabe von Listen mit Zeichenliteralen. Wenn das Feld mit einem beliebigen Wert in der Liste übereinstimmt, wird das Feature durch den Datenstrom übergeben.
- Beispiel für eine Liste mit Zeichenfolgen: "name IN ('Bob','Jane','Henry')".
- Beispiel der IN-Anweisung mit einer Liste mit Zahlenwerten: "alertCode IN (404,500,505)".
- Es ist auch möglich, ein Boolesches Feld anstelle eines Booleschen Ausdrucks zu verwenden. Wenn Ihre Features beispielsweise ein Feld mit dem Namen "active" und Booleschem Typ enthalten, können Sie eine WHERE-Klausel schreiben, die alle Features übergibt, in denen das Feld "active" auf "true" gesetzt ist, z. B.: "active".
Der Ausgabefeld-Filter
Die Felder im Datenstrom können mithilfe des Ausgabefeld-Filters individuell mit dem Schlüsselwort "outFields" identifiziert und ausgefiltert werden. Die gewünschten Felder werden anhand von Feldnamen in einer kommagetrennten Liste definiert.