追加数据工具中所使用的表达式可使用追加图层字段值来计算输入图层字段。 如果不从追加图层中追加字段,请使用表达式来指定每个要素的填充方式。 追加数据表达式生成的值类型应该与字段类型相同。 以下部分包含表达式示例。
追加数据工具是在 10.6.1 中引入的,并且可以使用 Arcade 表达式来追加字段值。 在使用 Arcade 的情况下,字段名称的格式为 $feature["field name"] 或 $feature.fieldname。 如果字段名称包含一个空格,则需要第一个选项 $feature["field name"]。 以下所有示例都使用此选项。
以下工具在 GeoAnalytics Server 中使用 Arcade 表达式:
旧版本:
ArcGIS GeoAnalytics Server 扩展模块在 ArcGIS Enterprise 中处于弃用状态。 GeoAnalytics Server 的最终版本包含在 ArcGIS Enterprise 11.3 中。 可通过 ArcGIS Enterprise 11.3 及较早版本获取这些工具。
数学运算和函数示例
表达式能够利用数学方式处理数字。 下表显示了可用运算示例。
运算符 | 说明 | 示例 |
---|---|---|
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。 |
文本函数示例
追加数据表达式可以处理文本。 下表显示了可用运算示例。
运算符 | 说明 | 示例 | 结果 |
---|---|---|---|
concatenate(<values>, <separator>) | 将值连接在一起,然后返回字符串。
| 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 中,月份值范围从 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($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,则返回一个值,如果条件评估为 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,则返回第二个 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 |