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. Problematisch dabei ist die Latenz, die entsteht, wenn die Ereignisdaten zuerst in einem Feature-Layer in einer Enterprise-Geodatabase gespeichert werden, 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. Es empfiehlt sich die Verwendung eines Stream-Service. Dabei handelt es sich um einen bestimmten Typ von ArcGIS Server-Service.
Einführung in Stream-Services
Bei einem Stream-Service wird besonderer Wert auf geringe Latenz und Echtzeit-Datenverbreitung für Client-Server-Datenflüsse gelegt. 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. Stream-Service-Inhalte lassen sich in ArcGIS Online- und Portal for ArcGIS-Webkarten sowie in ArcGIS Pro einbinden und über Clients anzeigen, die mit dem ArcGIS Maps SDK for JavaScript entwickelt wurden.
Stream-Services nutzen die WebSocket-Technologie, die bidirektionale Vollduplex-Kommunikation unterstützt. So können Clients angeben, welche Daten sie empfangen möchten, ohne den Service abbestellen und die Serviceverbindung neu herstellen zu müssen. Clients können Stream-Servicedaten 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 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 im oberen Teil der Abbildung, wie in Zeiten vor den Stream-Services Echtzeitdaten zunächst in einer Feature-Class vorhanden sein mussten, wofür eine Enterprise-Geodatabase erforderlich war. Zu Anzeige von Daten mussten Client-Anwendungen 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 Workflow 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" diejenige ArcGIS Server- oder Portal for ArcGIS-Verbindung zu verwenden, die als Standardverbindung in GeoEvent Server registriert ist.
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. Überprüfen Sie die Eigenschaften und Nutzungssteuerelemente des Stream-Service, um Ereignisdaten zu übertragen und den Empfang von Ereignisdaten von einem Stream-Service zu abonnieren.
- Klicken Sie auf Broadcast, um eine Webseite zu öffnen, auf der Sie eine Esri Feature-JSON-Repräsentation von einem oder mehreren Features angeben und die Features an Clients senden können, die mit einem Stream-Service verbunden sind.
- Klicken Sie auf Subscribe, um eine Webseite zu öffnen, von der Sie eine Verbindung zu einem Stream-Service herstellen und alle gestreamten Features anzeigen können. Bei umfangreichen Datenströmen 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, tatsächlich Daten empfangen.
Weitere Informationen zu Stream-Services in ArcGIS REST API finden Sie unter Stream Services.
Verwenden eines Stream-Service
Klicken Sie auf der Eigenschaftenseite des Stream-Service im ArcGIS REST-Services-Verzeichnis auf ArcGIS JavaScript, um "on-the-fly" eine HTML-Seite zu erstellen, in der Sie von einem Stream-Service übertragene Daten ansehen können.
Klicken Sie mit der rechten Maustaste auf ArcGIS JavaScript, und klicken Sie dann auf Quelltext anzeigen, um den JavaScript-Code zu 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 Webkarte und in ArcGIS Pro einbinden.
Weitere Informationen zum Verwenden von Stream-Services in ArcGIS Pro finden Sie unter Stream-Layer.
Filtern eines Stream-Service
Ein 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 Standardraumbezug, 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 zum Zeitpunkt der Verbindungsherstellung festgelegt werden. Sobald der Raumbezug eingestellt ist, kann er für die Dauer der Verbindung nicht mehr geändert werden. Eine neue WebSocket-Verbindung muss erstellt werden, um den Raumbezug zu ändern. Verwenden Sie zum Überschreiben des Standardraumbezugs das Schlüsselwort "outSR" und die Well-Known ID (WKID) des gewünschten Raumbezugs, und fügen Sie der URL outSR=<WKID> hinzu. Um beispielsweise den Standardraumbezug auf WGS 1984 Web Mercator (Auxiliary Sphere) festzulegen, dessen WKID 3857 lautet, müssen Sie der URL outSR=3857 hinzufügen. Beispiel: ws://HOSTNAME:6180/arcgis/services/Vehicles/StreamService/0/subscribe?outSR=3857
Konfigurieren des Filters
Ein Stream-Service-Filter kann eine räumliche Komponente, eine SQL-ähnliche Abfragekomponente und eine Ausgabefeld-Komponente (outFields) 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 lediglich diesen Teil an. Die übrigen Teile des Filters bleiben unverändert.
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 eine räumliche Beziehung umfassen, die durch das Schlüsselwort spatialRel identifiziert wird. 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 "intersects" (esriSpatialRelIntersects), die Standardeinstellung.
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.
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-Zeichenfolgenwert 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 Feldes (Altitude) mit einem Zahlenwert: "Altitude < 1000".
- Feldvergleich: Beispiel für den Vergleich zweier Felder: "speed > maxSpeed".
- Zeichenfolgenvergleich: Zeichenfolgen können ebenfalls verglichen werden. Bei Vergleichen wird die Groß-/Kleinschreibung beachtet, und Zeichenliterale müssen in einfache Anführungszeichen gesetzt werden. Beispiel: "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. Im folgenden Beispiel werden Namen akzeptiert, in denen das zweite und dritte Zeichen der Buchstabenfolge "am" entsprechen, beispielsweise die Namen Samantha und James: "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)"
- Sie können auch ein boolesches Feld anstelle eines booleschen Ausdrucks verwenden. Beispiel: Wenn die Features ein Feld mit dem Namen "active" und dem Typ "Boolesch" enthalten, können Sie eine WHERE-Klausel schreiben, die alle Features übergibt, in denen das Feld "active" auf "true" gesetzt ist: "active".
Ausgabefeld-Filter
Die Felder im Datenstrom können mithilfe des Ausgabefeld-Filters, der mit dem Schlüsselwort outFields angegeben wird, einzeln gefiltert werden. Die gewünschten Felder werden anhand von Feldnamen in einer kommagetrennten Liste definiert.