Следующие инструменты из набора инструментов GeoAnalytics Tools позволяют применять выражение:
- Создать буферы для выражений буфера.
 - Заново создать треки для выражений буфера.
 - Присоединить объекты для условий соединения.
Более подробно о выражениях в инструменте Присоединить объекты
 - Выявление инцидентов для условий инцидентов.
 - Вычислить поле для вычисления значений поля.
 
Инструменты GeoAnalytics Tools, использующие выражения, имеют множество способов применения, но также и ограничения в применении выражений. В ArcGIS версии 10.6 все выражения, используемые в Геоаналитике, поддерживают Arcade.
Более подробно о функциях Arcade
Заново создать треки и Создать буферы
Выражения буфера используются инструментами Заново создать треки и Создать буферы.
Размеры буферов часто вводятся с помощью констант или значений полей. Однако ввод значений не является единственным способом указать размер буфера при использовании GeoAnalytics Tools. В некоторых случаях вам может потребоваться выполнить математические вычисления, чтобы задать размер буфера. Вычисление применяется к каждому анализируемому пространственному объекту. Вычисления выполняются при запуске анализа на вашем ArcGIS GeoAnalytics Server.
В разделах ниже приводятся примеры выражений буфера.
Математические операторы и примеры функций
Выражения буфера математически обрабатывают числовые значения. Ниже приводится примеры доступных операций:
Более подробно о математических операциях и функциях, доступных в Arcade
| Оператор | Объяснение | Пример | Результат | 
|---|---|---|---|
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.  | 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)  | Возвращает 0, если distance меньше 0, 10, если distance больше 10, и distance в других случаях. Возвращает 6, если Store dist меньше 6, distance если Store dist больше чем distance, и Store dist в других случаях.  | 
Пример умножения для выражения буфера
$feature["Distance"] * 2Примеры функций расстояний
Функции 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>  | Встречено условие один или условие два  | (abs(-5) == 5) || (10 < 2)  | True  | 
<condition1> && <condition2>  | Встречено условие один и условие два  | (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Примеры логических операторов
Помимо операторов условий для создания выражений могут использоваться более сложные логические операторы, как показано в таблице ниже.
Более подробно об логических функциях, доступных в Arcade.
| Функция | Объяснение | Пример | Результат | 
|---|---|---|---|
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, если field1 больше чем field2, и 0 в других случаях. Возвращает результат второй функции iif, если field1 больше чем field2, и 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)  | Сравнивает тождество между значением условия field1 + 3 и case1 field1. Если true, то будет возвращено 1. Если false, сравнивает тождество между field1 + 3 и field2. Если true, возвращается 2; иначе возвращается 0.  | 
Примеры отслеживания треков
Инструмент Заново создать треки может использовать уравнения с отслеживанием в Arcade, как показано в таблице ниже:
| Функция | Объяснение | Пример | Результат | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
TrackStartTime()  | Вычисляет время начала отслеживания в миллисекундах от момента времени.  | Используется трек, который начинается 2 января 2017 года. TrackStartTime()  | 1483315200000  | ||||||||||||
TrackDuration()  | Вычисляет продолжительность отслеживания в миллисекундах от начала до текущего временного шага.  | Используется отслеживание с началом 2 января 2017 и текущим временем 4 января 2017. TrackDuration()  | 172800000  | ||||||||||||
TrackCurrentTime()  | Вычисляет текущее время в отслеживании.  | Используется объект, который был 3 января 2017 в 9:00 утра. TrackCurrentTime()  | 1483434000000  | ||||||||||||
TrackIndex  | Возвращает временной индекс вычисляемого объекта.  | Это значение вычисляется на первом объекте в отслеживании. TrackIndex  | 0  | ||||||||||||
TrackFieldWindow(<fieldName>, <startIndex>, <endIndex>)  | Возвращает ряд значений заданного поля для указанного индекса времени. Функциональное окно позволяет вам перемещаться вперед и назад во времени. Выражение оценивается в каждом объекте трека. 
  | 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>)  | Возвращает массив значений, представляющий геометрию для указанного индекса времени. Функция окна позволяет перейти вперёд или назад во времени. Выражение оценивается в каждом объекте трека. 
  | 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>)  | Возвращает массив значений, представляющий геометрию и все атрибуты для указанного индекса времени. Функциональное окно позволяет вам перемещаться вперед и назад во времени. 
  | MyField имеет расположенные по порядку следования значения [10, 20, 30, 40, 50], в дополнении к objectID, globalID и полям 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  | 
Используйте следующие выражения трека для расчета расстояния, скорости и ускорения на треках.
Все расчеты расстояния производятся в метрах, скорость - в метрах в секунду, а ускорение - в метрах в секунду в квадрате. Расстояния измеряются с использованием геодезических расстояний.
| Функция | Объяснение | 
|---|---|
TrackCurrentDistance()  | Сумма расстояний, пройденных между наблюдениями от первого до текущего наблюдения.  | 
TrackDistanceAt(значение)  | Сумма расстояний, пройденных между наблюдениями от первого до текущего, плюс заданное значение.  | 
TrackDistanceWindow(значение1, значение2)  | Расстояние между первым (включительно) и последним значением (не включительно) в окне о текущем наблюдении (0).  | 
TrackCurrentSpeed()  | Скорость между предыдущим наблюдением и текущим наблюдением.  | 
TrackSpeedAt(значение1)  | Скорость при наблюдении относительно текущего наблюдения. Например, при значении 2 это скорость при наблюдении через два наблюдения после текущего наблюдения.  | 
TrackSpeedWindow(значение1, значение2)  | Значения скорости между первым (включительно) и последним значением (не включительно) в окне вокруг текущего наблюдения (0).  | 
TrackCurrentAcceleration()  | Ускорение между предыдущим наблюдением и текущим наблюдением.  | 
TrackAccelerationAt(значение1)  | Ускорение на наблюдении относительно текущего наблюдения.  | 
TrackAccelerationWindow(значение1, значение2)  | Значения ускорения между первым (включительно) и последним значением (не включительно) в окне вокруг текущего наблюдения (0).  | 
В примерах расчетов расстояния, скорости и ускорения будут использоваться примеры из следующего изображения.

| Функция | Пример результата | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
TrackCurrentDistance()  | 
  | ||||||||||||||
TrackDistanceAt(2)  | 
  | ||||||||||||||
TrackDistanceWindow(-1, 2)  | 
  | ||||||||||||||
TrackCurrentSpeed()  | 
  | ||||||||||||||
TrackSpeedAt(2)  | 
  | ||||||||||||||
TrackSpeedWindow(-1, 2)  | 
  | ||||||||||||||
TrackCurrentAcceleration()  | 
  | ||||||||||||||
TrackAccelerationAt(2)  | 
  | ||||||||||||||
TrackAccelerationWindow(-1, 2)  | 
  |