Skip To Content

ストリーム サービス

リアルタイムのデータ ストリームを提供するデータ ソースの数が増加するにつれて、アプリケーションがこのイベント データを取り込み、即座に表示できることがより重要になります。従来は、イベント データをエンタープライズ ジオデータベースのフィーチャ レイヤーに保存して、クライアントがフィーチャ サービスを定期的にポーリングし、データを取得して表示していましたが、これによって待ち時間が発生します。特に、大量のデータ ストリームを処理する場合に問題が生じます。

そして、このような状況を変える必要性が生じていました。イベント データがリアルタイムでクライアントに反映されるように、アーカイブのタスクを並行して実行することで、データ持続性の問題に対処する必要があります。この問題に対して Esri は、ArcGIS Server サービスの一種であるストリーム サービスを開発しました。

ストリーム サービスとは

ストリーム サービスは、ArcGIS Server サービスのタイプの 1 つで、クライアント/サーバー間のデータ フローにおいて、低遅延でリアルタイムのデータ配布を実現します。ストリーム サービスに接続しているクライアントは、サービスに接続すると、直ちにデータの受信を開始します。クライアントは、空間的な制限事項や属性の制限事項を指定したりするときでも、接続をやめてサービスに再接続する必要がありません。

ストリーム サービスを利用するには、エンタープライズ GIS に GeoEvent Server がライセンス認証されて、インストールされていなければなりません。ストリーム サービスのコンテンツを ArcGIS Online および Portal for ArcGIS の Web マップ、ArcGIS Pro に組み込むか、ArcGIS API for JavaScript を使用して開発されたクライアントを通じて公開できます。

ストリーム サービスは、WebSocket テクノロジを利用します。このテクノロジは、双方向同時通信をサポートしています。これにより、クライアントは、サービスへの登録を解除して接続を再確立しなくても、受信したいデータを指定することができます。クライアントは、空間制限か属性制限のいずれかを指定して、ストリーム サービスのデータをフィルタリングできます。

リアルタイムのデータ フィードを受信するためにストリーム サービスに接続すると、イベントを即座に表示する基本的なニーズとデータベースのデータを維持するニーズとを区別することができます。ストリーム サービスを通じてイベント データをブロードキャストするよう GeoEvent Serverの出力を構成すると、エンタープライズ リレーショナル データ ストアまたはビッグ データ ストアにイベント データを保存できます。ただし、これは、データの表示に必須というわけではありません。

以下の図では、フィーチャ データがこれまで、受信、処理、および利用されていた仕組みとリアルタイム データがストリーム サービスを使用して受信およびブロードキャストされる仕組みを比較しています。

従来のフィーチャ データのワークフローとストリーム サービスを使用したリアルタイム データの受信とブロードキャスト

図の上部では、ストリーム サービス以前では、リアルタイムのデータをまずフィーチャクラスに格納する必要があり、これには、エンタープライズ ジオデータベースが必要だったことが示されています。データを表示するクライアント アプリケーションが、定期的にフィーチャ サービスをポーリングして、新規の更新済みフィーチャを取得する必要がありました。

図の下の部分では、ストリーム サービスによって、リアルタイムのデータを受信し、WebSocket を通じてクライアントに即座に送信できることが示されています。

GeoEvent Server でのストリーム サービスの操作の詳細については、「GeoEvent Server チュートリアル」にあるストリーム サービスのチュートリアルをご参照ください。

ストリーム サービスの公開

GeoEvent Manager でワークフローの一部としてストリーム サービスを作成および公開し、[フィーチャをストリーム サービスに送信] 出力コネクタを構成します。

[フィーチャをストリーム サービスに送信] 出力コネクタを構成する場合、ArcGIS Server[デフォルト] として登録されている GeoEvent Server または Portal for ArcGIS 接続を使用することをお勧めします。

GeoEvent Server インスタンスの一部として構成および実行されている [フィーチャをストリーム サービスに送信] 出力コネクタは、同じ GeoEvent Server で構成および実行されているジオイベント サービスに組み込まれている必要があります。

ArcGIS REST Services Directory のストリーム サービス

ストリーム サービスは、他の ArcGIS Server サービスと同様に、ArcGIS REST Services Directory にリスト表示されます ストリーム サービスのプロパティを確認することに加え、コントロールを使用してイベント データをブロードキャストし、イベント データをストリーム サービスから受信するために登録します。

  • [Broadcast] をクリックすると、Web ページが開きます。この Web ページから、1 つ以上のフィーチャの Esri Feature JSON 表現を入力し、ストリーム サービスに接続するクライアントにフィーチャを送信することができます。
  • [Subscribe] をクリックすると、Web ページが開きます。この Web ページから、ストリーム サービスに接続し、フィーチャがストリームされていることを確認できます。データのストリームが大量である場合、このページのフォームはすぐに過負荷状態になる可能性があります。このページを使用してストリーム サービスに登録しているクライアントがデータを受信していることを確認する場合、使用時間は短時間にとどめてください。

ArcGIS REST API のストリーム サービスの詳細については、「ストリーム サービス」をご参照ください。

ストリーム サービスの利用

ArcGIS REST Services Directory のストリーム サービスのプロパティ ページで、[ArcGIS JavaScript] をクリックして HTML ページをリアルタイムに生成します。この HTML ページで、ストリーム サービスからブロードキャストされているデータを視覚化することができます。

