Skip To Content

通过 GeoAnalytics Tools 使用表达式

GeoAnalytics Tools 工具箱中提供多个工具以应用表达式。以下工具提供了应用表达式的选项:

GeoAnalytics Tools 可使用表达式,它具有不同的用法以及对应用表达式的限制。

重新构建轨迹创建缓冲区

缓冲区表达式用于重新构建轨迹创建缓冲区工具。

最常见的是使用常量或字段值输入缓冲区大小。但是,输入值并不是使用 GeoAnalytics Tools 指定缓冲区大小的唯一方法。某些情况下,您可能希望通过执行数学计算来设置缓冲区大小。您可以执行应用于所有记录的简单计算和高级计算。该计算会应用于所分析的每个要素。在 ArcGIS GeoAnalytics Server 上运行分析时会执行计算。

缓冲区表达式可以使用简单计算以及所有内置函数

以下部分包含缓冲区表达式示例。

连接要素

连接要素工具中使用表达式,以指定连接条件。

某些情况下,您可能希望指定条件以选择应包含在连接中的要素。可以执行简单连接条件(例如 field a > field c)和高级条件。将针对每个要素对条件进行测试以确定分析内容。在 ArcGIS GeoAnalytics Server 上运行分析时会执行计算。

连接条件表达式可以使用简单计算和高级内置函数来创建条件。连接条件无法使用 as_distance 函数。连接条件的结果应始终为 true 或 false。

以下部分包含表达式示例。

简单计算

简单数学示例

重新构建轨迹创建缓冲区工具可以通过数学方式处理数字。

创建连接条件时,连接要素工具可以使用数学运算。

运算符说明示例结果

a + b

a 加 b

["fieldname"] + 2.5

fieldname 包含数值 1.5

4.0

a - b

a 减 b

["fieldname"]- 2.2

fieldname 包含数值 3.3

1.1

a * b

a 乘以 b

["fieldname"] * 2.2

fieldname 包含数值 2.0

4.4

a / b

a 除以 b

["fieldname"] / 1.25

fieldname 包含数值 4.0

3.2

abs( a )

返回 a 的绝对(正)值。

abs(["fieldname"])

fieldname 包含数值 -1.5

1.5

log ( a )

返回 a 的自然对数(以 e 为底)。

log(["fieldname"])

fieldname 包含数值 1

0

sin ( a )

返回 a 的三角正弦值。假设输入为以弧度为单位的角。

sin(["fieldname"])

fieldname 包含数值 1.5707

1

cos( a )

返回 a 的三角余弦值。假设输入为以弧度为单位的角。

cos(["fieldname"])

fieldname 包含数值 0

1

tan( a )

返回 a 的正切值。假设输入为以弧度为单位的角。

tan(["fieldname"])

fieldname 包含数值 0

0

sqrt( a )

返回 a 的平方根。

sqrt(["fieldname"])

fieldname 包含数值 9

3

min( a, b )

返回 a 和 b 间的最小数值。

min("fieldname", -3)

fieldname 包含数值 1.5 和 -3

-3

max( a, b )

返回 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

  • expression - 表达式。
  • result - 可以为数值或字段。
  • default - 表达式均不匹配时的可选值。

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 函数将对表达式进行求值并将其值与后续参数进行比较。如果表达式匹配,则返回下一个参数值。如果均不匹配,则可以选择将最后一个参数作为默认返回值。

  • conditional val - 可以为字段或表达式。
  • case - 要与 conditional val 进行对比的值。
  • result - 相应实例与 conditional val 匹配时的结果。
  • defaultValue - 其他值均不是 true 时的可选值。

decode(field1 + 3 , field1, 1, field2, 2, 0)

比较条件 val field1 + 3 和 case1 field1 是否相等。如果 true,则返回 1。如果 false,则比较 field1 + 3field2 是否相等。如果 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

使用高级函数和条件的缓冲区表达式示例

iff(field1 > field2, iff(field2 = 0, field3, field4), 0)

连接条件的乘法示例

iff(field1 > field2, iff(field2 = 0, field3, field4), 0) > ["Distance"] * 2