Skip To Content

ストリーム サービス

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

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

ストリーム サービスとは

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

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

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

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

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

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

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

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

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

ストリーム サービスを作成し、[フィーチャをストリーム サービスに送信] 出力コネクタを使用して、GeoEvent Manager で公開します。

[フィーチャをストリーム サービスに送信] 出力コネクタを構成する際に、デフォルトの登録済みの ArcGIS Server 接続、サービス フォルダー、出力がイベント データを送信する先のストリーム サービスを指定する必要があります。既存のストリーム サービスを選択するか、新しいストリーム サービスを公開できます。構成が完了すると、他の出力と同様に、出力をジオイベント サービスに取り込む必要があります。

注意:

ストリーム サービスは、デフォルトの登録済みの ArcGIS Server 接続を通じてのみ公開できます。

GeoEvent エクステンションでのストリーム サービスの作成および公開の詳細については、「GeoEvent Extension チュートリアル」にあるストリーム サービスのチュートリアルをご参照ください。

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

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

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

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

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

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

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

[ArcGIS JavaScript] をクリックすると、すぐに HTML ページが生成されます。この HTML ページから、ストリーム サービスでブロードキャストされているデータを視覚化できます。

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

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

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

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

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