Skip To Content

ストリーム サービス

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

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

ストリーム サービスとは

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

ストリーム サービスを利用するには、エンタープライズ GIS に GeoEvent Server がライセンス認証されて、インストールされていなければなりません。初期リリースでは、ストリーム サービスのコンテンツを ArcGIS Online と Portal for ArcGIS の Web マップに組み込むことができる他、ArcGIS API for JavaScript を使用して開発されたクライアントを通じて公開できます。今後のリリースでは、さらに多くの種類のクライアント サブスクリプションをサポートする予定です。

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

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

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

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

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

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

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

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

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

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

また、GeoEvent Server がインストールされ、2 台目のサーバー コンピューターでライセンスされている場合は、GeoEvent Manager でその 2 台目のコンピューターにデータ ストア接続を登録し、この 2 台目のコンピューターにストリーム サービスを公開するように指定できます。これにより、あるコンピューターで実行中の出力を構成し、別のコンピューター上で動作するストリーム サービスを介してそのフィーチャ レコードをブロードキャストすることができます。

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

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

ストリーム サービスは、他の ArcGIS Server サービスと同様に、ArcGIS REST Services Directory にリスト表示されます クリックすると、ストリーム サービスのプロパティを確認できます。ストリーム サービス ページの下部の ArcGIS REST Services Directory に、イベント データをブロードキャストしたり、登録してストリーム サービスからイベント データを受信したりできるリンクがあります。

[Broadcast] をクリックすると、Web ページが開きます。この Web ページから、1 つ以上のフィーチャの Esri Feature JSON 表現を入力し、ストリーム サービスに接続するクライアントにフィーチャを送信することができます。

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

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

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

ストリーム サービスの REST ページ上部にある図には、その上部に、ArcGIS JavaScript マップのストリーム サービス コンテンツと、マップ サービスで一般的に使用できるオプションが表示されるリンクがあります。

[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 フィルターを使用して、データ ストリーム内のフィールドを個別にフィルタリングできます。フィールド名のリストをカンマで区切って、目的のフィールドを定義します。