[ArcGIS JavaScript] を右クリックして [ソースの表示] をクリックすると、JavaScript コードを確認できます。開発者は、このコードを使用したりカスタマイズしたりして、ストリーム サービスを利用する Web アプリケーションを作成できます。

ストリーム サービスは、Web マップおよび ArcGIS Pro に取り込んで利用することもできます。

ArcGIS Pro でストリーム サービスを利用する方法の詳細については、「ストリーム レイヤー」をご参照ください。

ストリーム サービスのフィルタリング

ストリーム サービスでは、クライアントごとのフィルタリングが可能です。各クライアントは、データがストリーム サービスから送信される前に、フィルターがデータに適用されるようリクエストできます。このフィルターは、他のクライアントへのデータ フローには影響しません。フィルターの指定は、接続が確立されるとき、または接続が確立された後にできます。

これらの設定や他の設定は、WebSocket 接続を開いて接続を確立するときに適用できます。

データ ストリームの空間参照の設定

ストリーム サービスにはデフォルトの空間参照があります。これは、ArcGIS Server Manager のサービスの説明ページにあります。クライアントがデフォルト以外の空間参照のデータを受信したい場合は、接続時に設定する必要があります。空間参照はいったん設定すると、接続が続く間は変更できません。空間参照を変更するには、新しい WebSocket 接続を作成する必要があります。デフォルトの空間参照を変更するには、キーワード outSR を使用し、目的の空間参照の well-known ID (WKID) を使用して、「outSR=<WKID>」を URL に追加します。たとえば、デフォルトの空間参照を WKID が 3857 の WGS 1984 Web メルカトル (球体補正) に設定するには、「outSR=3857」を URL に追加します。

例: ws://HOSTNAME:6180/arcgis/services/Vehicles/StreamService/0/subscribe?outSR=3857

フィルターの構成

ストリーム サービスのフィルターには、空間コンポーネント、SQL に類似したクエリ コンポーネント、outFields コンポーネントを含めることができます。フィルターはそれぞれ個別に設定と設定解除ができるため、任意の時点で一部を有効にしたり、すべてを有効にしたり、いずれも無効にしたりすることができます。フィルターの一部を設定するには、その部分を指定し、残りはそのままにします。フィルターの残りの部分は変更されません。

ジオメトリ フィルター

フィルターのジオメトリ部分は、ArcGIS REST API が返す JSON ジオメトリ オブジェクトの構造と同じです。ストリーム サービスのパフォーマンスを維持するために、エンベロープのみをジオメトリ タイプとして受け入れます。

フィルターには、キーワード spatialRel で特定された空間リレーションシップを含めることもできます。これは、クエリの実行中に入力ジオメトリに適用される空間リレーションシップを表します。空間リレーションシップとしてはインターセクト (esriSpatialRelIntersects) が唯一サポートされており、これがデフォルトです。

ジオメトリ フィルターは、接続と同じ空間参照にあることが前提であり、接続時にのみ変更できます。ジオメトリの一部として別の空間参照を指定すると、エンベロープが接続の空間参照に投影変換され、データ ストリームからフィーチャをフィルタリングする際に使用されます。

where フィルター

where フィルターは SQL に類似した式で、指定された Where 句に属性が一致するかどうかを確認することで、データ ストリームからフィーチャをフィルタリングします。式は、JSON 文字列を引用符で囲んだものです。サポートされている演算子は、AND、OR、NOT、=、!=、<、<=、>、>=、IS NULL、IS NOT NULL、IN、および LIKE です。フィールドとリテラル値間の比較 ('field1 > 1' など)、または 2 つのあいまい検索フィールド間の比較 ('field1 > field2') が可能です。演算順序を明確に優先させるには、括弧を使用します。

  • 数値比較 - フィールド (Altitude) と数値の比較例: "Altitude < 1000"
  • フィールド比較 - 2 つのフィールドの比較例: "speed > maxSpeed"
  • 文字列比較 - 文字列も比較できます。比較では常に大文字小文字を区別し、リテラル値を一重引用符で囲みます。例: "Departure_Airport='KZSE'"
  • LIKE ステートメント - LIKE ステートメントを使用しワイルドカードを使用して、文字列を比較できます。パーセント記号 (%) は任意の文字数、アンダースコア (_) は任意の 1 文字を表します。次の例では、名前の 2 番目および 3 番目の文字が Samantha や James といった名前に該当する人を検索する場合を示しています: "name LIKE '_am%'"
  • IN ステートメント - IN ステートメントでは、リテラル値のリストが指定できます。フィールドがリスト内の値に一致すると、フィーチャがストリームを通過します。
    • 文字列のリストの例を示します: "name IN ('Bob','Jane','Henry')"
    • 数値のリストを使用した IN ステートメントの例を示します: "alertCode IN (404,500,505)"
    • ブール式の代わりにブール型フィールドを使用することもできます。たとえば、フィーチャにブール型の active というフィールドが含まれる場合、active フィールドを True に設定してフィーチャを通過させる Where 句を書き込むことができます ("active" など)。

out fields フィルター

キーワード outFields で特定された out fields フィルターを使用して、データ ストリーム内のフィールドを個別にフィルタリングできます。フィールド名のリストをカンマで区切って、目的のフィールドを定義します。