Skip To Content

Использование выражений Arcade в инструменте Выявление инцидентов

В наборе GeoAnalytics Tools находится множество инструментов, позволяющих вам применить выражение.

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

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

Выражения в инструменте Выявление инцидентов

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

Примеры текстовых функций

Выражения инструмента Выявление инцидентов могут обрабатывать текст. Ниже приводится примеры доступных операций:

Более подробно об операциях с текстом, доступных в Arcade.

ОператорОбъяснениеПримерРезультат

concatenate( <values>, <separator>)

Соединяет значения вместе и возвращает строку.

  • values – массив строковых значений для соединения.
  • separator (Дополнительный) – разделитель для использования при соединении, если параметр values является массивом, или строка для соединения, если для первого параметра предоставлено одно значение. Если не задан, то он будет пустым.

fieldname содержит значение GeoAnalytics.

Concatenate ([$features["fieldname"], "is", "великолепен!"], ' ')

GeoAnalytics – великолепен!

find(<searchText>, <text>, <startPos>)

Находит строку в пределах строки. Групповые символы не поддерживаются.

  • searchText – часть строки для поиска.
  • text – текст для поиска.
  • startPos (дополнительно) – индекс местоположения на основе нуля в строке для начала поиска.

fieldname1 содержит значение 14NorthStreet и fieldname2 содержит значение North.

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

2

lower(<value>)

Делает буквы в строке строчными.

  • value – строка, символы которой меняются на строчные.

fieldname содержит значение GEOANALYTICS.

lower($feature["fieldname"])

геоаналитика

Пример текста, использующий find и lower.

find(("north"), lower("146NorthStreet")) == 2

Примеры функций дат

Вы можете использовать инструмент Выявление инцидентов из выражений, которые используют даты. Ниже приводится примеры доступных операций:

Более подробно об операциях с датами, доступных в Arcade

В Arcade значения месяцев находятся в диапазоне от 0 (Январь) до 11 (Декабрь), дней от 1 до 31, часов от 0 (00:00) до 23 (11:00 pm), минут и секунд от 0 до 59, а миллисекунд - от 0 до 999.Arcade возвращает даты в соответствии с вашими региональными установками GeoAnalytics Server.

ОператорОбъяснениеПримерРезультат

date( <value>, <month>, <day>, <hour>, <minute>)

Анализирует значение или набор значений в строке даты.

  • value (Дополнительно) – вводит число в миллисекундах с 1го января 1970 UTC или число, представляющее год. Если указан год, в последующих параметрах необходимо указать месяц и день. Значение также может быть строкой даты или строкой ISO 8601, которая конвертируется в дату.
  • month ( дополнительно) – месяц (0-11), где 0 – это январь и 11 – это декабрь.
  • day ( дополнительно) – день месяца (1-31).
  • hour ( дополнительно) – час дня (0 – 23).
  • minute ( дополнительно) – минута часа (0 – 59).
  • second ( дополнительно) – секунда минуты (0-59).
  • millisecond ( дополнительно) – миллисекунда секунды (0-999).

fieldname содержит значение 1476987783555.

Пример 1: Date($features["fieldname"])

Пример 2: Date(2017,0,14,0)

Пример 3: Date()

Пример 1: 20е октября 2016 11:23:03

Пример 2: 14-е января 2017 12:00:00

Пример 3: Возвращает текущую дату.

DateDiff(<date1>, <date2>, <units>)

Вычитает две даты и возвращает разницу в указанных единицах.

  • date1 – значение даты, из которого вычитается вторая дата.
  • date2 – значение даты, которая используется как вычитаемое для первой заданной даты.
  • units (Дополнительно) – единицы, в которых возвращается разность двух заданных дат. Поддерживаемые типы единиц включают milliseconds, seconds, minutes, hours, days, months и years. По умолчанию используются миллисекунды.

Пример 1: DateDiff(Date(2017,1,14,0), Date())

Пример 2: DateDiff(Date(2017,1,14,0), Date(), "Years")

Результат будет зависеть от времени запуска команды.

Пример 1: -20532129137

Пример 2: -0.6546783768647119

Year(<dateValue>)

Возвращает год заданной даты.

  • value – значение даты, у которой берется год.

Пример 1: fieldname – поле типа Date, значение которого соответствует 09 Oct 2017 04:30:43 pm.

