フィーチャの結合 (Join Features) の条件式

[フィーチャの結合 (Join Features)] ツールは、Arcade 条件式を使用して、結合条件を指定します。場合によっては、結合に含めるフィーチャを選択するため、条件を指定したいことがあります。単純な結合条件のほか (「field a > field c」 など)、高度な条件を指定することもできます。条件は各フィーチャに対してテストされ、解析するフィーチャを決定します。ArcGIS GeoAnalytics Server 上で解析が実行される際に、計算が実行されます。

ArcGIS Enterprise 10.6 以降では、条件式は Arcade を使用して書式設定されます。Arcade を使用して、[フィーチャの結合 (Join Features)] のフィールド名が $target["field name"] および $join["field name"] または $target.fieldname および $jon.fieldname として書式設定されます。フィールド名にスペースが含まれる場合には、最初のオプション $target["field name"] および $join["field name"] が必要となります。下記のすべての例は、このオプションを使用しています。

注意:
[フィーチャの結合 (Join Features)] には、ターゲット レイヤーと結合レイヤーの 2 つの入力が必要です。このため、[フィーチャの結合 (Join Features)] の Arcade 条件式では、使用されているデータセットの概要を記述する必要があります。たとえば、field1 という名前のターゲット レイヤー内のフィールドが、field2 という名前の結合レイヤーのフィールドよりも大きいかどうかを計算する操作は、$target["field1"] > $join["field2"] で表されます。これは、形式 $feature["fieldname"] を使用する他の GeoAnalytics Tools の条件式とは異なります。

Arcade 条件式の詳細

Arcade 条件式は、GeoAnalytics Server において、次のツールによって使用されます。

数学演算子および数学関数の例

条件式は、数値を数学的に処理することができます。次の表は、使用可能な演算の例を示しています。

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 distdistance よりも大きい場合は distance を返し、それ以外の場合は Store dist を返します。

ターゲット データセットのフィールドを使用した結合条件式の乗算の例。

$target["Distance"] * 2 > $join["DistField"]

テキスト関数の例

[フィーチャの結合 (Join Features)] の条件式は、テキストを処理できます。次の表は、使用可能な演算の例を示しています。

Arcade で使用できるテキスト関数の詳細

演算子説明結果

concatenate( <values>, <separator>)

値を 1 つに連結して、文字列を返します。

  • values - 連結する文字列値の配列です。
  • separator (オプション) - values パラメーターが配列の場合、連結に使用する区切り文字です。または、最初のパラメーターに単一値が指定された場合は、連結対象の文字列です。 指定されない場合、空になります。

fieldname には、GeoAnalytics の値が含まれています。

Concatenate ([$target["fieldname"], "is", "great!"], ' ')

GeoAnalytics is great!

find(<searchText>, <text>, <startPos>)

文字列内の文字列を検索します。 ワイルドカードはサポートされていません。

  • searchText - 検索対象のサブ文字列です。
  • text - 検索対象のテキストです。
  • startPos (オプション) - 検索元となる文字列内の場所のゼロベースのインデックスです。

fieldname1 には 14NorthStreet の値が含まれており、fieldname2 には North の値が含まれています。

find($target["fieldname2"], $join["fieldname1"])

2

lower(<value>)

文字列を小文字にします。

  • value - 小文字にする文字列です。

fieldname には、GEOANALYTICS の値が含まれています。

lower($join["fieldname"])

geoanalytics

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 では、GeoAnalytics Server の場所の時刻値が返されます。

演算子説明結果

date(<value>, <month>, <day>, <hour>, <minute>)

値または値のセットを構文解析して日付文字列に変換します。

  • value (オプション) - 1970 年 1 月 1 日 (UTC) からのミリ秒単位の数値または年を表す数値のいずれか。 年が指定された場合は、月と日も後続のパラメーターで指定される必要があります。 この値は、日付文字列または日付に変換される ISO 8601 文字列にすることもできます。
  • month (オプション) - 月 (0-11) です (0 は 1 月、11 は 12 月)。
  • day (オプション) - 日付 (1-31) です。
  • hour (オプション) - 1 日の時刻 (0-23) です。
  • minute (オプション) - 分 (0-59) です。
  • second (オプション) - 秒 (0-59) です。
  • millisecond (オプション) - ミリ秒 (0-999) です。

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>)

