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 for Server-Service-Typ: ein Stream-Service.
Was ist ein Stream-Service?
Ein Stream-Service ist ein neuer ArcGIS for Server-Service-Typ, der besonderen Wert auf geringe Latenz und Echtzeit-Datenverbreitung für Client-Server-Datenflüsse legt. Clients, die eine Verbindung mit einem Stream-Service herstellen, empfangen sofort beim Abonnieren des Service Daten. Clients können räumliche und Attribut-Einschränkungen festlegen und neu konfigurieren, ohne zuvor den Service abzubestellen und dann erneut eine Verbindung zu ihm herzustellen.
ArcGIS GeoEvent Extension for 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 Extension-Ausgabe zur Übertragung von Ereignisdaten über einen Stream-Service haben Sie die Möglichkeit, aktuelle Ereignisdaten in einem relationalen Enterprise-Data Store oder Big Data Store "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 Zeiten vor den Stream-Services Echtzeit-GIS-Daten 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 erlauben, dass Echtzeit-GIS-Daten empfangen und über einen WebSocket sofort an Clients übertragen werden.
Veröffentlichen eines Stream-Service
Stream-Services werden im GeoEvent Manager über den Ausgabe-Konnektor "Features an einen Stream-Service senden" erstellt und veröffentlicht.
Beim Konfigurieren eines Ausgabe-Konnektors "Send Features to a Stream Service" müssen Sie die registrierte Standard-ArcGIS-Server-Verbindung, den Services-Ordner und den Stream-Service angeben, an die die Ausgabe ihre Ereignisdaten senden wird. Sie können einen bestehenden Stream-Service wählen oder einen neuen Stream-Service veröffentlichen. Sobald sie konfiguriert ist, müssen Sie die Ausgabe auf ähnliche Weise wie jede andere Ausgabe in einen GeoEvent-Service einbinden.
Hinweis:
Ein Stream-Service kann nur über die registrierte Standard-ArcGIS-Server-Verbindung veröffentlicht werden.
Weitere Informationen zum Erstellen und Veröffentlichen von Stream-Services in der GeoEvent Extension können Sie den GeoEvent Extension-Lernprogrammen entnehmen.
Stream-Services im ArcGIS REST Services Directory
Stream-Services werden wie jeder andere ArcGIS for Server-Service im ArcGIS REST Services Directory aufgelistet. Benutzer können per Klick die Eigenschaften eines Stream-Service anzeigen. Am unteren Rand der Stream-Service-Seite im ArcGIS REST Services Directory 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 im ArcGIS REST Services Directory 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 einbinden.
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.