一部の GeoAnalytics Desktop ツールは、解析で ArcGIS Arcade 式を使用します。 以下では、式のツールと関数の概要を示します。
Arcade を使用して、フィールド名が $feature["field name"] または $feature.fieldname として書式設定されます。 フィールド名にスペースが含まれる場合には、最初のオプション $feature["field name"] が必要となります。 下記のすべての例は、このオプションを使用しています。 [フィーチャの結合 (Join Features)] を除くすべて GeoAnalytics Desktop ツールは、$feature["field name"] という形式を使用します。 [フィーチャの結合 (Join Features)] では、$target["field name"] および $join["field name"] を使用して、使用するデータセットを指定します。
使用法、プロファイル変数、戻り値のタイプ、およびその他の詳細については、GeoAnalyticsArcade プロファイルをご参照ください。
Arcade 式は、GeoAnalytics Desktop ツールボックスにおいて、次のツールによって使用されます。
- [トラッキングの再構築 (Reconstruct Tracks)] および [バッファーの作成 (Create Buffers)] - バッファー式を使用して数値計算を実行し、バッファー サイズを設定します。 すべてのレコードに適用できる、単純なものから高度なものまでの、さまざまな計算を実行することができます。 この計算は、各フィーチャに適用されます。
 - [トラッキングの再構築] - 分割式を使用して、トラッキングを分割する条件を指定します。 ポイントが条件を満たしている場合、トラッキングが分割されて別のトラッキングに集計されます。 単純な条件のほか、トラッキング ベースの条件も適用できます。 たとえば、現在のポイントの速度が秒速 2 メートル未満の場合にトラッキングを分割できます (TrackCurrentSpeed() < 2)。
 - [フィーチャの結合 (Join Features)] - 結合式を使用して、結合に含めるべきフィーチャを選択する条件を指定します。 単純な結合条件のほか (field a > field c など)、高度な条件を指定することもできます。 条件は各フィーチャに対してテストされ、解析するフィーチャを決定します。
 - [フィールド演算 (Calculate Field)] - すべてのレコードに適用される、単純な計算と高度な計算を実行します。 この計算は、各フィーチャに適用されます。
 - [インシデントの検出 (Detect Incidents)] - インシデントの開始条件と終了条件を決定します。 開始式と終了式を使用してインシデントを検出します。 [インシデントの検出 (Detect Incidents)] 条件の結果は、常に true か false のどちらかになります。 条件を使用して、インシデントにフィーチャを含める必要があるかどうか確認します。 条件は各フィーチャに対してテストされ、インシデントとするフィーチャを決定します。
 
数学演算および数学関数の例
式は、数値を数学的に処理することができます。 以下の表は、使用可能な演算のサンプルを示しています。
| 演算子 | 説明 | 例 | 
|---|---|---|
a + b  | a プラス b の合計を返します。  | fieldname には、1.5 の値が含まれています。 $feature["fieldname"] + 2.5 4.0  | 
a - b  | a マイナス b の差を返します。  | fieldname には、3.3 の値が含まれています。 $feature["fieldname"]- 2.2 1.1  | 
a * b  | a 掛ける b の積を返します。  | fieldname には、2.0 の値が含まれています。 $feature["fieldname"] * 2.2 4.4  | 
a / b  | a 割る b の商を返します。  | fieldname には、4.0 の値が含まれています。 $feature["fieldname"] / 1.25 3.2  | 
abs( a )  | a. の絶対値 (正の値) を返します。  | fieldname には、-1.5 の値が含まれています。 abs($feature["fieldname"]) 1.5  | 
log( a )  | a の自然対数 (底を e とする) を返します。  | fieldname には、1 の値が含まれています。 log($feature["fieldname"]) 0  | 
sin( a )  | a の正弦が返されます。 入力の角度の単位はラジアンです。  | fieldname には、1.5707 の値が含まれています。 sin($feature["fieldname"]) 1  | 
cos( a )  | a の余弦が返されます。 入力の角度の単位はラジアンです。  | fieldname には、0 の値が含まれています。 cos($feature["fieldname"]) 1  | 
tan( a )  | a の正接が返されます。 入力の角度の単位はラジアンです。  | fieldname には、0 の値が含まれています。 tan($feature["fieldname"]) 0  | 
sqrt( a )  | a の平方根を返します。  | fieldname には、9 の値が含まれています。 sqrt($feature["fieldname"]) 3  | 
min( a, b )  | a と b のうちの小さい方の数値を返します。  | fieldname には、1.5 の値と -3 の値が含まれています。 min($feature["fieldname"], -3) -3  | 
max( a, b )  | a と b のうちの大きい方の数値を返します。  | fieldname1 には 1.5 の値が含まれており、fieldname2 には -3 の値が含まれています。 max($feature["fieldname1"], $feature["fieldname2"]) 1.5  | 
constrain(<value>,<low>,<high>)  | 入力値が制限範囲内にある場合、入力値を返します。 値が下限値よりも小さい場合、下限値を返します。 値が上限値よりも大きい場合、上限値を返します。  | 例 1: constrain( $feature["distance"], 0, 10) distance が 0 よりも小さい場合は 0 を返し、distance が 10 よりも大きい場合は 10 を返し、それ以外の場合は distance を返します。 例 2: constrain($feature['Store dist'], 6, distance) Store dist が 6 よりも小さい場合は 6 を返し、Store dist が distance よりも大きい場合は distance を返し、それ以外の場合は Store dist を返します。  | 
テキスト関数の例
Arcade 式は、テキストを処理できます。 以下の表は、使用可能な演算のサンプルを示しています。
| 演算子 | 説明 | 例 | 結果 | 
|---|---|---|---|
concatenate(<values>, <separator>)  | 値を 1 つに連結して、文字列を返します。 
  | fieldname には、GeoAnalytics の値が含まれています。 Concatenate ([$features["fieldname"], "is", "great!"], ' ')  | GeoAnalytics is great!  | 
