Выражения присоединения объектов

В инструменте Присоединить объекты используются выражения 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:

Прежние версии:

Расширение ArcGIS GeoAnalytics Server является устаревшим в ArcGIS Enterprise. Финальная версия GeoAnalytics Server включена в ArcGIS Enterprise 11.3. Эти инструменты доступны в версии ArcGIS Enterprise 11.3 и более ранних версиях.

Математические операторы и примеры функций

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

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

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

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

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

Concatenate ([$target["fieldname"], "is", "great!"], ' ')

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

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

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

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

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

find($target["fieldname2"], $join["fieldname1"])

2

lower(<value>)

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

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

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

lower($join["fieldname"])

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

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

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

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

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

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

В Arcade значения месяцев возможны в диапазоне от 0 (Январь) до 11 (Декабрь), дней - от 1 до 31, часов - от 0 (12:00 a.m.) до 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($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>)

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

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

Пример 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($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.

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

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

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

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

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

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

Связанные разделы