ArcGIS Arcade は、移植可能な軽量で安全な条件式言語であり、数学的計算を実行したり、テキストを操作したり、論理ステートメントを評価したりすることができます。 複数ステートメントの条件式、変数、およびフロー制御ステートメントもサポートします。 Arcade を他の条件式言語およびスクリプト言語に対して特に独自なものにしているのは、フィーチャおよびジオメトリのデータ タイプを含んでいることです。 Arcade の一般的なユース ケースは、レイヤー フィールドおよびジオメトリを使用した計算の実行です。
使用上の注意
Arcade 式を使用する際は、次の点に留意してください。
- Arcade 条件式は、[インシデントの検出]、[フィールド演算]、[条件式によるフィルター処理]、[フィールドの割り当て]、[フィーチャの結合]、[バッファーの作成]、および [トラッキングの再構築] ツールでサポートされています。
- 条件式には、入力フィードおよびソースからの属性と、条件式が構成されている解析を記述する値を組み込むことができます。
- 式の設定ウィンドウでは、プロファイル変数を展開して、フィールド、時間値、ターゲット フィールド、および結合フィールドのリストを表示できます。 ArcGIS Velocity の式は、次のプロファイル変数を利用します。
- $feature - [フィーチャの結合] を除くすべてのツールで、この変数にはフィードおよびソースからの受信フィーチャの属性フィールドが含まれています。 この変数からフィールドを選択することで、フィーチャの属性値を利用する式を作成できます。
- $analytic - この変数には、$analytic.AnalyticStartTime や $analytic.AnalyticLastEndTime など、解析に固有の値が含まれています。
- これらの解析の変数値をエポック整数 (1646409900000) から日付に変換するには、Arcade の Date() 関数を使用します。 詳細については、ArcGIS Arcade ドキュメントの「日付関数」をご参照ください。
- $target - [フィーチャの結合] ツールの [結合条件] 式に向けて、このプロファイル変数にはターゲット フィードまたはソースからの属性フィールドが含まれています。
- $join - [フィーチャの結合] ツールの [結合条件] 式に向けて、このプロファイル変数には結合ソースからの属性フィールドが含まれています。
- Arcade 条件式ビルダーで、フィールドやスキーマ コンポーネントにアクセスします。
- [プロファイル変数] ウィンドウで、そのカテゴリ (例: $feature、$analytic、$target、$join) に関連するスキーマのフィールド、変数、およびコンポーネントにアクセスできます。
- その変数に関連するフィールドや変数が表示されます。
- Arcade 条件式をテストするために独自のサンプル値を指定します。
- Arcade には、受信スキーマに応じて、各ツールのデフォルトのサンプル値が用意されています。 各ツールの式の作成中に、サンプル値を更新することができます。
- Arcade 条件式のテストに使用するサンプル値を調整するには、次の手順を実行します。
- 受信スキーマに応じて、Arcade 式をクリックして編集する場合は、[Arcade 式の構成] ウィンドウが開きます。
- [$feature] タブで、受信フィールドごとに、そのデータ タイプに基づいてサンプル値が表示されることに注意してください。 たとえば、すべての文字列フィールドに「Pacific」というサンプル値があります。 さまざまなデータセットに対して有効な式を作成してテストするには、Arcade 式で式を評価し、式が返す正しいデータ タイプを返すように、フィールドに指定するサンプル値を変更する必要があります。
- Arcade 式のテストおよび評価でサンプル値を使用する場合は、サンプル値を調整します。
- [Arcade 式の構成] ウィンドウの左上の [実行] をクリックして、Arcade 式を実行します。 更新されたサンプル データに基づいて式による評価が行われます。
- NULL と 0 を処理する Arcade 条件式を構築します。
- 数学演算で、Arcade 条件式言語は NULL 値を 0 として評価します。 このため、ArcGIS Velocity の Arcade 数式は、データ内の NULL 値を考慮して作成する必要があります。
- NULL 値を処理して、データ内の NULL 値を考慮します。 式 $feature.DistanceToFeature <= 5 を検討してみます。 $feature.DistanceToFeature != null && $feature.DistanceToFeature <= 5 などの NULL を処理するには、この式を Arcade 言語で構築する必要があります。 これらの式で、<= 5 は数学演算であり、DistanceToFeature フィールド値が NULL の場合は 0 と評価され、式を通過します。
数学演算子および数学関数の例
式は、数値を数学的に処理することができます。 以下の表は、使用可能な演算のサンプルを示しています。 Arcade での数学演算の詳細については、「数学関数」をご参照ください。
演算子 | 説明 | 例 | 結果 |
a + b | a 足す b。 | fieldname には、1.5 の値が含まれています $target["fieldname"] + 2.5 | 4.0 |
a - b | a 引く b。 | fieldname には、3.3 の値が含まれています $target["fieldname"]- 2.2 | 1.1 |
a * b | a 掛ける b。 | fieldname には、2.0 の値が含まれています $join["fieldname"] * 2.2 | 4.4 |
a / b | a 割る b。 | fieldname には、4.0 の値が含まれています $join["fieldname"] / 1.25 | 3.2 |
abs( a ) | a. の絶対値 (正の値) を返します。 | fieldname には、-1.5 の値が含まれています abs($target["fieldname"]) | 1.5 |
log( a ) | a の自然対数 (底を e とする) を返します。 | fieldname には、1 の値が含まれています log($join["fieldname"]) | 0 |
sin( a ) | a の正弦が返されます。 入力の角度の単位はラジアンです。 | fieldname には、1.5707 の値が含まれています sin($target["fieldname"]) | 1 |
cos( a ) | a の余弦が返されます。 入力の角度の単位はラジアンです。 | fieldname には、0 の値が含まれています cos($join["fieldname"]) | 1 |
tan( a ) | a の正接が返されます。 入力の角度の単位はラジアンです。 | fieldname には、0 の値が含まれています tan($target["fieldname"]) | 0 |
sqrt( a ) | a の平方根を返します。 | fieldname には、9 の値が含まれています sqrt($join["fieldname"]) | 3 |
min( a, b ) | a と b のうちの小さい方の数値を返します。 | fieldname には、1.5 の値および -3 の値が含まれています min($join["fieldname"], -3) | -3 |
max( a, b ) | a と b のうちの大きい方の数値を返します。 | fieldname1 には、1.5 の値、fieldname2 には -3 の値が含まれています max($target["fieldname1"], $join["fieldname2"]) | 1.5 |
constrain(<value>,<low>,<high>) | 入力値が制限範囲内にある場合、入力値を返します。 入力値が下限値よりも小さい場合、下限値を返します。 入力値が上限値よりも大きい場合、上限値を返します。 | constrain($target["distance"], 0, 10) constrain($join['Store dist'], 6, distance) | distance が 0 よりも小さい場合は 0 を返し、distance が 10 よりも大きい場合は 10 を返し、それ以外の場合は distance を返します。 Store dist が 6 よりも小さい場合は 6 を返し、Store dist が distance よりも大きい場合は distance を返し、それ以外の場合は Store dist を返します。 |
次の結合条件式の乗算の例では、ターゲット データセットのフィールドを使用しています。
$target["Distance"] * 2 > $join["DistField"]
テキスト関数の例
Arcade 条件式は、テキストを処理できます。 以下の表は、使用可能な演算のサンプルを示しています。 Arcade のテキスト関数の詳細については、「テキスト関数」をご参照ください。
演算子 | 説明 | 例 | 結果 |
concatenate(<values>, <separator>) | 値を 1 つに連結して、文字列を返します。
| fieldname の値が、ArcGIS Velocity の場合 concatenate([$target["fieldname"], "is", "great!"], ' ') | ArcGIS Velocity is great! |
find(<searchText>, <text>, <startPos>) | 文字列内の文字列を検索します。 ワイルドカードはサポートされていません。
| fieldname1 には、14NorthStreet の値、fieldname2 には North の値が含まれています find($target["fieldname2"], $join["fieldname1"]) | 2 |
lower(<value>) | 文字列を小文字にします。
| fieldname の値が、ANALYTICS の場合 lower($join["fieldname"]) | 解析 |
次のテキストの例では、find および lower を使用します。
find(("north"), lower("146NorthStreet")) == False
日付関数の例
Arcade は、日付を処理できます。 Arcade では、月は 0 (1 月) ~ 11 (12 月)、日は 1 ~ 31、時は 0 (午前 12 時 00 分) ~ 23 (午後 11 時 00 分)、分と秒は 0 ~ 59、ミリ秒は 0 ~ 999 の範囲の値を取ります。
以下の表は、使用可能な演算のサンプルを示しています。 Arcade の日付関数の詳細については、「日付関数」をご参照ください。
演算子 | 説明 | 例 | 結果 |
date( <value>, <month>, <day>, <hour>, <minute>) | 値または値のセットを構文解析して日付文字列に変換します。
| fieldname の値が、1476987783555 の場合 例 1: Date($target["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($join["fieldname"]) 例 2: fieldname は、2012-09-27 の値を持つ ISO 8601 文字列として書式設定された文字列フィールドです 例 3: fieldname は、Year(Date($target["fieldname"])) の値を持つ ISO 8601 文字列として書式設定された文字列フィールドです | 例 1: 2017 例 2: 2012 |
条件付き演算子
条件付きステートメントでは、以下の演算子を使用できます。
演算子 | 説明 | 例 | 結果 |
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 |
次のバッファー条件式の例では、高度な関数と条件を使用しています。
iif(field1 > field2, iif(field2 = 0, field3, field4), 0)
以下に、結合条件式の乗算の例を示します。
iif(field1 > field2, iif(field2 = 0, field3, field4), 0) > $join["Distance"] * 2
論理演算子の例
条件付き演算子に加えて、高度な論理演算子を使用して、下記の表に示されているような条件式を作成することもできます。 Arcade の論理関数の詳細については、「論理関数」をご参照ください。
関数 | 説明 | 例 | 結果 |
iif(<condition>,<true value>,<false value>) | 条件が True と評価されると 1 つの値を返し、同条件が False と評価されると別の値を返します。 <True の値> および <False の値> には、以下を使用できます。
| 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>) | 1 つの条件式が 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) | conditional val の field1 + 3 と case1 の field1 の間の等式を比較します。 True の場合は 1 を返します。 False の場合は、field1 + 3 と field2 の間の等式を比較します。 True の場合は 2 を返し、そうでない場合は 0 を返します。 |