“追加数据”表达式
追加数据 工具中所使用的表达式可使用追加图层字段值来计算输入图层字段。 如果不从追加图层中追加字段,请使用表达式来指定每个要素的填充方式。 追加数据 表达式生成的值类型应该与字段类型相同。 以下部分包含表达式示例。
追加数据 工具是在 10.6.1 中引入的,并且可以使用 Arcade 表达式来追加字段值。 在使用 Arcade 的情况下,字段名称的格式为 $feature["field name"] 或 $feature.fieldname 。 如果字段名称包含一个空格,则需要第一个选项 $feature["field name"] 。 以下所有示例都使用此选项。
了解有关 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
$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 。
|
文本函数示例
追加数据 表达式可以处理文本。 下表显示了可用运算示例。
了解有关 Arcade 中的文本函数的详细信息
|
运算符
|
说明
|
示例
|
结果
|
|
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 位置的时间值。
了解有关 Arcade 中的日期函数的详细信息
|
运算符
|
说明
|
示例
|
结果
|
|
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($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> )
|
将对表达式进行评估,并将其值与后续参数进行比较。 如果表达式匹配,则返回下一个参数值。 如果均不匹配,则可以选择将最后一个参数作为默认返回值。
conditional val - 条件值。 可以为字段或表达式。
case - 要与 conditional val 进行对比的值。
result - 相应实例与 conditional val 匹配时的结果。
defaultValue - 其他值均不是 true 时的可选值。
|
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
|