“连接要素”表达式
连接要素 工具使用 ArcGIS Arcade 表达式来指定连接条件。 某些情况下,您可能希望指定条件以选择应包含在连接中的要素。 可以执行简单连接条件(例如 field a > field c)和高级条件。 将针对每个要素对条件进行测试以确定分析内容。 在 ArcGIS GeoAnalytics Server 上运行分析时会执行计算。
在 ArcGIS Enterprise 10.6 及更高版本中,可以使用 Arcade 设置表达式格式。 在 Arcade 中,将连接要素 中的字段名称格式设置为 $target["field name"] 和 $join["field name"] 或者 $target.fieldname 和 $join.fieldname。 如果字段名称包含一个空格,则需要使用第一个选项($target["field name"] 和 $join["field name"])。 以下所有示例都使用此选项。
注:
连接要素 需要两个输入,即目标图层和连接图层。 相应地,连接要素 中的任何 Arcade 表达式必须概述正在使用的数据集。 例如,计算目标图层中名为 field1 的字段是否大于连接图层中名为 field2 的字段,上述操作可表达为 $target["field1"] > $join["field2"]。 这不同于其他 GeoAnalytics 工具中使用 $feature["fieldname"] 格式的表达式。
了解有关 Arcade 表达式的详细信息
以下工具在 GeoAnalytics Server 中使用 Arcade 表达式:
旧版本:
即将在 ArcGIS Enterprise 中弃用 ArcGIS GeoAnalytics Server 扩展模块。 GeoAnalytics Server 的最终版本 已随 ArcGIS Enterprise 11.3 一同发布。 可通过 ArcGIS Enterprise 11.3 及更低版本访问这些工具。
数学运算符和函数示例
表达式能够利用数学方式处理数字。 下表显示了可用运算示例:
了解有关 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 中文本函数的详细信息
运算符
说明
示例
结果
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 中的日期函数的详细信息
在 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>)
将值或值集解析成日期字符串。
value(可选)- 自 1970 年 1 月 1 日 (UTC) 以来的毫秒数,或者代表年的数字。 如果指定了某一年,则也必须在后续参数中提供月和日。 此值可以是日期字符串或是要转换成日期的 ISO 8601 字符串。
month(可选)- 月份 (0-11),其中 0 是一月,11 是十二月。
day(可选)- 一个月中的某天 (1-31)。
hour(可选)- 一天中的某小时 (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>)
将两个日期相减,并以指定的单位返回差值。
示例 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 的 Date 类型的字段
Year($join["fieldname"])
示例 2:fieldname 是一个 ISO 8601 字符串格式的字符串字段,值为 2012-09-27
示例 2:fieldname 是一个 ISO 8601 字符串格式的字符串字段,值为 Year(Date($target["fieldname"]))
示例 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 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,则返回 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 + 3 和 field2 是否相等。 如果为 true,则返回 2;否则,返回 0。