Year($feature["fieldname"])

Пример 2: fieldname строковое поле в формате строки ISO 8601 со значением 2012-09-27.

Пример 1: 2017

Пример 2: 2012

Условные операторы

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

ОператорОбъяснениеПримерРезультаты

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

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

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

Более подробно об логических функциях, доступных в 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.

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

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

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

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

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

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

Кроме того, некоторые инструменты GeoAnalytics Tools, например, Выявление инцидентов и Вычислить поле, могут использовать отслеживаемые уравнения в 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>)

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

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

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

Пример 1: TrackFieldWindow("MyField,-1,2)

Пример 2: TrackFieldWindow("MyField,-2,0)[0]

Пример 3: TrackFieldWindow("MyField,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.

TrackGeometryWindow(<startIndex>, <endIndex>)

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

  • Индекс текущего объекта – 0.
  • Положительные значения представляют объекты, которые попадут в будущее, после текущего значения. Например, позиция 1 – это следующее значение в массиве.
  • Отрицательные значения представляют объекты из прошлого, перед декущим значением. Например, позиция -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: TrackGeometryWindow(-1,2)

Пример 2: TrackGeometryWindow(0,1)[0] для полилинейного набора данных

Пример 3: TrackGeometryWindow(0,1)[0] для полигонального набора данных

Пример 4: Найти значение X предыдущей точки TrackGeometryWindow(-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 (значение равно 30): 2

TrackWindow(<value1>, <value2>)

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

  • Индекс текущего объекта – 0.
  • Положительные значения представляют объекты, которые попадут в будущее, после текущего значения. Например, позиция 1 – это следующее значение в массиве.
  • Отрицательные значения представляют объекты из прошлого, перед декущим значением. Например, позиция -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: TrackWindow(-1,0)[0]

Пример 2: geometry(TrackWindow(-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 (значение равно 30): 2

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

Все расчеты расстояния производятся в метрах, скорость - в метрах в секунду, а ускорение - в метрах в секунду в квадрате. Расстояния измеряются с использованием геодезических расстояний.

ФункцияОбъяснение

TrackCurrentDistance()

Сумма расстояний, пройденных между наблюдениями от первого до текущего наблюдения.

TrackDistanceAt(значение)

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

TrackDistanceWindow(значение1, значение2)

Расстояние между первым (включительно) и последним значением (не включительно) в окне о текущем наблюдении (0).

TrackCurrentSpeed()

Скорость между предыдущим наблюдением и текущим наблюдением.

TrackSpeedAt(значение1)

Скорость при наблюдении относительно текущего наблюдения. Например, при значении 2 это скорость при наблюдении через два наблюдения после текущего наблюдения.

TrackSpeedWindow(значение1, значение2)

Значения скорости между первым (включительно) и последним значением (не включительно) в окне вокруг текущего наблюдения (0).

TrackCurrentAcceleration()

Ускорение между предыдущим наблюдением и текущим наблюдением.

TrackAccelerationAt(значение1)

Ускорение на наблюдении относительно текущего наблюдения.

TrackAccelerationWindow(значение1, значение2)

Значения ускорения между первым (включительно) и последним значением (не включительно) в окне вокруг текущего наблюдения (0).

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

Пример изображения трека с шестью точками

ФункцияПример результата

TrackCurrentDistance()

ID точкиРезультат (метры)

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)

ID точкиРезультат (метры)

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)

ID точкиРезультат (метры)

P1

[0,60]

P2

[0, 60, 140]

P3

[60, 140, 170]

P4

[140, 170, 205]

P5

[170, 205, 230]

P6

[205, 230]

TrackCurrentSpeed()

ID точкиРезультат (метров в секунду)

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)

ID точкиРезультат (метров в секунду)

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)

ID точкиРезультат (метров в секунду)

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

ID точкиРезультат (метров в секунду²)

P1

0

P2

0,0167

P3

0,0056

P4

-0,0014

P5

0,0014

P6

-0,0028

TrackAccelerationAt(2)

ID точкиРезультат (метров в секунду²)

P1

0,0056

P2

-0,0014

P3

0,0014

P4

-0,0028

P5

null

P6

null

TrackAccelerationWindow(-1, 2)

ID точкиРезультат (метров в секунду²)

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]