find(<searchText>, <text>, <startPos>)  | 文字列内の文字列を検索します。 ワイルドカードはサポートされていません。 
  | fieldname1 には 14NorthStreet の値が含まれており、fieldname2 には North の値が含まれています。 find($feature["fieldname2"], $feature["fieldname1"])  | 2  | 
lower(<value>)  | 文字列を小文字にします。 
  | fieldname には、GEOANALYTICS の値が含まれています。 lower($feature["fieldname"])  | geoanalytics  | 
find および lower を使用するテキストの例。
find(("north"), lower("146NorthStreet"))日付関数の例
Arcade 式は、日付を処理できます。 以下の表は、使用可能な演算のサンプルを示しています。 Arcade では、月の値は 0 (1 月) ~ 11 (12 月)、日は 1 ~ 31、時は 0 (午前 12:00) ~ 23 (午後 11:00)、分と秒は 0 ~ 59、ミリ秒は 0 ~ 999 となります。
| 演算子 | 説明 | 例 | 結果 | 
|---|---|---|---|
date(<value>, <month>, <day>, <hour>, <minute>)  | 値または値のセットを構文解析して日付文字列に変換します。 
  | fieldname には、 1476987783555 の値が含まれています。 例 1: Date($features["fieldname"]) 例 2: Date(2017,0,14,0) 例 3: Date()  | 例 1: 20 Oct 2016 11:23:03 am 例 2: 14 Jan 2017 12:00:00 am 例 3: 現在の時間を返す  | 
DateDiff(<date1>, <date2>, <units>)  | ある日付から別の日付を減算して、その差を指定の単位で返します。 
  | 例 1: DateDiff(Date(2017,1,14,0), Date()) 例 2: DateDiff(Date(2017,1,14,0), Date(), "Years")  | 結果は、このコマンドをいつ実行するかによって変わります。 例 1: -20532129137 例 2: -0.6546783768647119  | 
Year(<dateValue>)  | 所定の年を返します。 
  | 例 1: fieldname は、09 Oct 2017 04:30:43 pm の値を含む日付タイプのフィールドです Year($feature["fieldname"]) 例 2: fieldname は、2012-09-27 の値を含む ISO 8601 文字列として書式設定された文字列フィールドです  | 例 1: 2017 例 2: 2012  | 
論理関数の例
シンプルな数式に加えて、次の表に示す高度な関数を使用してバッファー式を適用できます。
| 関数 | 説明 | 例 | 結果 | 
|---|---|---|---|
iif(<condition>,<true value>,<false value>)  | 条件が true と評価されると 1 つの値を返し、同条件が false と評価されると別の値を返します。 <true value> および <false value> は、次の値にすることができます。 
  | iif($feature["field1"] > $feature["field2"], $feature["field1"], 0) iif($feature["field1"] > $feature["field2"], iif($feature["field2"] = 0, $feature["field3"], $feature["field4"]), 0)  | field1 が field2 よりも大きい場合は field1 を返し、そうでない場合は 0 を返します。 field1 が field2 よりも大きい場合は 2 番目の iif 関数の結果を返し、そうでない場合は 0 を返します。  | 
when(<expression1> , <result1> , <expression2> , <result2> , ... , <expressionN> , <resultN>, <default>)  | 式が true と評価されるまで、一連の式を順次評価します。 
  | when(($feature["field1"] + 10) > 1, 1,($feature["field2"] + 10) > 2 , 2, $feature["field3"])  | field1 + 10 が 1 よりも大きい場合、1 を返します。 そうでない場合、field2 + 10 が 2 よりも大きいかどうかをチェックします。 大きい場合は 2 を返します。 そうでない場合は field3 を返します。  | 
