Skip To Content

Использование выражений буферов в Инструменты геоаналитики

Инструменты геоаналитики включают следующие инструменты, которые позволяют применять выражения:

Инструменты геоаналитики, использующие выражения, имеют множество способов применения, но также и ограничения в применении выражений. В ArcGIS 10.6 все используемые в GeoAnalytics выражения поддерживают Arcade.

Более подробно о функциях Arcade

Заново создать треки и Создать буферы

Выражения буфера используются инструментами Заново создать треки и Создать буферы.

Размеры буферов чаще всего вводятся с помощью констант или значений полей. Однако ввод значений не является единственным способом указать размер буфера при использовании Инструменты геоаналитики. В некоторых случаях вам может потребоваться выполнить математические вычисления, чтобы задать размер буфера. Вычисление применяется к каждому анализируемому пространственному объекту. Вычисления выполняются при запуске анализа на вашем 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

Ложь

a >= b

a <= b

a больше или равно b

a меньше или равно b

abs(-10) >= 10

Истина

a != b

a не равно b

abs(-3) != -3

Истина

a == b

a равно b

abs(-5) == 5

Истина

<condition1> || <condition2>

Встречено условие один или условие два

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

Истина

<condition1> && <condition2>

Встречено условие один и условие два

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

Ложь

Пример выражения буфера с использованием расширенных функций и условий

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

Пример умножения для условия присоединения

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

Примеры логических операторов

Помимо операторов условий для создания буферов могут использоваться более продвинутые логические операторы.

Более подробно об логических функциях, доступных в Arcade

ФункцияОбъяснениеПримерРезультат

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

Возвращает одно значение, если условие оценивается как true, и другое значение, если условие оценивается как false.

<true value> и <false value> могут быть следующими:

  • Числовое поле. Если в имени поля есть пробел, используйте квадратные скобки.
  • Число.
  • Функция.

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

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

Возвращает field1, если field1 больше field2, и 0 в других случаях.

Возвращает результат второй функции iff, если field1 больше field2, и 0 в других случаях.

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

Оценивает несколько выражений поочередно до тех пор, пока одно из них не даст значения true.

  • expression – выражение.
  • result – результат выражения. Это может быть число или поле.
  • default – дополнительное значение, если ни одно из выражений не совпадает.

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> )

Оценивает выражение, а затем сравнивает его значение с последующими параметрами. Если выражение совпадает, возвращается следующее значение параметра. Если нет, существует опция, чтобы последний параметр стал возвращаемым значением по умолчанию.

  • conditional val – значение условия. Может быть полем или выражением.
  • case – значение для сравнения с conditional val.
  • result – результат, если соответствующий случай совпадает с conditional val.
  • defaultValue – дополнительное значение, если другие объекты не являются true.

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

Сравнивает тождество между значением условия field1 + 3 и case1 field1. Если true, то будет возвращено 1. Если false, сравнивает тождество между field1 + 3 и field2. Если true, возвращается 2; иначе возвращается 0.

Примеры с отслеживания треков

В ArcGIS 10.6.1 инструмент Заново создать треки может применять уравнения с отслеживанием треков в Arcade, как показано в следующей таблице:

ФункцияОбъяснениеПримерРезультат

$track.field["fieldname"].history(<value1>)

Возвращает массив значений в заданном поле для указанного временного индекса.

  • Положительное число возвращает массив, начиная с заданного индекса до текущего объекта.
  • Отрицательное число возвращает шаг текущего времени и значения предшествующих временных шагов <value1> - 1.

MyField имеет последовательно упорядоченные значения [10, 20, 30, 40, 50, 60, 70, 80]. Значение 10 – индекс 0, и значение 80 – индекс 7. Выражения оцениваются для каждого индекса, а примеры подчёркивают индекс, использованный для примеров. n представляет количество элементов в последовательности, и k представляет оцениваемый индекс.

Пример 1:$track.field["MyField"].history(3))

Пример 2:$track.field["MyField"].history(-3)

Пример 3:mean($track.field["MyField"].history(-2))

Пример 4:$track.field["MyField"].history(-3)[0]

Если пример 1 оценивается в индексе k, он вернёт массив значений в индексе с 3 до k. Если вы оцениваете в индексе 6 (70), массив значений в индексе [3, 4, 5, 6] возвращается, чтобы получился массив [40, 50, 60, 70].

Пример 2 возвращает массив значений, вычисленных как индекс k минус заданное значение минус 1 (k-2). Если это оценивается в индексе 6 (value = 70), то значения k-2, k-1 и k возвращаются [50, 60, 70].

Пример 3 возвращает среднее значений по индексу k-1 и k. Если вы это оцениваете в индексе 4 (value = 50), вы найдёте среднее от value 50 (индекс 3) и value 60 (индекс 4), равное 65. Если вы это оцениваете в индексе 7, результатом будет среднее от 70 и 80, равное 75.

Пример 4 возвращает первый элемент (индекс 0) множества, созданного в примере 2, то есть 50.

$track.field["fieldname"].history < value1 > ,(<value1>)

Возвращает массив значений, начиная с index1 (<value1>) до index2 (<value2>).

