Некоторые инструменты GeoAnalytics Desktop используют в анализе выражения ArcGIS Arcade. Инструменты и функции выражений перечислены ниже.
Применяя Arcade, формат имен поле становится $feature["field name"] или $feature.fieldname. Первая опция, $feature["field name"], требуется, когда имя поля содержит пробел. Все примеры ниже используют эту опцию. Все инструменты GeoAnalytics Desktop используют формат $feature["field name"], за исключением инструмента Присоединить объекты. В инструменте Присоединить объекты используются $target["field name"] и $join["field name"] для указания применяемого набора данных.
Дополнительную информацию об использовании, переменных профиля, типах возвращаемых данных и других деталях см. в профиле GeoAnalytics Arcade.
Выражения Arcade используются следующими инструментами набора инструментов GeoAnalytics Desktop:
- Инструменты Реконструировать треки и Создать буферы — используют выражения буфера при выполнении математического вычисления для настройки размера буферов. Вы можете выполнять как простые, так и сложные вычисления над всеми записями. Эти вычисления применяются к каждому объекту.
- Реконструировать треки — используйте выражения разбиения для указания условия разбиения треков. Когда точка удовлетворяет критерию, трек разбивается и суммируется в разные треки. Можно применить как простые условия, так и основанные на треках. Например, вы можете разбить треки, если скорость в текущей точке менее двух метров в секунду (TrackCurrentSpeed() < 2).
- Присоединить объекты - используйте выражения присоединения для указания условия выбора объектов, которые должны быть включены в соединение. Можно выполнять как простые условия присоединения (такие, как field a > field c), так и сложные условия. Условия тестируются на каждом объекте, чтобы определить, что будет проанализировано.
- Вычислить поле - выполняйте как простые, так и сложные вычисления над всеми записями. Эти вычисления применяются к каждому объекту.
- Найти инциденты - определите условия start и end для инцидентов. Используйте выражения start и end для поиска инцидентов. Условие инструмента Выявление инцидентов всегда должно выводить в результате true или false. Используйте условие, чтобы определить, должен ли пространственный объект включаться в инцидент. Условия тестируются на каждом объекте, чтобы определить, какие объекты являются инцидентами.
Более подробно о выражениях Arcade
Математическая операция и примеры функции
Выражения, обрабатывающие числовые математические выражения. В таблице ниже приведен пример доступных операций.
Более подробно о математических операциях и функциях, доступных в 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>) | Возвращает входное значение, если оно находится в пределах заданных границ. Если значение меньше самого нижнего значения, возвращается нижнее значение. Если значение больше самого высокого значения, возвращается самое высокое значение. | Пример 1: constrain( $feature["distance"], 0, 10) Возвращает 0, если distance меньше 0, 10, если distance больше 10, и distance в других случаях. Пример 2: constrain($feature['Store dist'], 6, distance) Возвращает 6, если Store dist меньше 6, distance если Store dist больше чем distance, и Store dist в других случаях. |
Примеры текстовых функций
Выражения Arcade могут обрабатывать текст. В таблице ниже приведен пример доступных операций.
Более подробно об операциях с текстом, доступных в Arcade.
Оператор | Объяснение | Пример | Результат |
---|---|---|---|
concatenate(<values>, <separator>) | Соединяет значения вместе и возвращает строку.
| fieldname содержит значение GeoAnalytics Concatenate ([$features["fieldname"], "is", "great!"], ' ') | GeoAnalytics – великолепен! |
find(<searchText>, <text>, <startPos>) | Находит строку в пределах строки. Групповые символы не поддерживаются.
| fieldname1 содержит значение 14NorthStreet, и fieldname2 содержит значение North. find($feature["fieldname2"], $feature["fieldname1"]) | 2 |
lower(<value>) | Делает буквы в строке строчными.
| fieldname содержит значение GEOANALYTICS lower($feature["fieldname"]) | геоаналитика |
Пример текста, использующий find и lower.
find(("north"), lower("146NorthStreet"))
Примеры функций дат
Выражения Arcade могут обрабатывать даты. В таблице ниже приведен пример доступных операций. В Arcade значения месяца идут в диапазоне от 0 (январь) до 11 (декабрь), дни с 1 по 31, часы с 0 (12:00 am) до 23 (11:00 pm), минуты и секунды от 0 до 59 и миллисекунды с 0 до 999.
Более подробно об операциях с датами, доступных в Arcade
Оператор | Объяснение | Пример | Результат |
---|---|---|---|
date(<value>, <month>, <day>, <hour>, <minute>) | Анализирует значение или набор значений в строке даты.
| 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>) | Вычитает две даты и возвращает разницу в указанных единицах.
| Пример 1: DateDiff(Date(2017,1,14,0), Date()) Пример 2: DateDiff(Date(2017,1,14,0), Date(), "Years") | Результат будет зависеть от времени запуска команды. Пример 1: -20532129137 Пример 2: -0.6546783768647119 |
Year(<dateValue>) | Возвращает год заданной даты.
| Пример 1: fieldname – поле типа Date, значение которого соответствует 09 Oct 2017 04:30:43 pm Year($feature["fieldname"]) Пример 2: fieldname - строковое поле в формате строки ISO 8601 со значением 2012-09-27 | Пример 1: 2017 Пример 2: 2012 |
Примеры логических функции
В дополнение к простым математическим выражениям можно использовать более сложные функции, приведенные в таблице ниже, для применения выражений буфера.
Функция | Объяснение | Пример | Результат |
---|---|---|---|
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. |
Условные операторы
Условные операторы могут использовать операторы, показанные в следующей таблице:
Оператор | Объяснение | Пример | Результаты |
---|---|---|---|
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. В инструменте Вычислить поле уравнения треков можно использовать, если у входного слоя активировано время, отмечено В выражении учитывается трекинг и одно или несколько полей идентифицируются для идентификации треков. Функции отслеживания треков перечислены в следующей таблице:
Функция | Объяснение | Пример | Результат | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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(value) | Сумма расстояний, пройденных между наблюдениями от первого до текущего, плюс заданное значение. |
TrackDistanceWindow(value1, value2) | Расстояние между первым значением (включительно) и последним значением (не включительно) в окне о текущем наблюдении (0). |
TrackCurrentSpeed() | Скорость между предыдущим наблюдением и текущим наблюдением. |
TrackSpeedAt(value1) | Скорость при наблюдении относительно текущего наблюдения. Например, при значении 2 это скорость при наблюдении через два наблюдения после текущего. |
TrackSpeedWindow(value1, value2) | Значения скорости между первым значением (включительно) и последним значением (не включительно) в окне вокруг текущего наблюдения (0). |
TrackCurrentAcceleration() | Ускорение между предыдущим наблюдением и текущим наблюдением. |
TrackAccelerationAt(value1) | Ускорение на наблюдении относительно текущего наблюдения. |
TrackAccelerationWindow(value1, value2) | Значения ускорения между первым значением (включительно) и последним значением (не включительно) в окне вокруг текущего наблюдения (0). |
В примерах расчетов расстояния, скорости и ускорения используются примеры из следующего изображения.
Функция | Пример результата | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
TrackCurrentDistance() |
| ||||||||||||||
TrackDistanceAt(2) |
| ||||||||||||||
TrackDistanceWindow(-1, 2) |
| ||||||||||||||
TrackCurrentSpeed() |
| ||||||||||||||
TrackSpeedAt(2) |
| ||||||||||||||
TrackSpeedWindow(-1, 2) |
| ||||||||||||||
TrackCurrentAcceleration() |
| ||||||||||||||
TrackAccelerationAt(2) |
| ||||||||||||||
TrackAccelerationWindow(-1, 2) |
|