フィルター
このトピックの内容
フィルターは、指定された条件に一致しないジオイベントをフィルタリングする (ストリーミング データから削除する) ジオイベント サービスの構成可能なコンポーネントです。通常、フィルターは属性フィルターまたは空間フィルターのいずれかですが、GeoEvent Extension 製品の $DEFINITION_NAME などのマクロは、プロパティ (現在のジオイベントに関連付けられたジオイベント定義の名前など) によるジオイベントのフィルタリングを可能にします。
属性フィルター
ジオイベント サービスで属性フィルターを使用すると、属性条件に基づいてイベントをフィルタリングできます。1 つ以上の属性式を使用して属性フィルターを構成できます。これらの式を論理的に組み合わせると、ジオイベントがフィルターを通過するために満たす必要のある条件が作成されます。
以下の属性演算子がサポートされています。
- 等しい (=) - この演算子は、指定された値と同じ属性値を持つジオイベントを維持します。例: IdString = 3XAB891。
- 等しくない (!=) - この演算子は、指定された値と異なる属性値を持つジオイベントを維持します。例: StatusString != Err。
注意:
「等しい」および「等しくない」演算子を、浮動小数点値に適用しないでください。たとえば、「Radius = 3.14159」のようなフィルター式を構成せず、代わりに、「より大きい」、「より小さい」などの演算子を使用します。
- より大きい (>) - この演算子は、指定された値よりも大きい属性値を持つジオイベントを維持します。例: Speed > 50。
- 以上 (>=) - この演算子は、指定された値以上の属性値を持つジオイベントを維持します。例: Speed >= 50。
- より小さい (<) - この演算子は、指定された値よりも小さい属性値を持つジオイベントを維持します。例: Altitude < 1000。
- 以下 (<=) - この演算子は、指定された値以下の属性値を持つジオイベントを維持します。例: Altitude <= 1000。
注意:
「より大きい」、「より小さい」などの演算子を文字列値に適用しないでください。たとえば、「Company > ABC」のようなフィルター式を構成せず、代わりに、「等しい」または「等しくない」演算子を使用して文字列全体を式に組み込みます。
- IN - この演算子は、指定されたフィールドの値がカンマ区切りの値リスト内に存在するジオイベントを維持します。例: StatusCode IN HK1,HK3,HK5。
- MATCHES - この演算子は、指定されたフィールドの値が正規表現と一致するジオイベントを維持します。例: StatusCode MATCHES ^HK[135]。
注意:
指定した正規表現は、イベントのフィールド値全体と一致する、または一致しないのいずれかとして評価されます。部分一致はサポートされていません。上の例では、1 桁の数字の後に文字列が追加された値が StatusCode に格納されている場合、その属性値の末尾の任意の文字列と一致させるには、式に「.*」を含める必要があります。
- EXISTS - この演算子は、指定されたフィールドが受信したイベントのスキーマ内に存在するジオイベントを維持します。例: Geometry EXISTS。
- ISNULL - この演算子は、指定されたフィールドに NULL 値が格納されているジオイベントを維持します。例: Geometry ISNULL。
注意:
NULL 文字列のチェックには対応していません。ジオイベントでは、文字列が NULL オブジェクトではなく空の文字列 (長さゼロの文字列) として定義されます。
空間フィルター
ジオイベント サービスの空間フィルターは、ジオフェンスとの空間リレーションシップに基づいてジオイベントをフィルタリングします。空間フィルターを構成する前に、ジオフェンスを指定するジオメトリを、公開されているフィーチャ サービスから GeoEvent Extension にインポートしておく必要があります。
以下の空間演算子がサポートされています。
- INSIDE - ジオイベントのジオメトリがジオフェンスで定義されたエリアに完全に含まれている場合、そのジオメトリはジオフェンスの内部にあると見なされます。この演算子は、ジオイベントに関連付けられたポイントが対象地域内にあるかどうかを判別できます。
- OUTSIDE - ジオイベント ジオメトリ全体がジオフェンスで定義されたエリアの外にある場合、そのジオメトリはジオフェンスの外部にあると見なされます。この演算子は、ジオイベントに関連付けられたポイントが対象地域外にあるかどうかを判別できます。
- ENTER - ジオイベント位置が以前はジオフェンスの外部にあった場合、同じトラックのジオイベントのジオメトリが、現在、ジオフェンスで定義されたエリア内にあれば、そのジオメトリはジオフェンスに入っていると見なされます。ENTER 条件が検出され、ジオイベントがフィルターを通過できるようになった場合、別の ENTER 条件が認識されるには、まずジオフェンスの外側に 1 つ以上のイベントがあることがトラック オブジェクトから報告される必要があります。
- EXIT - ジオイベントの位置が以前はジオフェンスの内部にあった場合、同じトラックのジオイベントのジオメトリが、現在、ジオフェンスで定義されたエリアの外側にあれば、そのジオメトリはジオフェンスを出ていると見なされます。EXIT 条件が検出され、ジオイベントがフィルターを通過できるようになった場合、別の EXIT 条件が認識されるには、まずジオフェンスの内側に 1 つ以上のイベントがあることがトラック オブジェクトから報告される必要があります。
注意:
上の EXISTS 属性演算子と ISNULL 属性演算子は、Geometry フィールドを空間フィルターの式の一部として指定した場合にも適用できます。
通常、一連のジオフェンスは、対象地域を定義し、またポリゴン フィーチャを提供するフィーチャ サービスからインポートされます。ジオフェンスは、必ずしもポリゴン エリアを表している必要はありません。ポイント フィーチャやライン フィーチャからジオフェンスをインポートすることもできます。
以下の空間演算子は、さまざまなタイプのジオメトリに適用することができます。これらの空間演算子は、ブール値を返し、記述されたリレーションシップがジオフェンスとジオイベントのジオメトリとの間に存在するかどうかを示します。一部のリレーションシップは、ジオイベントのジオメトリが、比較対象のジオフェンスと同じ次元を持っていることを要求します。その他のリレーションシップは、より柔軟な次元制約を持っています。以下の多くの空間演算子は、同時に使用することができない Clementini の演算子です。
- CONTAINS - ジオイベントのジオメトリが、ジオフェンスのジオメトリのサブセットであり、それら 2 つのジオメトリの交差が空でない場合、ジオフェンスはジオイベントのジオメトリを含むと見なされます。CONTAINS 演算は、WITHIN とは論理的に逆の演算です。ジオフェンスがジオイベントのジオメトリを含む場合、そのジオイベントのジオメトリはジオフェンス内にあります。
- CROSSES - ジオフェンスのジオメトリの一部とジオイベントのジオメトリの一部が一致している場合、ジオフェンスは、ジオイベントのジオメトリとクロスしていると見なされます。2 つのポリラインが内部の点を共有している (それらの点の 1 つ以上が端点でない) 場合、それらはクロスしています。ポリラインとポリゴンが、そのポリラインと完全には同じではないポリゴンの内部のポリラインまたはポイントを共有している場合、それらのポリラインとポリゴンはクロスしています。
- INTERSECTS - ジオフェンスのジオメトリとジオイベントのジオメトリが分離していない場合、ジオフェンスはジオイベントのジオメトリと交差しています。INTERSECTS 演算子は、DISJOINT 演算子とは論理的に逆の演算子です。
- DISJOINT - ジオフェンスとジオイベントのジオメトリが交差していない場合、それらは分離していると見なされます。
- EQUALS - 2 つのジオメトリの対称差が空の集合である場合、それらは等しいと見なされます。2 つのジオメトリ内の各セグメントで反復してセグメントのタイプと座標を比較し (座標の一致を判別するために、空間参照のクラスター許容値を使用)、それらがすべて同じだった場合、2 つのジオメトリは等しいと見なされます。
- OVERLAPS - ジオフェンスのジオメトリとジオイベントのジオメトリが交差しており、その交差の次元が比較対象のジオメトリの次元と同じであり、それらのジオメトリが等しくない場合、ジオフェンスはジオイベントのジオメトリと重複していると見なされます。
- TOUCHES - ジオフェンスのジオメトリがジオイベントのジオメトリと交差しているが、それらの内部の交差が空である場合、ジオフェンスはジオイベントのジオメトリと接触していると見なされます。
- WITHIN - ジオフェンスのジオメトリがジオイベントのジオメトリと交差しており、それらの内部の交差が空でない場合、ジオフェンスはジオイベントのジオメトリ内にあると見なされます。WITHIN 演算子は、CONTAINS とは論理的に逆の演算子です。
関係演算子の詳細については、「IRelationalOperator Interface in the ArcObjects API Reference for .NET」をご参照ください。
GeoEvent Extension でのジオフェンスの操作方法の詳細は、「ジオフェンスの管理」をご参照ください。
ジオイベント プロパティ フィルター
GeoEvent Extension 内のすべてのジオイベントは、ジオイベントの作成に使用されるジオイベント定義など、関連付けられた一連のプロパティを持っています。ジオイベント定義が、そのジオイベントのデータに関する属性フィールドとデータ型 (Date、String、Integer など) を識別するスキーマであることを思い出してください。ジオイベント定義などのプロパティに基づいてジオイベントをフィルタリングするようにフィルターを構成できます。
フィルター式を構成する際に、フィールド パラメーターのドロップダウンには、使用できるジオイベント定義のフィールド名のリストが表示されます。このリストの上部には、以下のような複数の GeoEvent Extension プロパティがあります。
- $OWNER_ID
- $OWNER_URI
- $DEFINITION_NAME
- $DEFINITION_GUID
- $RECEIVED_TIME
次の式を使用してフィルターを作成すると、Flights-TcpTextIn というジオイベント定義名を含んでいないすべてのジオイベントが除外されます: $DEFINITION_NAME = Flights-TcpTextIn ジオイベント定義プロパティに基づくこのようなフィルターを、必要なスキーマに従っていないすべてのジオイベントをフィルタリングするために使用できます。
タグを使用してフィルターを設定
タグはジオイベント定義の特定のフィールドに配置されるラベルです。タグはフィールド エイリアスに似ています。異なるフィールド名を持つジオイベント定義同士を類似データとして関連付ける場合に、表現における一貫性をサポートします。特定の組み込みタグは、TRACK_ID や GEOMETRYなどの情報を含む重要なGeoEvent Extension フィールドを識別します。
タグを作成し、そのタグをジオイベント定義の特定のフィールドに適用したら、フィルターを使用して、フィールドの名前ではなくタグでフィールドを参照することができます。この処理により 1 つの属性フィルターで全く同じ属性に基づく条件を複数のイベント タイプに適用できるようになるため、この処理は属性フィルターを設定する場合に特に有用です。
GeoEvent Extension でのタグの使用方法の詳細は、「タグの管理」をご参照ください。
正規表現を使用してフィルターを設定
MATCHES 演算子 (属性フィルターを設定する際に使用できる) では、正規表現を使用してターゲット フィールド内のパターンを検索できます。正規表現のパターン マッチングは、データの整合性をチェックするための強力なツールになります。正規表現の適用範囲と構文は本書内ですべて扱いきれないため、ジオイベント フィルター内で使用する場合に特に役立つ例を次に挙げてあります。
注意:
正規表現は、文字列型の属性フィールドにしか適用できません。
注意:
指定したパターンは文字列全体に一致します。「California」と入力しても、そのサブ文字列を含む文字列との一致が見つかりません。パターン を指定します。「*California.*」というパターンを指定すると、フィルターで検索されるサブ文字列の前後両方にゼロ以上の文字があることが考慮されます。
フィールド値 | RegEx パターン | 結果 |
---|---|---|
SWA2382 |
| キャレット記号 (^) はパターンが文字列の先頭にあることを示し、ドル記号 ($) はパターンが文字列の末尾にあることを示します。パターンの [0-9]+ 部分は、文字列の末尾に 0 〜 9 の数字が 1 つ以上あることを示します。 ターゲット フィールド内の値が SWA (その後にフライト番号を表す数値が続く) で始まっていない場合は、その値がフィルターで破棄されます。 |
02/15/1973 |
| 0 〜 1、0 〜 3、0 〜 9 などの数値範囲は、予想される mm/dd/yy 日付文字列の値を示します。2 桁の月とその後の 2 桁の日および 4 桁の年がスラッシュ (/) で区切られていない値はすべて、フィルターで破棄されます。 |
3.14159 |
| このパターンでは、ターゲット フィールド内の文字列が数値として解釈されるかどうかが検証されます。RegEx パターン内のアスタリスク (*) は先行文字のゼロ以上のインスタンスと一致し、 疑問符 (?) はゼロまたは 1 つのインスタンスと一致します。バックスラッシュは、「.」が、ワイルドカード (*) ではなく小数点リテラルであることを示します。このパターンでは、プラス記号 (+) またはマイナス記号 (-) が浮動小数点値の整数部分になり、小数点リテラルがオプションになります (出現回数がゼロの可能性がある)。 |