フィルタ
フィルタは GeoEvent サービスの設定可能なコンポーネントであり、入力コネクタから出力コネクタへの GeoEvent のフローで指定の条件を満たしていない GeoEvent を除外します。ArcGIS GeoEvent Processor for Server のフィルタとして、属性フィルタ、空間フィルタ、および GeoEvent 定義フィルタがあります。
属性フィルタ
GeoEvent サービスで属性フィルタを使用すると、属性条件に基づいてイベントをフィルタリングできます。サービスにフィルタを追加した後、サービス デザイナは 1 つまたは複数の属性式でフィルタ エレメントを構成します。これらの式を論理的に組み合わせると、イベントがフィルタを通過するために満たす必要のある条件が作成されます。
次に属性式の例をいくつか示します。
altitude >= 2400 |
指定の閾値を下回るイベントをすべて除外します。 |
Title MATCHES .*California.* |
正規表現を使用してフィールド内のサブ文字列を検索します。 |
CodedStringValue IN Red,Green,Blue |
一連の文字列を使用して指定のコード値にフィルタを適用します。 |
NOT(GEOMETRY ISNULL) |
指定のフィールドが NULL 値のイベントを除外します。 |
使用可能な属性演算子としては、次のものがあります。
- 等しい(=)
- 等しくない(!=)
- より大きい(>)
- 以上(>=)
- より小さい(<)
- 以下(<=)
- IN
- ISNULL
- EXISTS
- MATCHES
NULL 文字列のチェックには対応していません。GeoEvent Processor では、文字列が NULL オブジェクトではなく空の文字列(長さゼロの文字列)として定義されます。
空間フィルタ
GeoEvent Processor で空間フィルタを使用すると、空間条件に基づいてイベントをフィルタリングできます。空間フィルタは GeoFence に依存しているため、空間フィルタを設定する前にフィーチャ サービスから GeoEvent Processor に GeoFence をインポートしておく必要があります。空間フィルタには、[inside] や [outside] などの条件を指定できます。空間条件を満たしていない GeoEvent はフィルタで破棄されます。空間フィルタを設定する場合には、[inside]、[outside]、[enter]、および [exit] という必須となる 4 つの空間演算子を使用できます。
- inside - ロケーション全体が指定の GeoFence の内側にあるイベントだけが空間フィルタを通過できます。
- outside - ロケーション全体が指定の GeoFence の外側にあるイベントだけが空間フィルタを通過できます。
- enter - ロケーションが指定の GeoFence に入ったイベントだけが空間フィルタを通過できます。この条件は、あるイベントが GeoFence の内側にあり、同じトラックの 1 つ前のイベントが外側にあったことを示します。enter 条件が検出され、イベントがフィルタを通過できるようになった場合、GeoEvent Processor が別の enter 条件を認識する前に、GeoFence の外側に 1 つ以上のイベントがあることがトラック オブジェクトから報告される必要があります。
- exit - ロケーションが指定の GeoFence から出たイベントだけが空間フィルタを通過できます。この条件は、あるイベントが GeoFence の外側にあり、同じトラックの 1 つ前のイベントが内側にあったことを示します。exit 条件が検出され、イベントがフィルタを通過できるようになった場合は、GeoEvent Processor が別の exit 条件を認識する前に、GeoFence の内側に 1 つ以上のイベントがあることがトラック オブジェクトから報告される必要があります。
GeoFence の操作方法の詳細は、「GeoFence の管理」をご参照ください。
GeoEvent 定義フィルタ
GeoEvent Processor 内の GeoEvent ごとに、そのイベントのデータに関する属性フィールドとデータ型(date、string、integer など)を識別するスキーマが関連付けられています。このスキーマを「GeoEvent 定義」と呼びます。GeoEvent 定義フィルタを設定すると、イベント定義に基づいてイベントをフィルタリングできます。
通常、多種多様なイベントを組み合わせて 1 つのイベント ストリームを構成することができます。JSON フィードと RSS フィードを受信する入力コネクタなどの特定の入力コネクタには、受信したイベントから検索したデータに基づいてイベント定義を生成する能力が備わっています。もし処理対象のすべてのイベントが特定のスキーマに従うことがサービス設計者にとって必要事項の場合は、GeoEvent 定義フィルタを使用して、特定のイベント定義に関連付けられていないイベントを破棄できます。
タグを使用してフィルタを設定
タグは GeoEvent 定義の特定のフィールドに配置されるラベルです。タグはフィールド エイリアスに似ています。異なるフィールド名を持つイベント定義同士を類似データとして関連付ける場合に、表現における一貫性をサポートします。また、特定の組み込みタグでは、TRACK_ID や GEOMETRY などの重要な情報が含まれている GeoEvent Processor フィールドが識別されます。
タグを作成し、そのタグを GeoEvent 定義の特定のフィールドに適用したら、フィルタを使用して、フィールドの名前ではなくタグでフィールドを参照することができます。この処理により 1 つの属性フィルタで全く同じ属性に基づく条件を複数のイベント タイプに適用できるようになるため、この処理は属性フィルタを設定する場合に特に有用です。
GeoEvent Processor でのタグの使用方法の詳細は、「タグの管理」をご参照ください。
正規表現を使用してフィルタを設定
MATCHES 演算子(属性フィルタを設定する際に使用できる)では、正規表現を使用してターゲット フィールド内のパターンを検索できます。正規表現のパターン マッチングは、データの整合性をチェックするための強力なツールになります。正規表現の適用範囲と構文は本書内ですべて扱いきれないため、イベント フィルタ内で使用する場合に特に役立つ例を次に挙げてあります。
正規表現は、文字列型の属性フィールドにしか適用できません。
指定したパターンは文字列全体に一致します。「California」と入力しても、そのサブ文字列を含む文字列との一致が見つかりません。「.*California.*」というパターンを指定すると、フィルタで検索されるサブ文字列の前後両方にゼロ以上の文字があることが考慮されます。
フィールド値 |
RegEx パターン |
結果 |
---|---|---|
SWA2382 |
^SWA[0-9]+$ |
キャレット記号(^)はパターンが文字列の先頭にあることを示し、ドル記号($)はパターンが文字列の末尾にあることを示します。パターンの [0-9]+ 部分は、文字列の末尾に 0 ~ 9 の数字が 1 つ以上あることを示します。 ターゲット フィールド内の値が SWA(その後にフライト番号を表す数値が続く)で始まっていない場合は、その値がフィルタで破棄されます。 |
02/15/1973 |
[0-1][0-9][/][0-3][0-9][/][0-1][0-9][0-9][0-9] |
0 ~ 1、0 ~ 3、0 ~ 9 などの数値範囲は、予想される mm/dd/yy 日付文字列の値を示します。2 桁の月とその後の 2 桁の日および 4 桁の年がスラッシュ(/)で区切られていない値はすべて、フィルタで破棄されます。 |
3.14159 |
^[-+]?[0-9]*\.?[0-9]+$ |
このパターンでは、ターゲット フィールド内の文字列が数値として解釈されるかどうかが検証されます。RegEx パターン内のアスタリスク(*)は先行文字のゼロ以上のインスタンスと一致し、疑問符(?)はゼロまたは 1 つのインスタンスと一致します。バックスラッシュは、「.」が任意の文字を表すワイルドカード(例: *)ではなく、小数点リテラルであることを示します。このパターンでは、プラス記号(+)またはマイナス記号(-)が浮動小数点値の整数部分になり、小数点リテラルがオプションになります(出現回数がゼロの可能性がある)。 |