Buffer expression examples for ArcGIS Enterprise 10.6 and later

Entering values or using a field are not the only ways to specify the size of a buffer using GeoAnalytics Tools. In some cases, you can perform a mathematical calculation to set the buffer size. You can perform simple and advanced calculations that can be applied to all records. The calculation is applied to each feature. The sections below include examples of using a buffer expression. Calculations are performed when analysis is run on ArcGIS GeoAnalytics Server.

At ArcGIS Enterprise 10.6 and later, expressions are formatted using Arcade. In Arcade, field names are formatted as $feature["field name"] or $feature.fieldname. The first option, $feature["field name"], is required when a field name includes a space. All examples below use this option. GeoAnalytics Server does not use Arcade expressions at Enterprise 10.5 or 10.5.1.

Learn more about Buffer expressions supported at 10.5 and 10.5.1

Learn more about Arcade expressions

Buffer expressions are used by the Reconstruct Tracks and Create Buffers tools.

The following tools use Arcade expressions in GeoAnalytics Server at Enterprise 10.6 and later:

Legacy:

The ArcGIS GeoAnalytics Server extension is being deprecated in ArcGIS Enterprise. The final release of GeoAnalytics Server was included with ArcGIS Enterprise 11.3. These tools are available through ArcGIS Enterprise 11.3 and earlier versions.

Mathematical operator and function examples

Buffer expressions can mathematically process numbers. The following table shows examples of available operations.

Learn more about mathematical operations and functions in Arcade

OperatorExplanationExample

a + b

Returns the sum of a plus b.

fieldname contains a value of 1.5

$feature["fieldname"] + 2.5

4.0

a - b

Returns the difference of a minus b.

fieldname contains a value of 3.3

$feature["fieldname"]- 2.2

1.1

a * b

Returns the product of a times b.

fieldname contains a value of 2.0

$feature["fieldname"] * 2.2

4.4

a / b

Returns the quotient of a divided by b.

fieldname contains a value of 4.0

$feature["fieldname"] / 1.25

3.2

abs( a )

Returns the absolute (positive) value of a.

fieldname contains a value of -1.5

abs($feature["fieldname"])

1.5

log( a )

Returns the natural logarithm (base E) of a.

fieldname contains a value of 1

log($feature["fieldname"])

0

sin( a )

Returns the trigonometric sine of a.

The input is assumed to be an angle in radians.

fieldname contains a value of 1.5707

sin($feature["fieldname"])

1

cos( a )

Returns the trigonometric cosine of a.

The input is assumed to be an angle in radians.

fieldname contains a value of 0

cos($feature["fieldname"])

1

tan( a )

Returns the tangent of a.

The input is assumed to be an angle in radians.

fieldname contains a value of 0

tan($feature["fieldname"])

0

sqrt( a )

Returns the square root of a.

fieldname contains a value of 9

sqrt($feature["fieldname"])

3

min( a, b )

Returns the lowest valued number between a and b.

fieldname contains a value of 1.5, and a value of -3

min($feature["fieldname"], -3)

-3

max( a, b )

Returns the highest valued number between a and b.

fieldname1 contains a value of 1.5, and fieldname2 contains a value of -3

max($feature["fieldname1"], $feature["fieldname2"])

1.5

constrain(<value>,<low>,<high>)

Returns the input value if it's within the constraining bounds. If the value is less than the low value, it returns the low value. If the value is greater than the high value, it returns the high value.

Example 1: constrain( $feature["distance"], 0, 10)

Returns 0 if distance is less than 0, 10 if distance is greater than 10, and distance otherwise.

Example 2: constrain($feature['Store dist'], 6, distance)

Returns 6 if Store dist is less than 6, distance if Store dist is greater than distance, and Store dist otherwise.

Multiplication

$feature["Distance"] * 2

Logical operator examples

In addition to simple mathematical expressions, more advanced functions, shown in the following table, can be used to apply buffer expressions.

FunctionExplanationExampleResult

iif(<condition>,<true value>,<false value>)

Returns one value if a condition evaluates to true and returns another value if that condition evaluates to false.

<true value> and <false value> can be the following:

  • A numeric field. If there is a space in the field name, use square brackets.
  • A number.
  • A function.

iif($feature["field1"] > $feature["field2"], $feature["field1"], 0)

