レイヤ アクション
レイヤ アクションは、トラッキング レイヤに属するフィーチャを対象として動作します。したがって、リアルタイムと固定日時の両方のトラッキング レイヤにアクションを適用できます。レイヤ アクションはマップ ドキュメントに保存され、[レイヤ プロパティ] ダイアログ ボックスの [アクション] タブで構成できます。ArcMap または ArcGlobe でトラッキング レイヤをレイヤ ファイルとして保存すると、そのトラッキング レイヤのアクション設定がレイヤとともに保存されます。
サービス アクションと異なり、すべてのレイヤ アクションは、ArcMap などのクライアント アプリケーションに存在します。そのため、これらのアクションは、解析を目的としたデータの視覚化に関連していることが普通です。たとえば、一定のトリガ条件を満たすフィーチャをマップ上でハイライト表示できます。
カスタム Visual Basic(VB)レイヤ アクションは、最も高度なレイヤ アクションです。これは高度なカスタマイズが可能なアクションで、リアルタイム トラッキング レイヤにのみ適用できます。このアクションは、マップ ドキュメントに保存されている VB マクロを参照するので、レイヤ アクションと見なされます。また、トラッキング サービスからイベントをストリーミングするとそのイベントに適用されるので、サービス アクションと同様に機能します。
ここでは、Tracking Analyst で使用可能なすべてのレイヤ アクションについて説明します。
ハイライト/非表示
ハイライト/非表示アクションでは、定義したトリガ条件を満たすフィーチャのシンボルを変更します。ハイライト アクションを使用すると、特別なシンボルを使用してイベントをハイライト表示することで、目的のイベントを視覚的に強調できます。ハイライトに使用するシンボルを選択でき、そのシンボルは、マップを描画したときにイベントの通常のシンボルの背後に配置されます。非表示アクションを使用すると、トリガ条件を満たすイベントは、マップに描画されずに非表示になります。レイヤでハイライト アクションまたは非表示アクションを定義すると、レイヤの中でトリガ条件を満たすすべてのフィーチャにそのアクションが直ちに適用されます。
フィルタ
レイヤのフィルタ アクションをサービスのフィルタ アクションと混同しないようにしてください。レイヤのフィルタ アクションでは、以降のアクション処理の対象とするイベント、または以降のアクション処理から除外するイベントの指定のみが可能です。Tracking Analyst ではアクションを処理する順序を構成できますが、フィルタのアクションでは各アクションの順序を理解しておくことが特に重要です。フィルタ アクションの後に他のレイヤ アクションを定義していない場合、そのフィルタ アクションには何の効果もありません。フィルタ アクションの後に他のアクションを定義している場合は、フィルタを通過するイベント(フィルタで除外されないイベント)のみが以降のアクションに渡されます。
カスタム VB アクション(リアルタイム トラッキング レイヤのみで有効)
Tracking Analyst に用意されているカスタム VB レイヤ アクションは、ArcGIS for Desktop メディア パッケージに収録されている ArcGIS for Desktop VBA Resources for Developers ソフトウェアをインストールしてライセンスを取得している場合に使用可能です。インストールとライセンスに関する情報は、ArcGIS for Desktop インストール ガイドに記載されています。ArcGIS for Desktop VBA Resources for Developers をインストールした後、そのヘルプ システムを参照し、Visual Basic Editor を使用して ArcGIS for Desktop 用のマクロを作成する手順を確認してください。
カスタム VB レイヤ アクションは、リアルタイム トラッキング レイヤにのみ適用できるので、他のレイヤ アクションとは異なります。また、トラッキング サービスではなくトラッキング レイヤで定義することから、サービス アクションとも異なります。VB アクションは、トラッキング レイヤにリアルタイム イベントを追加するときにそのイベントに適用されますが、アクションを開始する前にレイヤにすでに存在しているイベントには適用されません。
VB マクロでは多様な操作をプログラムで実現できるので、Visual Basic アクションからは高度な柔軟性が得られます。VB マクロを記述して実行できる処理の数はほとんど無制限といえます。たとえば、新しいイベントを受信したときにそのイベントの属性を表示する、ポップアップ メッセージでアナリストに通知する、受信データを操作するなどの処理が可能です。レイヤにカスタム VB アクションを定義する前に、Visual Basic Editor を使用して VB マクロを記述しておく必要があります。VB マクロには、受信イベントのすべてのデータ フィールドの値を格納する配列が用意されています。
リアルタイム レイヤにカスタム VB アクションを適用する方法の詳細
まず、簡単な VB マクロを 2 つ、以下に示します。どちらの場合でも、コードの 1 行目に特有な構造に注意することが重要です。イベントの受信データ値を Variant 型の 1 つの配列で受け取るには、この構造に正確に従います。こうしておくと、この配列を参照し、コードの引数をフィールドの列番号に設定することによって、マクロの本体で個々のデータ フィールド値に簡単にアクセスできるようになります。フィールドの順序は、トラッキング レイヤの属性テーブルに記述されているフィールドの順序と同じです。
次のマクロを実行すると、受信データ メッセージの 5 番目のフィールドが ArcMap のステータス バーに表示されます。このマクロは、アクションのトリガ条件を満たす受信イベントすべてに対して実行されます。
Public Sub StatusBarMacro(ParamArray varArgs() As Variant)
Application.StatusBar.Message(0) = varArgs(5)
End Sub
次のマクロを実行すると、受信データ メッセージの 3 番目のフィールドがメッセージ ボックスに表示されます。このマクロは、アクションのトリガ条件を満たす受信イベントすべてに対して実行されます。
Public Sub MessageBoxMacro(ParamArray varArgs() As Variant)
MsgBox varArgs(3)
End Sub
ParamArray を単独のパラメータとしてマクロに使用すると、最も柔軟性が高くなります。このように使用しない場合は、属性テーブルのすべての列をひとつひとつ記述し、そのすべてのデータ タイプが受信データのデータ タイプと正確に一致している必要があります。
カスタム VB アクションの使用には注意が必要です。たとえば、数千のイベントを伝送するリアルタイム データ フィードでこの例で挙げたメッセージ ボックス マクロを使用した場合、すべてのレコードがアクションのトリガ条件を満たしていると、この数千のイベントそれぞれでメッセージ ボックスを閉じる必要があります。