В инструменте Присоединить объекты используются выражения Arcade, которые задают условия соединения. В некоторых случаях вы можете захотеть указать условие для выбора объектов, которые должны быть включены в соединение. Можно выполнять как простые условия присоединения (такие как field a > field c), так и сложные условия. Условия тестируются на каждом объекте, чтобы определить, что будет проанализировано. Вычисления выполняются при запуске анализа на ArcGIS GeoAnalytics Server.
В ArcGIS Enterprise 10.6 и более поздней используют формат выражений Arcade. С помощью Arcade, имена полей в инструменте Присоединить объекты форматируются как $target["field name"] и $join["field name"] или $target.fieldname и $jon.fieldname. Первый вариант, $target["field name"] и $join["field name"], требуется, когда имя поля содержит пробел. Все примеры ниже используют эту опцию.
Примечание:
Присоединить объекты требует два входных набора – целевой слой и присоединяемый слой. Соответственно, любое выражение Arcade в Присоединить объекты должно выделять какой набор данных используется. Например, операция для вычисления будет ли в целевом слое поле под названием field1 больше, чем поле в присоединяемом слое под названием field2, выражается как $target["field1"] > $join["field2"]. Это отличается от выражений в других GeoAnalytics Tools, которые используют формат $feature["fieldname"].Более подробно о выражениях Arcade
Выражения Arcade используются в GeoAnalytics Server следующими инструментами:
- Выражения буфера в Заново создать треки
- Выражения буфера в Создать буферы
- Присоединение объектов с использованием начальных и конечных выражений в инструменте Присоединить объекты
- Вычисление значений полей в инструменте Вычислить поле
Математические операторы и примеры функций
Выражения также могут математически обрабатывать цифры. Ниже приводится примеры доступных операций:
Более подробно о математических операциях и функциях, доступных в Arcade
Оператор | Объяснение | Пример | Результат |
---|---|---|---|
a + b | a плюс b | fieldname содержит значение 1.5 $target["fieldname"] + 2.5 | 4.0 |
a - b | a минус b | fieldname содержит значение 3.3 $target["fieldname"]- 2.2 | 1.1 |
a * b | a умножить на b. | fieldname содержит значение 2.0 $join["fieldname"] * 2.2 | 4.4 |
a / b | a разделить на b | fieldname содержит значение 4.0 $join["fieldname"] / 1.25 | 3.2 |
abs( a ) | Возвращает абсолютное (положительное) значение числа a. | fieldname содержит значение -1.5 abs($target["fieldname"]) | 1.5 |
log( a ) | Возвращает натуральный логарифм (по основанию Е) от a. | fieldname содержит значение 1 log($join["fieldname"]) | 0 |
sin( a ) | Вычисляет тригонометрический синус a. Входные данные должны представлять значение угла в радианах. | fieldname содержит значение 1.5707 sin($target["fieldname"]) | 1 |
cos( a ) | Возвращает тригонометрический косинус a. Входные данные должны представлять значение угла в радианах. | fieldname содержит значение 0 cos($join["fieldname"]) | 1 |
tan( a ) | Возвращает тангенс a. Входные данные должны представлять значение угла в радианах. | fieldname содержит значение 0 tan($target["fieldname"]) | 0 |
sqrt( a ) | Возвращает квадратный корень a. | fieldname содержит значение 9 sqrt($join["fieldname"]) | 3 |
min( a, b ) | Возвращает самое малое значение числа между a и b. | fieldname содержит значение 1.5 и значение -3 min($join["fieldname"], -3) | -3 |
max( a, b ) | Возвращает самое высокое значение числа между a и b. | fieldname1 содержит значение 1,5 и fieldname2 содержит значение -3 max($target["fieldname1"], $join["fieldname2"]) | 1.5 |
constrain(<value>,<low>,<high>) | Возвращает входное значение, если оно находится в пределах заданных границ. Если входное значение меньше самого нижнего значения, возвращается нижнее значение. Если входное значение больше самого высокого значения, возвращается самое высокое значение. | constrain($target["distance"], 0, 10) constrain($join['Store dist'], 6, distance) | Возвращает 0, если distance меньше 0, 10, если distance больше 10, и distance в других случаях. Возвращает 6, если Store dist меньше 6, distance если Store dist больше чем distance, и Store dist в других случаях. |
Пример умножения для выражения условия присоединения, использующего поле из целевого набора данных.
$target["Distance"] * 2 > $join["DistField"]
Примеры текстовых функций
Выражения условия присоединения могут обрабатывать текст. Ниже приводится примеры доступных операций:
Более подробно об текстовых функциях, доступных в Arcade
Оператор | Объяснение | Пример | Результат |
---|---|---|---|
concatenate( <values>, <separator>) | Соединяет значения вместе и возвращает строку.
| fieldname содержит значение GeoAnalytics Concatenate ([$target["fieldname"], "is", "great!"], ' ') | GeoAnalytics – великолепен! |
find(<searchText>, <text>, <startPos>) | Находит строку в пределах строки. Групповые символы не поддерживаются.
| fieldname1 содержит значение 14NorthStreet, и fieldname2 содержит значение North. find($target["fieldname2"], $join["fieldname1"]) | 2 |
lower(<value>) | Делает буквы в строке строчными.
| fieldname содержит значение GEOANALYTICS lower($join["fieldname"]) | геоаналитика |
Текстовый пример использования find и lower.
find(("north"), lower("146NorthStreet")) == False
Примеры функций дат
Выражения присоединения могут обрабатывать даты. Ниже приводится примеры доступных операций:
Более подробно об операциях с датами, доступных в 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>) | Анализирует значение или набор значений в строке даты.
| fieldname содержит значение 1476987783555 Пример 1: Date($target["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($join["fieldname"]) Пример 2: fieldname - строковое поле в формате строки ISO 8601 со значением 2012-09-27 Пример 2: fieldname - строковое поле в формате строки ISO 8601 со значением Year(Date($target["fieldname"])) | Пример 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
Функция | Объяснение | Пример | Результат |
---|---|---|---|
constrain(<value>,<low>,<high>) | Возвращает входное значение, если оно находится в пределах заданных границ. Если входное значение меньше самого нижнего значения, возвращается нижнее значение. Если входное значение больше самого высокого значения, возвращается самое высокое значение. | constrain( $target["distance"], 0, 10) constrain($join['Store dist'], 6, distance) | Возвращает 0, если distance меньше 0, 10, если distance больше 10, и distance в других случаях. Возвращает 6, если Store dist меньше 6, distance если Store dist больше чем distance, и Store dist в других случаях. |
iif(<condition>,<true value>,<false value>) | Возвращает одно значение, если условие оценивается как true, и другое значение, если условие оценивается как false. <true value> и <false value> могут быть следующими:
| iif($target["field1"] > $join["field2"], $join["field1"], 0) iif($target["field1"] > $join["field2"], iif($target["field2"] = 0, $join["field3"], $target["field4"]), 0) | Возвращает field1, если field1 больше чем field2, и 0 в других случаях. Возвращает результат второй функции iif, если field1 больше чем field2, и 0 в других случаях. |
when(<expression1> , <result1> , <expression2> , <result2> , ... , <expressionN> , <resultN>, <default>) | Оценивает несколько выражений поочередно до тех пор, пока одно из них не даст значения true.
| when(($target["field1"] + 10) > 1, 1,($join["field2"] + 10) > 2 , 2, $target["field3"]) | Если field1 + 10 больше 1, возвращает 1. Если нет, проверяет, больше ли field2 + 10 значения 2. Если да, то будет возвращено 2. Если нет, то будет возвращено field3. |
decode(<conditional val> , <case1> , <result1>, <case2>, <result2>, ... <caseN>, <resultN>, <defaultValue> ) | Оценивает выражение, а затем сравнивает его значение с последующими параметрами. Если выражение совпадает, возвращается следующее значение параметра. Если нет, существует опция, чтобы последний параметр стал возвращаемым значением по умолчанию.
| decode($target["field1"] + 3 , $join["field1"], 1, $target["field2"], 2, 0) | Сравнивает тождество между значением условия field1 + 3 и case1 field1. Если true, то будет возвращено 1. Если false, сравнивает тождество между field1 + 3 и field2. Если true, возвращается 2; иначе возвращается 0. |