连接要素工具使用 Arcade 表达式来指定连接条件。某些情况下,您可能希望指定条件以选择应包含在连接中的要素。可以执行简单连接条件(例如 field a > field c)和高级条件。将针对每个要素对条件进行测试以确定分析内容。在 ArcGIS GeoAnalytics Server 上运行分析时会执行计算
在 ArcGIS Enterprise 10.6 及更高版本中,表达式使用 Arcade 进行格式化。使用 Arcade,将“连接要素”中的字段名称格式设置为 $target["field name"] 和 $join["field name"] 或者 $target.fieldname 和 $jon.fieldname。如果字段名称包含一个空格,则需要使用第一个选项($target["field name"] 和 $join["field name"])。以下所有示例都使用此选项。
注:
连接要素需要两个输入,即目标图层和连接图层。相应地,连接要素中的任何 Arcade 表达式必须概述正在使用的数据集。例如,计算名称为 field1 的目标图层中的字段是否大于名称为 field2 的连接图层中的字段,上述操作可表达为 $target["field1"] > $join["field2"]。这不同于其他使用 $feature["fieldname"] 格式的 GeoAnalytics 工具 中的表达式。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 dist 大于 distance,则返回 distance,其余情况下返回 Store dist。  | 
使用目标数据集中字段的连接条件表达式的乘法示例。
$target["Distance"] * 2 > $join["DistField"]文本函数示例
连接条件表达式能够处理文本。下表显示了可用运算示例。
| 运算符 | 说明 | 示例 | 结果 | 
|---|---|---|---|
concatenate( <values>, <separator>)  | 将值连接在一起,然后返回字符串。 
  | fieldname 包含值 GeoAnalytics Concatenate ([$target["fieldname"], "is", "great!"], ' ')  | GeoAnalytics is great!  | 
find(<searchText>, <text>, <startPos>)  | 在字符串中查找某一字符串。不支持通配符。 
  | fieldname1 包含值 14NorthStreet,fieldname2 包含值 North find($target["fieldname2"], $join["fieldname1"])  | 2  | 
lower(<value>)  | 将字符串转换为小写形式。 
  | fieldname 包含值 GEOANALYTICS lower($join["fieldname"])  | geoanalytics  | 
使用 find 和 lower 的文本示例。
find(("north"), lower("146NorthStreet")) == False日期函数示例
连接表达式能够处理日期。下表显示了可用运算示例。
在 Arcade 中,月份值范围从 0(1 月)到 11(12 月)、日期从 1 到 31、小时从 0(上午 12:00)到 23(下午 11:00)、分和秒从 0 到 59 以及毫秒从 0 到 999。Arcade 日期返回您的 GeoAnalytics Server 所在位置处的时间值。
| 运算符 | 说明 | 示例 | 结果 | 
|---|---|---|---|
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 是一个类型为 Date 值为 09 Oct 2017 04:30:43 pm 的字段 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  | 
逻辑运算符示例
除了条件运算符之外,还可以使用更高级的逻辑运算符来连接要素。
| 函数 | 说明 | 示例 | 结果 | 
|---|---|---|---|
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。  | 
iif(<condition>,<true value>,<false value>)  | 如果条件评估为 true,则返回一个值,如果条件评估为 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)  | 如果 field1 大于 field2,则返回 field1,其余情况下返回 0。 如果 field1 大于 field2,则返回第二个 iif 函数的结果,其余情况下返回 0。  | 
when(<expression1> , <result1> , <expression2> , <result2> , ... , <expressionN> , <resultN>, <default>)  | 按顺序评估一系列表达式,直至一个表达式评估为 true。 
  | 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> )  | 将对表达式进行评估,并将其值与后续参数进行比较。如果表达式匹配,则返回下一个参数值。如果均不匹配,则可以选择将最后一个参数作为默认返回值。 
  | decode($target["field1"] + 3 , $join["field1"], 1, $target["field2"], 2, 0)  | 比较条件 val field1 + 3 和 case1 field1 是否相等。如果 true,则返回 1。如果 false,则比较 field1 + 3 和 field2 是否相等。如果 true,则返回 2;否则,返回 0。  |