输入值或使用字段并不是通过 GeoAnalytics Tools 指定缓冲区大小的仅有方式。某些情况下,您可能希望通过执行数学计算设置缓冲区大小。您可以执行应用于所有记录的简单计算和高级计算。该计算会应用于每个要素。以下各部分包括使用缓冲区表达式的若干示例。在 ArcGIS GeoAnalytics Server 上运行分析时会执行计算。
在 ArcGIS Enterprise 10.6 及更高版本中,表达式格式通过 Arcade 表达式进行设置。了解有关 Arcade 表达式以及 GeoAnalytics Server 和 10.6 及更高版本使用的 Arcade 表达式的详细信息。
简单计算
简单数学示例
缓冲区表达式能够利用数学方式处理数字。
运算符 | 说明 | 示例 | 结果 |
---|---|---|---|
a + b | a 加 b | fieldname 包含数值 1.5 ["fieldname"] + 2.5 | 4.0 |
a - b | a 减 b | fieldname 包含数值 3.3 ["fieldname"]- 2.2 | 1.1 |
a * b | a 乘以 b | fieldname 包含数值 2.0 ["fieldname"] * 2.2 | 4.4 |
a / b | a 除以 b | fieldname 包含数值 4.0 ["fieldname"] / 1.25 | 3.2 |
abs( a ) | 返回 a 的绝对(正)值。 | fieldname 包含数值 -1.5 abs(["fieldname"]) | 1.5 |
log ( a ) | 返回 a 的自然对数(以 E 为底)。 | fieldname 包含数值 1 log(["fieldname"]) | 0 |
sin ( a ) | 返回 a 的三角正弦值。假设输入为以弧度为单位的角。 | fieldname 包含数值 1.5707 sin(["fieldname"]) | 1 |
cos( a ) | 返回 a 的三角余弦值。假设输入为以弧度为单位的角。 | fieldname 包含数值 0 cos(["fieldname"]) | 1 |
tan( a ) | 返回 a 的正切值。假设输入为以弧度为单位的角。 | fieldname 包含数值 0 tan(["fieldname"]) | 0 |
sqrt( a ) | 返回 a 的平方根。 | fieldname 包含数值 9 sqrt(["fieldname"]) | 3 |
min( a, b ) | 返回 a 和 b 间的最小数值。 | fieldname 包含数值 1.5 和 -3 min(["fieldname"], -3) | -3 |
max( a, b ) | 返回 a 或 b 间的最大数值。 | fieldname1 包含数值 1.5,fieldname2 包含数值 -3 max(["fieldname1"], ["fieldname2"]) | 1.5 |
乘
["Distance"] * 2
GeoAnalytics Tools 的内置函数
As 距离函数示例
缓冲区表达式能够将数值转换为线性距离。
函数 | 说明 | 示例 | 结果 |
---|---|---|---|
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"]) + 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 | 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> OR <condition2> | 满足条件一或条件二。 | (abs(-5) == 5) OR (10 < 2) | True |
<condition1> AND <condition2> | 满足条件一和条件二。 | (abs(-5) == 5) AND (10 < 2) | False |