iif($feature["field1"] > $feature["field2"], iif($feature["field2"] = 0, $feature["field3"], $feature["field4"]), 0)

Returns field1 if field1 is greater than field2, and 0 otherwise.

Returns the result of the second iif function if field1 is greater than field2, and 0 otherwise.

when(<expression1> , <result1> , <expression2> , <result2> , ... , <expressionN> , <resultN>, <default>)

Evaluates a series of expressions in order until one evaluates to true.

  • expression—An expression.
  • result—The result of the expression. It can be a number or field.
  • default—An optional value if none of the expressions match.

when(($feature["field1"] + 10) > 1, 1,($feature["field2"] + 10) > 2 , 2, $feature["field3"])

If field1 + 10 is greater than 1, returns 1. If not, checks if field2 + 10 is greater than 2. If yes, it returns 2. If not, it returns field3.

decode(<conditional val> , <case1> , <result1>, <case2>, <result2>, ... <caseN>, <resultN>, <defaultValue> )

Evaluates an expression and compares its value with subsequent parameters. If the expression matches, it returns the next parameter value. If none match, there is the option for the last parameter to be a default return value.

  • conditional val—The conditional value. It can be a field or an expression.
  • case—A value to be compared to the conditional val.
  • result—The result if the corresponding case matches the conditional val.
  • defaultValue—An optional value if no other values are true.

decode($feature["field1"] + 3 , $feature["field1"], 1, $feature["field2"], 2, 0)

Compares equality between the conditional val field1 + 3 and case1 field1. If true, it returns 1. If false, it compares the equality between field1 + 3 and field2. If true, it returns 2; otherwise, it returns 0.

As distance function examples

Buffer expressions can cast numeric values to a linear distance as shown in the following table.

FunctionExplanationExampleResult

as_meters(<value>)

Applies a calculation assuming the input values are in meters.

as_meters( $feature["fieldname"] )

as_meters(150)

Results are buffered by 150 meters.

as_kilometers(<value>)

Applies a calculation assuming the input values are in kilometers.

as_kilometers( $feature["fieldname"] )

as_kilometers(150)

Results are buffered by 150 kilometers.

as_feet(<value>)

Applies a calculation assuming the input values are in feet.

as_feet( $feature["fieldname"] )

as_feet(150)

Results are buffered by 150 feet.

as_yards(<value>)

Applies a calculation assuming the input values are in yards.

as_yards( $feature["fieldname"] )

as_yards(150)

Results are buffered by 150 yards.

as_nautical_miles(<value>)

Applies a calculation assuming the input values are in nautical miles.

as_nautical_miles( $feature["fieldname"] )

as_nautical_miles(150)

Results are buffered by 150 nautical miles.

as_miles(<value>)

Applies a calculation assuming the input values are in miles.

as_miles( $feature["fieldname"] )

as_miles(150)

Results are buffered by 150 miles.

Conditional operators

Conditional statements can use the following operators:

OperatorExplanationExampleResults

a > b

a < b

a is greater than b

a is less than b

10 > 2

False

a >= b

a <= b

a is greater than or equal to b

a is less than or equal to b

abs(-10) >= 10

True

a != b

a is not equal to b

abs(-3) != -3

True

a == b

a is equal to b

abs(-5) == 5

True

<condition1> || <condition2>

Condition 1 or condition 2 is met.

(abs(-5) == 5) || (10 < 2)

True

<condition1> && <condition2>

Condition 1 and condition 2 are met.

(abs(-5) == 5) && (10 < 2)

False

Track-aware examples

At ArcGIS Enterprise 10.6.1 or later, you can use track-aware equations in Arcade with the Reconstruct Tracks tool as shown in the following table.

FunctionExplanationExampleResult

TrackStartTime()

Calculates the start time of a track in milliseconds from epoch.

Using a track that starts on January 2, 2017.

TrackStartTime()

1483315200000

TrackDuration()

Calculates the duration of a track in milliseconds from the start until the current time step.

Using a track that starts on January 2, 2017, and the current time is January 4, 2017.

TrackDuration()

172800000

TrackCurrentTime()

Calculates the current time in a track.

Using a feature that occurs on January 3, 2017, at 9:00 a.m.

TrackCurrentTime()

1483434000000

TrackIndex

Returns the time index of the feature being calculated.