ある日付から別の日付を減算して、その差を指定の単位で返します。

  • date1 - 2 つ目の日付を減算する日付値です。
  • date2 - 1 つ目の所定の日付から減算する日付値です。
  • units (オプション) - 指定された 2 つの日付の差を返すときに使用される単位です。 サポートされている単位のタイプは、millisecondssecondsminuteshoursdaysmonthsyears です。 デフォルト値は milliseconds です。

例 1: DateDiff(Date(2017,1,14,0), Date())

例 2: DateDiff(Date(2017,1,14,0), Date(), "Years")

結果は、このコマンドをいつ実行するかによって変わります。

例 1: -20532129137

例 2: -0.6546783768647119

Year(<dateValue>)

所定の年を返します。

  • value - 年を特定する日付の値。

例 1: fieldname は、09 Oct 2017 04:30:43 pm の値を含む Date タイプのフィールドです

Year($join["fieldname"])

例 2: fieldname は、2012-09-27 の値を含む ISO 8601 文字列として書式設定された文字列フィールドです

例 2: 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

論理演算子の例

条件付き演算子に加えて、高度な論理演算子を使用してフィーチャを結合することもできます。

Arcade で使用できる論理関数の詳細

関数説明結果

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 distdistance よりも大きい場合は distance を返し、それ以外の場合は Store dist を返します。

iif(<condition>,<true value>,<false value>)

条件が true と評価されると 1 つの値を返し、同条件が false と評価されると別の値を返します。

<true value> および <false value> は、次の値にすることができます。

  • 数値フィールド。 フィールド名にスペースがある場合は、角括弧を使用します。
  • 数値。
  • 関数。

iif($target["field1"] > $join["field2"], $join["field1"], 0)

iif($target["field1"] > $join["field2"], iif($target["field2"] = 0, $join["field3"], $target["field4"]), 0)

field1field2 よりも大きい場合は field1 を返し、そうでない場合は 0 を返します。

field1field2 よりも大きい場合は 2 番目の iif 関数の結果を返し、そうでない場合は 0 を返します。

when(<expression1> , <result1> , <expression2> , <result2> , ... , <expressionN> , <resultN>, <default>)

式が true と評価されるまで、一連の式を順次評価します。

  • expression - 式。
  • result - 式の結果。 数値またはフィールドにすることができます。
  • default - どの式も一致しない場合のオプションの値。

when(($target["field1"] + 10) > 1, 1,($join["field2"] + 10) > 2 , 2, $target["field3"])

field1 + 10 が 1 よりも大きい場合、1 を返します。 そうでない場合、field2 + 10 が 2 よりも大きいかどうかをチェックします。 大きい場合は 2 を返します。 そうでない場合は field3 を返します。

decode(<conditional val> , <case1> , <result1>, <case2>, <result2>, ... <caseN>, <resultN>, <defaultValue> )

式を評価し、その値を以降のパラメーターと比較します。 式が一致した場合、次のパラメーター値を返します。 何も一致しない場合、最後のパラメーターがデフォルトの戻り値になるオプションがあります。

  • conditional val - 条件値。 フィールドにすることも式にすることもできます。
  • case - conditional val と比較される値。
  • result - 対応するケースが conditional val と一致する場合の結果。
  • defaultValue - 他の値が true でない場合のオプションの値。

decode($target["field1"] + 3 , $join["field1"], 1, $target["field2"], 2, 0)

条件付き val の field1 + 3 と case1 の field1 の間の等式を比較します。 true の場合は 1 を返します。 false の場合は、field1 + 3field2 の間の等式を比較します。 true の場合は 2 を返し、そうでない場合は 0 を返します。

関連トピック