decode(<conditional val> , <case1> , <result1>, <case2>, <result2>, ... <caseN>, <resultN>, <defaultValue> )  | 式を評価し、その値を以降のパラメーターと比較します。 式が一致した場合、次のパラメーター値を返します。 何も一致しない場合、最後のパラメーターがデフォルトの戻り値になるオプションがあります。 
  | decode($feature["field1"] + 3 , $feature["field1"], 1, $feature["field2"], 2, 0)  | 条件付き val の field1 + 3 と case1 の field1 の間の等式を比較します。 true の場合は 1 を返します。 false の場合は、field1 + 3 と field2 の間の等式を比較します。 true の場合は 2 を返し、そうでない場合は 0 を返します。  | 
条件付き演算子
条件付きステートメントでは、次の表に示す演算子を使用できます。
| 演算子 | 説明 | 例 | 結果 | 
|---|---|---|---|
a > b a < b  | a が b よりも大きい a が b よりも小さい  | 10 > 2  | False  | 
a >= b a <= b  | a が b 以上である a が b 以下である  | abs(-10) >= 10  | True  | 
a != b  | a が b と等しくない  | abs(-3) != -3  | True  | 
a == b  | a が b と等しい  | abs(-5) == 5  | True  | 
<condition1> || <condition2>  | 条件 1 または条件 2 が満たされる。  | (abs(-5) == 5) || (10 < 2)  | True  | 
<condition1> && <condition2>  | 条件 1 および条件 2 が満たされる。  | (abs(-5) == 5) && (10 < 2)  | False  | 
トラッキング対応の例
[インシデントの検出 (Detect Incidents)]、[フィールド演算 (Calculate Field)]、および [トラッキングの再構築 (Reconstruct Tracks)] は、Arcade でトラッキング対応方程式を使用できます。 [フィールド演算 (Calculate Field)] では、入力レイヤーが時間対応で、[式はトラッキング対応です] がオン、かつトラッキングを識別する 1 つ以上のフィールドが特定されている場合に、トラッキング方程式が使用できます。 トラック対応機能を次の表に示します。
| 関数 | 説明 | 例 | 結果 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
TrackStartTime()  | トラッキングの開始時間を紀元からのミリ秒単位で計算します。  | 2017 年 1 月 2 日に開始するトラッキングを使用します。 TrackStartTime()  | 1483315200000  | ||||||||||||
TrackDuration()  | トラッキングの開始から現在の時間ステップまでの期間をミリ秒単位で計算します。  | 2017 年 1 月 2 日に開始するトラッキングを使用し、現在時間は 2017 年 1 月 4 日です。 TrackDuration()  | 172800000  | ||||||||||||
TrackCurrentTime()  | トラッキングの現在の時刻を計算します。  | 2017 年 1 月 3 日の午前 9 時に発生したフィーチャを使用します。 TrackCurrentTime()  | 1483434000000  | ||||||||||||
TrackIndex  | 計算されているフィーチャの時間インデックスを返します。  | トラッキング内の最初のフィーチャに対してこの値を計算する。 TrackIndex  | 0  | ||||||||||||
TrackFieldWindow(<fieldName>, <startIndex>, <endIndex>)  | 所定のフィールドの指定された時間インデックスの値の配列を返します。 ウィンドウ関数を使用すると、時間を前後に移動できます。 式はトラッキングの各フィーチャで評価されます。 
  | MyField は、[10, 20, 30, 40, 50] の値を順番に並べ替えました。 式はトラッキングの各フィーチャで評価されます。 開始フィーチャを含め終了フィーチャを除外した結果が返されます。 例 1: TrackFieldWindow("MyField,-1,2) 例 2: TrackFieldWindow("MyField,-2,0)[0] 例 3: TrackFieldWindow("MyField,0,3)[2]  | 例 1: 各フィーチャで評価されると、表には次の結果が表示されます。 
 例 2: インデックス 2 で評価されると (値は 30)、10 が返されます。 例 3: インデックス 2 で評価されると (値は 30)、50 が返されます。  | ||||||||||||
TrackGeometryWindow(<startIndex>, <endIndex>)  | 指定された時間のインデックスのジオメトリを表す値の配列を返します。 ウィンドウ関数を使用すると、時間を前後に移動できます。 式はトラッキングの各フィーチャで評価されます。 
  | MyField は、[10, 20, 30, 40, 50] の値を順番に並べ替えました。 フィーチャのジオメトリは、[{x: 1, y: 1},{x: 2, y: 2} ,{x: null, y: null},{x: 4, y: 4}, {x: 5, y: 5}] です。式はトラッキング内の各フィーチャで評価されます。 開始フィーチャを含め終了フィーチャを除外した結果が返されます。 例 1: TrackGeometryWindow(-1,2) 例 2: ポリライン データセットの TrackGeometryWindow(0,1)[0] 例 3: ポリゴン データセットの TrackGeometryWindow(0,1)[0] 例 4: 前のポイント TrackGeometryWindow(-1,0)[0]["x"] の X 値となります。  | 例 1: 各フィーチャで評価されると、表には次の結果が表示されます。 
 例 2: ポリラインは次の形式で返されます: [{"paths":[[[-180,-22.88],[-177.6,-23.6]],[[180,-18.099999999999994],[179.7,-18.4],[179.4,-18.7],[178.9,-18.9],[178.5,-19.3],[178.2,-19.7],[178.4,-20],[178.8,-20.2],[178.9,-21.8],[179,-22.2],[179.4,-22.7],[180,-22.88]],[[-178,-17],[-178.8,-17.3],[-179.2,-17.5],[-179.6,-17.8],[-179.9,-18],[-180,-18.099999999999994]]]}] 例 3: ポリゴンは次の形式で返されます: [{"rings":[[[-7882559.1197999995,6376090.883500002],[-7893142.474300001,6042715.216800004],[-8544018.775999999,6045361.0554000065],[-8544018.775999999,6376090.883500002],[-7882559.1197999995,6376090.883500002]]]}] 例 4: インデックス 2 (値は 30) で評価: 2  | ||||||||||||
TrackWindow(<value1>, <value2>)  | 指定された時間のインデックスのジオメトリとすべての属性を表す値の配列を返します。 ウィンドウ関数を使用すると、時間を前後に移動できます。 
  | MyField は、[10, 20, 30, 40, 50] の値、および objectID、globalID、instant_datetime フィールドの値を順番に並べ替えました。 フィーチャのジオメトリは [{x: 1, y: 1},{x: 2, y: 2} ,{x: null, y: null},{x: 4, y: 4}, {x: 5, y: 5}] です。 式はトラッキングの各フィーチャで評価されます。 開始フィーチャを含め終了フィーチャを除外した結果が返されます。 例 1: TrackWindow(-1,0)[0] 例 2: geometry(TrackWindow(-1,0)[0]["x"]  | 例 1: 各フィーチャで評価されると、表には次の結果が表示されます。 
 例 2: インデックス 2 (値は 30) で評価: 2  | 
次の表のトラッキングを使用して、トラッキングの距離、速度、加速度を計算します。 これは、[モーションの統計量を計算 (Calculate Motion Statistics)] ツールで使用される計算と似ています。
距離の計算はメートル法、速度はメートル/秒、加速度はメートル/秒二乗ですべて計算されます。 距離は測地距離を使用して計測されます。
| 関数 | 説明 | 
|---|---|
TrackCurrentDistance()  | 最初の観測から現在の観測までの移動距離の合計。  | 
TrackDistanceAt(value)  | 最初の観測から現在の観測までの移動距離の合計に特定の値を加算。  | 
TrackDistanceWindow(value1, value2)  | 最初の観測 (0) についてのウィンドウ内の最初の値 (含まれる) から最後の値 (含まれない) までの距離。  | 
TrackCurrentSpeed()  | 前の観測から現在の観測までの速度。  | 
TrackSpeedAt(value1)  | 現在の観測を基準とした観測時の速度。 たとえば、値 2 では、現在から 2 観測後の観測時の速度です。  | 
TrackSpeedWindow(value1, value2)  | 最初の観測 (0) についてのウィンドウ内の最初の値 (含まれる) から最後の値 (含まれない) までの速度値。  | 
TrackCurrentAcceleration()  | 前の観測から現在の観測までの加速度。  | 
TrackAccelerationAt(value1)  | 現在の観測を基準とした観測時の加速度。  | 
TrackAccelerationWindow(value1, value2)  | 最初の観測 (0) についてのウィンドウ内の最初の値 (含まれる) から最後の値 (含まれない) までの加速度値。  | 
距離、速度、加速度の計算例は、次の図の例を使用します。

| 関数 | 結果例 | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
TrackCurrentDistance()  | 
  | ||||||||||||||
TrackDistanceAt(2)  | 
  | ||||||||||||||
TrackDistanceWindow(-1, 2)  | 
  | ||||||||||||||
TrackCurrentSpeed()  | 
  | ||||||||||||||
TrackSpeedAt(2)  | 
  | ||||||||||||||
TrackSpeedWindow(-1, 2)  | 
  | ||||||||||||||
TrackCurrentAcceleration()  | 
  | ||||||||||||||
TrackAccelerationAt(2)  | 
  | ||||||||||||||
TrackAccelerationWindow(-1, 2)  | 
  |