Calculating this value on the first feature in a track.

TrackIndex

0

TrackFieldWindow(<fieldName>, <startIndex>, <endIndex>)

Returns an array of values in the given field for the specified time index. The window function allows you to go forward and backward in time. The expression is evaluated at each feature in the track.

  • The current feature is at index 0.
  • Positive values represent features that occur in the future, after the current value. For example, position 1 is the next value in the array.
  • Negative numbers represent features that occurred in the past, before the previous feature. For example, -1 is the previous value in the array.

MyField has sequentially ordered values of [10, 20, 30, 40, 50]. The expression is evaluated at each feature in the track. Results are returned inclusive of the start feature and exclusive of the end feature.

Example 1:TrackFieldWindow("MyField,-1,2)

Example 2:TrackFieldWindow("MyField,-2,0)[0]

Example 3:TrackFieldWindow("MyField,0,3)[2]

Example 1: When evaluated at each feature, the table shows the following results.

Evaluated featureResult

10

[10,20]

20

[10, 20, 30]

30

[20,30,40]

40

[30,40,50]

50

[40, 50]

Example 2: When evaluated at index 2 (value is 30), it returns: 10.

Example 3: When evaluated at index 2 (value is 30), it returns: 50.

TrackGeometryWindow(<startIndex>, <endIndex>)

Returns an array of values representing geometry for the specified time index. The window function allows you to go forward and backward in time. The expression is evaluated at each feature in the track.

  • The current feature is at index 0.
  • Positive values represent features that occur in the future, after the current value. For example, position 1 is the next value in the array.
  • Negative numbers represent features that occurred in the past, before the previous feature. For example, -1 is the previous value in the array.

MyField has sequentially ordered values of [10, 20, 30, 40, 50]. The geometry of the features are [{x: 1, y: 1},{x: 2, y: 2} ,{x: null, y: null},{x: 4, y: 4}, {x: 5, y: 5}] The expression is evaluated at each feature in the track. Results are returned inclusive of the start feature and exclusive of the end feature.

Example 1: TrackGeometryWindow(-1,2)

Example 2: TrackGeometryWindow(0,1)[0] on a polyline dataset

Example 3: TrackGeometryWindow(0,1)[0] on a polygon dataset

Example 4: Find the X value of the previous point TrackGeometryWindow(-1,0)[0]["x"]

Example 1: When evaluated at each feature, the table shows the following results.

Evaluated featureResult

10

[{x: 1, y: 1},{x: 2, y: 2}]

20

[{x: 1, y: 1},{x: 2, y: 2} ,{x: null, y: null}]

30

[{x: 2, y: 2} ,{x: null, y: null},{x: 4, y: 4}]

40

[{x: null, y: null},{x: 4, y: 4}, {x: 5, y: 5}]

50

[{x: 4, y: 4}, {x: 5, y: 5}]

Example 2: Polylines are returned in the following format: [{"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]]]}]

Example 3: Polygons are returned in the following format: [{"rings":[[[-7882559.1197999995,6376090.883500002],[-7893142.474300001,6042715.216800004],[-8544018.775999999,6045361.0554000065],[-8544018.775999999,6376090.883500002],[-7882559.1197999995,6376090.883500002]]]}]

Example 4: Evaluated at index 2 (value is 30): 2

TrackWindow(<value1>, <value2>)

Returns an array of values representing geometry and all attributes for the specified time index. The window function allows you to go forward and backward in time.

  • The current feature is at index 0.
  • Positive values represent features that occur in the future, after the current value. For example, position 1 is the next value in the array.
  • Negative numbers represent features that occurred in the past, before the previous feature. For example, -1 is the previous value in the array.

MyField has sequentially ordered values of [10, 20, 30, 40, 50], in addition to the objectID, globalID, and instant_datetime fields. The geometry of the features are [{x: 1, y: 1},{x: 2, y: 2} ,{x: null, y: null},{x: 4, y: 4}, {x: 5, y: 5}]. The expression is evaluated at each feature in the track. Results are returned inclusive of the start feature and exclusive of the end feature.

Example 1:TrackWindow(-1,0)[0]

Example 2:geometry(TrackWindow(-1,0)[0]["x"]

Example 1: When evaluated at each feature, the table shows the following results.

Evaluated featureResult

10

20

[{"geometry": {x: 1, y: 1}},{"attributes": {"MyField" : 10, "trackName":"ExampleTrack1"}}]

30

[{"geometry": {x: 2, y: 2}},{"attributes": {"MyField" : 20, "trackName":"ExampleTrack1"}}]

40

[{"geometry": {x: null, y: null}},{"attributes": {"MyField" : 30, "trackName":"ExampleTrack1"}}]

50

[{"geometry": {x: 4, y: 4}},{"attributes": {"MyField" : 40, "trackName":"ExampleTrack1"}}]

Example 2: Evaluated at index 2 (value is 30): 2

Use the following track expressions to calculate distance, speed, and acceleration on tracks in ArcGIS Enterprise 10.9 or later.

All distance calculations are calculated in meters, speed in meters per second, and acceleration in meters per second squared. Distances are measured using geodesic distances.

FunctionExplanation

TrackCurrentDistance()

The sum of the distances travelled between observations from the first to current observation.

TrackDistanceAt(value)

The sum of the distances travelled between observations from the first to the current observation plus the given value.

TrackDistanceWindow(value1, value2)

The distances between the first value (inclusive) to the last value (exclusive) in a window about the current observation (0).

TrackCurrentSpeed()

The speed between the previous observation and the current observation.

TrackSpeedAt(value1)

The speed at the observation relative to the current observation. For example, at value 2, it's the speed at the observation two observations after the current.

TrackSpeedWindow(value1, value2)

The speed values between the first value (inclusive) to the last value (exclusive) in a window around the current observation (0).

TrackCurrentAcceleration()

The acceleration between the previous observation and the current observation.

TrackAccelerationAt(value1)

The acceleration at the observation relative to the current observation.

TrackAccelerationWindow(value1, value2)

The acceleration values between the first value (inclusive) to the last value (exclusive) in a window around the current observation (0).

The example calculations for distance, speed, and acceleration use examples from the following image.

Track example image with six points

FunctionExample result

TrackCurrentDistance()

Point IDResult (meters)

P1

0

P2

60

P3

80 + 60 = 140

P4

30 + 80 + 60 = 170

P5

35 + 30 + 80 + 60 = 205

P6

25 + 35 + 30 + 80 + 60 = 230

TrackDistanceAt(2)

Point IDResult (meters)

P1

0 + 80 + 60 = 140

P2

30 + 80 + 60 = 170

P3

35 + 30 + 80 + 60 = 205

P4

25 + 35 + 30 + 80 + 60 = 230

P5

null

P6

null

TrackDistanceWindow(-1, 2)

Point IDResult (meters)

P1

[0,60]

P2

[0, 60, 140]

P3

[60, 140, 170]

P4

[140, 170, 205]

P5

[170, 205, 230]

P6

[205, 230]

TrackCurrentSpeed()

Point IDResult (meters/second)

P1

0

P2

60/60

1

P3

80/60

1.33

P4

30/60

.5

P5

35/60

0.5833

P6

25/60

0.4167

TrackSpeedAt(2)

Point IDResult (meters/second)

P1

80/60

1.33

P2

30/60

.5

P3

35/60

0.5833

P4

25/60

0.4167

P5

null

P6

null

TrackSpeedWindow(-1, 2)

Point IDResult (meters/second)

P1

[0, 1]

P2

[0, 1, 1.3]

P3

[1, 1.3, 0.5]

P4

[1.3, 0.5, 0.583]

P5

[0.5, 0.583, -0.4167]

P6

[0.583, -0.4167]

TrackCurrentAcceleration()

Point IDResult (meters/second²)

P1

0

P2

0.0167

P3

0.0056

P4

-0.0014

P5

0.0014

P6

-0.0028

TrackAccelerationAt(2)

Point IDResult (meters/second²)

P1

0.0056

P2

-0.0014

P3

0.0014

P4

-0.0028

P5

null

P6

null

TrackAccelerationWindow(-1, 2)

Point IDResult (meters/second²)

P1

[0, 0.0167]

P2

[0, 0.0167, 0.0056 ]

P3

[0.0167, 0.0056 , -0.0014]

P4

[ 0.0056 , -0.0014, 0.0014]

P5

[-0.0014, 0.0014, -0.0028]

P6

[0.0014, -0.0028]

Related topics