MyField имеет расположенные по порядку следования значения [10, 20, 30, 40, 50, 60, 70, 80]. 10 это индекс 0, а 80 это индекс 7. Например, выражения оцениваются по индексу 7 (80).

Пример 1:$track.field["MyField"].history(-3, -2))

Пример 2:$track.field["MyField"].history(-5, -2))

Пример 1: [60]

Пример 2: [40, 50, 60]

$track.time.start

Вычисляет время начала отслеживания в миллисекундах от момента времени.

Использует отслеживание с началом 2 января 2017

$track.time.start

1483315200000

$track.time.duration

Вычисляет продолжительность отслеживания в миллисекундах от начала до текущего временного шага.

Используется отслеживание с началом 2 января 2017 и текущим временем 4 января 2017.

$track.time.duration

172800000

$track.time.current

Вычисляет текущее время в отслеживании.

Используется объект, который был 3 января 2017 в 9:00 утра.

$track.time.current

1483434000000

$track.index

Возвращает временной индекс вычисляемого объекта.

Это значение вычисляется на первом объекте в отслеживании.

$track.index

0

$track.T(<value>, "<units>")

Возвращает время объекта плюс время, созданное с помощью числового значения <value> и заданных <units>.

  • value – числовое значение, для добавления к времени объекта.
  • units – единицы числового значения <value>. Поддерживаются миллисекунды, секунды, минуты, часы, дни, месяцы и годы. По умолчанию используются миллисекунды.

Используется объект, который был 2 января 2017 в 14:00.

Пример 1: $track.T(1, "hours")

Пример 2: $track.T(-2, "days")

Пример 1: Возвращает 2 января в 3 часа дня: 1483369200000

Пример 2: Возвращает 31 декабря в 2 часа дня: 1483192800000

$track.field["fieldname"].window(<value1>, <value2>)

Возвращает ряд значений заданного поля для указанного индекса времени. Функция window позволяет перейти вперёд или назад во времени. Выражение оценивается для каждого пространственного объекта трека.

  • Текущий объект в индексе 0.
  • Положительные значения представляют пространственные объекты, которые случатся в будущем, после текущего значения. Например, положение 1 – это следующее значение в массиве.
  • Отрицательные значения представляют пространственные объекты, произошедшие в прошлом, до предыдущего объекта. Например, -1 – это предыдущее значение в массиве.

Функция window доступна в ArcGIS Enterprise 10.6.1.

MyField имеет последовательно упорядоченные значения [10, 20, 30, 40, 50]. Выражение оценивается для каждого пространственного объекта трека. Результаты возвращаются, включая стартовый объект и исключая конечный объект.

Пример 1:$track.field["MyField"].window(-1,2)

Пример 2:$track.field["MyField"].window(-2,0)[0]

Пример 3:$track.field["MyField"].window(0,3)[2]

Пример 1: при оценивании в каждом пространственном объекте таблица показывает следующие результаты.

Оцененный пространственный объект

Результат

10

[10,20]

20

[10, 20, 30]

30

[20,30,40]

40

[30,40,50]

50

[40, 50]

Пример 2: при оценивании в индексе 2 (значение равно 30), возвращается: 10.

Пример 3: при оценивании в индексе 2 (значение равно 30), возвращается: 50.

$track.geometry.window(<value1>, <value2>)

Возвращает массив значений, представляющий геометрию для указанного индекса времени. Функция window позволяет перейти вперёд или назад во времени. Выражение оценивается для каждого пространственного объекта трека.

  • Текущий объект в индексе 0.
  • Положительные значения представляют пространственные объекты, которые случатся в будущем, после текущего значения. Например, положение 1 – это следующее значение в массиве.
  • Отрицательные значения представляют пространственные объекты, произошедшие в прошлом, до предыдущего объекта. Например, -1 – это предыдущее значение в массиве.

Функция window доступна в ArcGIS Enterprise 10.6.1.

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:$track.geometry.window(-1,2)

Пример 2: $track.geometry.window(0,1)[0] на наборе данных полилиний

Пример 3: $track.geometry.window(0,1)[0] на полигональном наборе данных

Пример 4: находит значение X для предыдущей точки $track.geometry.window(-1,0)[0]["x"]

Пример 1: при оценивании в каждом пространственном объекте таблица показывает следующие результаты.

Оцененный пространственный объект

Результат

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}]

Пример 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 (значение равно 20): 1

$track.window(<value1>, <value2>)

Возвращает массив значений, представляющий геометрию и все атрибуты для указанного индекса времени. Функция window позволяет перейти вперёд или назад во времени.

  • Текущий объект в индексе 0.
  • Положительные значения представляют пространственные объекты, которые случатся в будущем, после текущего значения. Например, положение 1 – это следующее значение в массиве.
  • Отрицательные значения представляют пространственные объекты, произошедшие в прошлом, до предыдущего объекта. Например, -1 – это предыдущее значение в массиве.

Функция window доступна в ArcGIS Enterprise 10.6.1.

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:$track.window(-1,0)[0]

Пример 2:geometry($track.window(-1,0)[0]["x"]

Пример 1: при оценивании в каждом пространственном объекте таблица показывает следующие результаты.

Оцененный пространственный объект

Результат

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"}}]

Пример 2: Оценено в индексе 2 (значение 20): 1