GeoAnalytics 工具集 工具箱中提供以下工具以应用表达式:
使用表达式的 GeoAnalytics 工具集 具有不同的目的,并且会限制表达式的应用对象。在 ArcGIS 10.6 版本中,GeoAnalytics 中使用的所有表达式都支持 Arcade。
重新构建轨迹和创建缓冲区
缓冲区表达式用于重新构建轨迹和创建缓冲区工具。
常见的是使用常量或字段值输入缓冲区大小。但是,输入值并不是使用 GeoAnalytics 工具集 指定缓冲区大小的唯一方法。某些情况下,您可能希望通过执行数学计算来设置缓冲区大小。该计算会应用于每个分析要素。在 ArcGIS GeoAnalytics Server 上运行分析时会执行计算。
以下部分包含缓冲区表达式示例。
数学运算符和函数示例
缓冲区表达式将以数学方式处理数字。下表显示了可用运算的示例。
运算符 | 说明 | 示例 | 结果 |
---|---|---|---|
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>) | 如果输入值在限制范围内,则返回输入值。如果输入值小于低值,则返回低值。如果输入值大于高值,则返回高值。 | constrain($feature["distance"], 0, 10) constrain($feature['Store dist'], 6, distance) | 如果 distance 小于 0,则返回 0,如果 distance 大于 10,则返回 10,其余情况下返回 distance。 如果 Store dist 小于 6,则返回 6,如果 Store dist 大于 distance,则返回 distance,其余情况下返回 Store dist。 |
缓冲区表达式的乘法示例
$feature["Distance"] * 2
As 距离函数示例
as distance 函数将数值转换为线性距离,然后将其用于数学表达式中。重新构建轨迹和创建缓冲区工具可以使用 as distance 函数。如果使用数值,而未使用 as distance 函数,则系统将假定单位为米。
函数 | 说明 | 示例 | 结果 |
---|---|---|---|
as_meters( <value> ) | 应用假设输入值以米为单位的计算。 | as_meters( $feature["fieldname"] ) as_meters(150) | 结果按 150 米进行缓冲。 |
as_kilometers( <value> ) | 应用假设输入值以千米为单位的计算。 | as_kilometers( $feature["fieldname"] ) as_kilometers(150) | 结果按 150 千米进行缓冲。 |
as_feet( <value> ) | 应用假设输入值以英尺为单位的计算。 | as_feet( $feature["fieldname"] ) as_feet(150) | 结果按 150 英尺进行缓冲。 |
as_yards( <value> ) | 应用假设输入值以码为单位的计算。 | as_yards( $feature["fieldname"] ) as_yards(150) | 结果按 150 码进行缓冲。 |
as_nautical_miles( <value> ) | 应用假设输入值以海里为单位的计算。 | as_nautical_miles( $feature["fieldname"] ) as_nautical_miles(150) | 结果按 150 海里进行缓冲。 |
as_miles( <value> ) | 应用假设输入值以英里为单位的计算。 | as_miles( $feature["fieldname"] ) as_miles(150) | 结果按 150 英里进行缓冲。 |
为每个要素乘以字段 Distance(假设以千米为单位),然后为缓冲区表达式加上 10 米。
as_kilometers($feature["Distance"]) * 3 + as_meters(10)
条件运算符
条件语句可使用以下运算符:
运算符 | 说明 | 示例 | 结果 |
---|---|---|---|
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 |
使用高级函数和条件的缓冲区表达式示例
iff(field1 > field2, iff(field2 = 0, field3, field4), 0)
连接条件的乘法示例
iff(field1 > field2, iff(field2 = 0, field3, field4), 0) > $join["Distance"] * 2
逻辑运算符示例
除了条件运算符之外,还可以使用如下表所示的更高级的逻辑运算符来创建缓冲区。
函数 | 说明 | 示例 | 结果 |
---|---|---|---|
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。 |
跟踪感知型示例
重新构建轨迹可以使用 Arcade 中的跟踪感知型方程,如下表所示:
函数 | 说明 | 示例 | 结果 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
TrackStartTime() | 计算轨迹的起始时间,以从新纪元开始的微秒为单位。 | 使用 2017 年 1 月 2 日起始的轨迹。 TrackStartTime() | 1483315200000 | ||||||||||||
TrackDuration() | 计算轨迹从起始到当前时间步长的持续时间,以微秒为单位。 | 使用 2017 年 1 月 2 日起始、当前时间为 2017 年 1 月 4 日的轨迹。 TrackDuration() | 172800000 | ||||||||||||
TrackCurrentTime() | 计算轨迹的当前时间。 | 使用发生于 2017 年 1 月 3 日 9:00 a.m. 的要素。 TrackCurrentTime() | 1483434000000 | ||||||||||||
TrackIndex | 返回正在计算的要素的时间索引。 | 根据轨迹中的第一个要素计算此值。 TrackIndex | 0 | ||||||||||||
TrackFieldWindow(<fieldName>, <startIndex>, <endIndex>) | 在指定字段中返回指定时间索引的值数组。window 函数可用于使时间前进和后退。将在轨迹中的每个要素处评估该表达式。
| MyField 具有按顺序排列的值 [10, 20, 30, 40, 50]。将在轨迹中的每个要素处评估该表达式。返回的结果包括起点要素,但不包括终点要素。 示例 1:TrackFieldWindow("MyField,-1,2) 示例 2:TrackFieldWindow("MyField,-2,0)[0] 示例 3:TrackFieldWindow("MyField,0,3)[2] | 示例 1:在每个要素处进行评估时,该表显示以下结果。
示例 2:在索引 2(值为 30)处进行评估时,将返回:10。 示例 3:在索引 2(值为 30)处进行评估时,将返回:50。 | ||||||||||||
TrackGeometryWindow(<startIndex>, <endIndex>) | 返回表示指定时间索引的几何的值数组。window 函数可用于使时间前进和后退。将在轨迹中的每个要素处评估该表达式。
| MyField 具有按顺序排列的值 [10, 20, 30, 40, 50]。要素的几何为 [{x: 1, y: 1},{x: 2, y: 2} ,{x: null, y: null},{x: 4, y: 4}, {x: 5, y: 5}]。将在轨迹中的每个要素处对表达式进行评估。返回的结果包括起点要素,但不包括终点要素。 示例 1:TrackGeometryWindow(-1,2) 示例 2:折线数据集上的 TrackGeometryWindow(0,1)[0] 示例 3:面数据集上的 TrackGeometryWindow(0,1)[0] 示例 4:查找上一个点的 X 值 TrackGeometryWindow(-1,0)[0]["x"] | 示例 1:在每个要素处进行评估时,该表显示以下结果。
示例 2:将通过以下格式返回折线: [{"paths":[[[-180,-22.88],[-177.6,-23.6]],[[180,-18.099999999999994],[179.7,-18.4],[179.4,-18.7],[178.9,-18.9],[178.5,-19.3],[178.2,-19.7],[178.4,-20],[178.8,-20.2],[178.9,-21.8],[179,-22.2],[179.4,-22.7],[180,-22.88]],[[-178,-17],[-178.8,-17.3],[-179.2,-17.5],[-179.6,-17.8],[-179.9,-18],[-180,-18.099999999999994]]]}] 示例 3:将通过以下格式返回面:[{"rings":[[[-7882559.1197999995,6376090.883500002],[-7893142.474300001,6042715.216800004],[-8544018.775999999,6045361.0554000065],[-8544018.775999999,6376090.883500002],[-7882559.1197999995,6376090.883500002]]]}] 示例 4:在索引 2(值为 30)处评估:2 | ||||||||||||
TrackWindow(<value1>, <value2>) | 返回表示指定时间索引的几何和所有属性的值数组。window 函数可用于使时间前进和后退。
| 除了 objectID、globalID 和 [10, 20, 30, 40, 50] 字段之外,MyField 还具有按顺序排列的值 instant_datetime。要素的几何为 [{x: 1, y: 1},{x: 2, y: 2} ,{x: null, y: null},{x: 4, y: 4}, {x: 5, y: 5}]。将在轨迹中的每个要素处对表达式进行评估。返回的结果包括起点要素,但不包括终点要素。 示例 1:TrackWindow(-1,0)[0] 示例 2:geometry(TrackWindow(-1,0)[0]["x"] | 示例 1:在每个要素处进行评估时,该表显示以下结果。
示例 2:在索引 2(值为 30)处评估:2 |