ジオイベント サービスの空間フィルターは、ジオフェンスとの空間リレーションシップに基づいてジオイベントをフィルタリングします。空間フィルターを構成する前に、ジオフェンスを指定するジオメトリを、公開されているフィーチャ サービスから GeoEvent Server にインポートしておく必要があります。
以下の空間演算子がサポートされています。
- [INSIDE] - ジオイベントのジオメトリがジオフェンスで定義されたエリアに完全に含まれている場合、そのジオメトリはジオフェンスの内部にあると見なされます。この演算子は、ジオイベントに関連付けられたポイントが対象地域内にあるかどうかを判別できます。
- OUTSIDE - ジオイベント ジオメトリ全体がジオフェンスで定義されたエリアの外にある場合、そのジオメトリはジオフェンスの外部にあると見なされます。この演算子は、ジオイベントに関連付けられたポイントが対象地域外にあるかどうかを判別できます。
- [ENTER] - ジオイベント位置が以前はジオフェンスの外部にあった場合、同じトラックのジオイベントのジオメトリが、現在、ジオフェンスで定義されたエリア内にあれば、そのジオメトリはジオフェンスに入っていると見なされます。ENTER 条件が検出され、ジオイベントがフィルターを通過できるようになった場合、別の ENTER 条件が認識されるには、まずジオフェンスの外側に 1 つ以上のイベントがあることがトラック オブジェクトから報告される必要があります。
- [EXIT] - ジオイベントの位置が以前はジオフェンスの内部にあった場合、同じトラックのジオイベントのジオメトリが、現在、ジオフェンスで定義されたエリアの外側にあれば、そのジオメトリはジオフェンスを出ていると見なされます。EXIT 条件が検出され、ジオイベントがフィルターを通過できるようになった場合、別の EXIT 条件が認識されるには、まずジオフェンスの内側に 1 つ以上のイベントがあることがトラック オブジェクトから報告される必要があります。
通常、一連のジオフェンスは、対象地域を定義し、またポリゴン フィーチャを提供するフィーチャ サービスからインポートされます。ジオフェンスは、必ずしもポリゴン エリアを表している必要はありません。ポイント フィーチャやライン フィーチャからジオフェンスをインポートすることもできます。
以下の空間演算子は、さまざまなタイプのジオメトリとともに使用することができます。これらの空間演算子は、ブール値を返し、記述されたリレーションシップがジオフェンスとジオイベントのジオメトリとの間に存在するかどうかを示します。一部のリレーションシップは、ジオイベントのジオメトリが、比較対象のジオフェンスと同じ次元を持っていることを要求します。その他のリレーションシップは、より柔軟な次元制約を持っています。以下の多くの空間演算子は、同時に使用することができない Clementini の演算子です。
- [CONTAINS] - ジオフェンスがイベントのジオメトリのサブセットであり、それら 2 つのジオメトリの交差が空でない場合、イベントのジオメトリはジオフェンスを含みます。CONTAINS は、WITHIN とは論理的に逆の演算です。ポイント ジオメトリにポリラインまたはポリゴンを含めることはできません。そのため、イベントに関連付けられているポイントに、ジオフェンスとしてインポートされたラインまたはエリアを含めることはできません。ポイントにポイント、ラインにラインを含めることはできますが、そのような空間リレーションシップのテストはお勧めしません。投影法によるジオメトリのわずかな差異によって、ジオフェンスと一致すると想定されるポイントまたはラインが実際には完全一致しない場合があります (この場合、CONTAINS リレーションシップは FALSE と評価されます)。
CONTAINS 演算子の詳細については、『ArcObjects API Reference for .NET』の「IRelationalOperator.Contains Method」をご参照ください。
- [CROSSES] - 次元が小さい方のジオメトリに交差が存在する場合、イベントのジオメトリはジオフェンスとクロスします。2 つのポリラインが 1 つ以上のポイントで交差し、少なくとも 1 つのポイントが端点でない場合、それらのポリラインはクロスします。ポリラインとポリゴンが、そのポリラインと完全には同じではないポリゴンの内部のポリラインまたはポイントを共有している場合、それらのポリラインとポリゴンはクロスしています。CROSSES は、ポリライン/ポリライン、ポリライン/ポリゴン、またはポリゴン/ポリラインの関係にのみ適用されます。ジオメトリの 1 つが空の場合、ジオメトリはクロスしません。
CROSSES 演算子の詳細については、『ArcObjects API Reference for .NET』の「IRelationalOperator.Crosses Method」をご参照ください。
- [DISJOINT] - 2 つのジオメトリが交差しない場合、イベントのジオメトリはジオフェンスと一致しないと見なされます。イベントのジオメトリは、別のジオフェンスと交差しながら、ジオフェンスと一致しない可能性があるので注意してください。空間条件式を指定する場合は注意してください。条件式は、イベントのジオメトリだけでなく、スコープ、any または all、および正規表現のパターン マッチ (例: SomeCategory/.*) を使用して特定された一連のジオフェンスも指定します。
DISJOINT 演算子の詳細については、『ArcObjects API Reference for .NET』の「IRelationalOperator.Disjoint Method」をご参照ください。
- [EQUALS] - イベントとジオフェンスのジオメトリのシンメトリカル ディファレンスが空のセットである場合、イベントとジオフェンスのジオメトリが等しいです。2 つのジオメトリ内の各セグメントで反復してセグメントのタイプと座標を比較し (座標の一致を判別するために、空間参照のクラスター許容値を使用)、それらがすべて同じだった場合、2 つのジオメトリは等しいと見なされます。
EQUALS 演算子の詳細については、『ArcObjects API Reference for .NET』の「IRelationalOperator.Equals Method」をご参照ください。
- [INTERSECTS] - 2 つのジオメトリが一致していない場合、イベントのジオメトリはジオフェンスと交差しています。INTERSECTS は、DISJOINT とは論理的に逆の演算です。ジオフェンスのエリア (ポリゴン) 内にあるイベントのポイントもジオフェンスと交差します。イベントのポリラインまたはポリゴンは、ジオフェンス内に完全に含まれていなくても、ジオフェンスと交差する場合があります。イベントのジオメトリは、一連のジオフェンス内にある 1 つのジオフェンスと交差しながら、DISJOINT ANY (例: 1 つ以上と一致しない) である場合があります。イベントのジオメトリは、セット内の少なくとも 1 つのジオフェンスと交差しているため、DISJOINT ALL ではありません。
- [OVERLAPS] - 対象のジオメトリと次元が同じ交差が存在し、その交差がイベントのジオメトリまたはジオフェンスと同じではない場合、イベントのジオメトリはジオフェンスと重複しています。OVERLAPS は、ポリライン/ポリライン、ポリゴン/ポリゴン、またはマルチポイント/マルチポイントの関係にのみ適用されます。ジオメトリの 1 つが空の場合、ジオメトリは重複しません。
* ポイント ジオメトリは等価条件を満たさないため、イベントのポイント位置は、ジオメトリがポイントであるジオフェンスと重複できません。
- [TOUCHES] - 交差が存在し、交差の内側が空の場合、イベントのジオメトリはジオフェンスと接しています。これは、2 つのジオメトリが、ジオメトリを定義する頂点のみで接し、頂点間のポイントでは接していないことを意味します。TOUCHES はポイント/ポイントの関係には定義されません。ジオメトリの 1 つが空の場合、ジオメトリはタッチしません。
TOUCHES 演算子の詳細については、『ArcObjects API Reference for .NET』の「IRelationalOperator.Touches Method」をご参照ください。
- [WITHIN] - 2 つのジオメトリが交差しており、それらの内部の交差が空でない場合、イベントのジオメトリはジオフェンス内にあると見なされます。WITHIN 演算子は、CONTAINS とは論理的に逆の演算子です。
WITHIN 演算子の詳細については、『ArcObjects API Reference for .NET』の「IRelationalOperator.Within Method」をご参照ください。
関係演算子の詳細については、『ArcObjects API Reference for .NET』の「IRelationalOperator Interface」をご参照ください。
GeoEvent Server でのジオフェンスの操作方法の詳細については、「ジオフェンスの管理」をご参照ください。