GeoAnalytics Tools 工具箱中提供多个工具以应用表达式。以下工具提供了应用表达式的选项:
此 GeoAnalytics Tools 可使用表达式,它具有不同的用法以及对应用表达式的限制。
重新构建轨迹和创建缓冲区
缓冲区表达式用于重新构建轨迹和创建缓冲区工具。
最常见的是使用常量或字段值输入缓冲区大小。但是,输入值并不是使用 GeoAnalytics Tools 指定缓冲区大小的唯一方法。某些情况下,您可能希望通过执行数学计算来设置缓冲区大小。您可以执行应用于所有记录的简单计算和高级计算。该计算会应用于所分析的每个要素。在 ArcGIS GeoAnalytics Server 上运行分析时会执行计算。
以下部分包含缓冲区表达式示例。
连接要素
连接要素工具中使用表达式,以指定连接条件。
某些情况下,您可能希望指定条件以选择应包含在连接中的要素。可以执行简单连接条件(例如 field a > field c)和高级条件。将针对每个要素对条件进行测试以确定分析内容。在 ArcGIS GeoAnalytics Server 上运行分析时会执行计算。
连接条件表达式可以使用简单计算和高级内置函数来创建条件。连接条件无法使用 as_distance 函数。连接条件的结果应始终为 true 或 false。
以下部分包含表达式示例。
简单计算
简单数学示例
重新构建轨迹和创建缓冲区工具可以通过数学方式处理数字。
创建连接条件时,连接要素工具可以使用数学运算。
运算符 | 说明 | 示例 | 结果 |
---|---|---|---|
| a 加 b | ["fieldname"] + 2.5 fieldname 包含数值 1.5 | 4.0 |
| a 减 b | ["fieldname"]- 2.2 fieldname 包含数值 3.3 | 1.1 |
| a 乘以 b | ["fieldname"] * 2.2 fieldname 包含数值 2.0 | 4.4 |
| a 除以 b | ["fieldname"] / 1.25 fieldname 包含数值 4.0 | 3.2 |
| 返回 a 的绝对(正)值。 | abs(["fieldname"]) fieldname 包含数值 -1.5 | 1.5 |
| 返回 a 的自然对数(以 e 为底)。 | log(["fieldname"]) fieldname 包含数值 1 | 0 |
| 返回 a 的三角正弦值。假设输入为以弧度为单位的角。 | sin(["fieldname"]) fieldname 包含数值 1.5707 | 1 |
| 返回 a 的三角余弦值。假设输入为以弧度为单位的角。 | cos(["fieldname"]) fieldname 包含数值 0 | 1 |
| 返回 a 的正切值。假设输入为以弧度为单位的角。 | tan(["fieldname"]) fieldname 包含数值 0 | 0 |
| 返回 a 的平方根。 | sqrt(["fieldname"]) fieldname 包含数值 9 | 3 |
| 返回 a 和 b 间的最小数值。 | min("fieldname", -3) fieldname 包含数值 1.5 和 -3 | -3 |
| 返回 a 或 b 间的最大数值。 | max("fieldname1", "fieldname2") fieldname1 包含数值 1.5,fieldname2 包含数值 -3 | 1.5 |
缓冲区表达式的乘法示例
["Distance"] * 2
连接条件表达式的乘法示例
["Distance"] * 2 > 5
GeoAnalytics Tools 的内置函数
As distance 函数示例
as distance 函数将数值转换为线性距离,然后将其用于数学表达式中。
重新构建轨迹和创建缓冲区工具可以使用 as distance 函数。如果使用数值,而未使用 as distance 函数,则系统将假定单位为米。
连接要素工具无法使用 as distance 函数。
函数 | 说明 | 示例 | 结果 |
---|---|---|---|
as_meters( <value> ) | 应用假设输入值以米为单位的计算。 | as_meters( ["fieldname"] ) as_meters(150) | 结果按 150 米进行缓冲。 |
as_kilometers( <value> ) | 应用假设输入值以千米为单位的计算。 | as_kilometers( ["fieldname"] ) as_kilometers(150) | 结果按 150 千米进行缓冲。 |
as_feet( <value> ) | 应用假设输入值以英尺为单位的计算。 | as_feet( ["fieldname"] ) as_feet(150) | 结果按 150 英尺进行缓冲。 |
as_yards( <value> ) | 应用假设输入值以码为单位的计算。 | as_yards( ["fieldname"] ) as_yards(150) | 结果按 150 码进行缓冲。 |
as_nautical_miles( <value> ) | 应用假设输入值以海里为单位的计算。 | as_nautical_miles( ["fieldname"] ) as_nautical_miles(150) | 结果按 150 海里进行缓冲。 |
as_miles( <value> ) | 应用假设输入值以英里为单位的计算。 | as_miles( ["fieldname"] ) as_miles(150) | 结果按 150 英里进行缓冲。 |
为每个要素乘以字段 Distance(假设以千米为单位),然后为缓冲区表达式加上 10 米。
as_kilometers(["Distance"]) * 3 + as_meters(10)
GeoAnalytics Tools 缓冲区表达式的高等内置函数
除简单的数学表达式外,还可将更多高等函数应用于缓冲区表达式和连接条件。
重新构建轨迹和创建缓冲区工具可以使用高级函数。
创建连接条件时,连接要素工具可以使用高级运算。
函数 | 说明 | 示例 | 结果 |
---|---|---|---|
constrain(<value>,<low>,<high>) | 如果结果在限制范围内,则返回输入值。如果该值小于低值,则返回低值。如果该值大于高值,则返回高值。 | constrain( distance, 0, 10) constrain(['Store dist'], 6, distance) | 如果 distance 小于 0,则返回 0,如果 distance 大于 10,则返回 10,其余情况下返回 distance。 如果 Store dist 小于 6,则返回 6,如果 Store dist 大于 distance,则返回 distance,其余情况下返回 Store dist。 |
iff(<condition>,<true value>,<false value>) | 如果条件的求值结果是 true,则返回一个值,如果条件的求值结果是 false,则返回其他值。 <true value> 和 <false value> 可为以下内容:
| iff(field1 > field2, field1, 0) iff(field1 > field2, iff(field2 = 0, field3, field4), 0) | 如果 field1 大于 field2,则返回 field1,其余情况下返回 0。 如果 field1 大于 field2,则返回第二个 iff 函数的结果,其余情况下返回 0。 |
when(<expression1>, <result1>, <expression2>, <result2>, ... , <expressionN>, <resultN>, <default>) | 依次对一系列表达式执行求值,直到求值结果为 true。
| when((field1 + 10) > 1, 1,(field2 + 10) > 2 , 2, field3) | 如果 field1 + 10 大于 1,则返回 1。否则,检查 field2 + 10 是否大于 2。如果是,则返回 2。否则,将返回 field3。 |
decode(<conditional val> , <case1> , <result1>, <case2>, <result2>, ... <caseN>, <resultN>, <defaultValue> ) | decode 函数将对表达式进行求值并将其值与后续参数进行比较。如果表达式匹配,则返回下一个参数值。如果均不匹配,则可以选择将最后一个参数作为默认返回值。
| decode(field1 + 3 , field1, 1, field2, 2, 0) | 比较条件 val field1 + 3 和 case1 field1 是否相等。如果 true,则返回 1。如果 false,则比较 field1 + 3 和 field2 是否相等。如果 true,则返回 2;否则,返回 0。 |
条件语句可使用以下运算符:
运算符 | 说明 | 示例 | 结果 |
---|---|---|---|
| a 大于 b a 小于 b | 10 > 2 | False |
| a 大于或等于 b a 小于或等于 b | abs(-10) >= 10 | True |
| a 不等于 b | abs(-3) != -3 | True |
| a 等于 b | abs(-5) == 5 | True |
| 满足条件一或条件二 | (abs(-5) == 5) OR (10 > 2) | True |
| 满足条件一和条件二 | (abs(-5) == 5) AND (10 < 2) | False |
使用高级函数和条件的缓冲区表达式示例
iff(field1 > field2, iff(field2 = 0, field3, field4), 0)
连接条件的乘法示例
iff(field1 > field2, iff(field2 = 0, field3, field4), 0) > ["Distance"] * 2