Установка пользовательских выражений для символов

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

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

Примечание:

Единый символ и символы диаграмм не поддерживают использование выражений Arcade.

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

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

  1. Выберите векторный слой на панели Содержание при необходимости.
  2. На вкладке Векторный слой в группе Отображение щелкните Символы Символы, чтобы открыть панель Символы, если она еще не открыта.
  3. Выберите основные символы.
  4. Рядом с ниспадающим меню Поле нажмите кнопку Задать выражение Задать выражение.
  5. В диалоговом окне Конструктор выражений выполните следующее:
    1. При необходимости добавьте текст Заголовка для пользовательского выражения.
    2. В разделе Поля дважды щелкните имя поля, чтобы добавить его к выражению. Если количество полей в данных велико, нажмите кнопку ДополнительноAdvanced, чтобы отфильтровать список и найти нужное вам поле.
    3. В разделе Функции просмотрите библиотеку математических, текстовых и основанных на дате функций. Щелкните кнопку Вспомогательный тип Helper Type, чтобы отфильтровать список функций, и дважды щелкните функцию, чтобы добавить ее в выражение.
    4. Если выбрано поле, щелкните ниспадающее меню Вставка значений, чтобы найти и добавить определенные значения в выражение.
    5. В разделе Выражение напишите пользовательское выражение, используя синтаксис языка Arcade.
      Внимание:

      При оформлении поля, в котором имя содержит специальные символы или начинается с цифры, Arcade использует тот же формат, что и для синтаксиса присоединяемого поля, например, $feature['33field'], $feature['acres²'] и $feature['st_area(SHAPE)'].

    6. Щелкните Проверить Проверить, чтобы проверить корректность выражения.

      Сообщения об ошибках проверки содержат руководство, если выражение некорректно. Вы также можете щелкнуть Импорт Import, чтобы импортировать, или Экспорт Экспорт, чтобы экспортировать выражения за пределы ArcGIS Pro.

  6. Щелкните ОК, чтобы задать выражение для поля.

    Символы обновятся в соответствии с изменениями.

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

Основы выражений символов

Настройка символов с помощью выражений предполагает, что вы знакомы с Arcade. Arcade обеспечивает согласованную систему функциональности для всего программного обеспечения ArcGIS. Сюда относятся ArcGIS Pro, ArcGIS API for JavaScript и другие связанные приложения.

Выражения символов Arcade используют профиль Визуализации. Каждый профиль имеет определенный набор глобальных (профильных) переменных. Он служит контекстной основой переменных выражения и возвращаемых значений. Выражения вытягивания также используют профиль визуализации. Более подробно см. в Визуализация.

Простые выражения содержат определение значения поля и математическую операцию. Например, вы можете использовать глобальную переменную $feature для ссылки на поле в таблице атрибутов векторного слоя, например население региона в 2020 году, и вычесть из него данные населения за 2010 год, чтобы определить разницу. Результирующее значение выражения возвращается и используется при определении символа объекта.

$feature.2020POP - $feature.2010POP

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

var days_from_today = DateDiff(Now(), date_field, “days”);

Переменные профиля визуализации

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

  • Глобальная переменная Arcade $view.scale ссылается на текущий масштаб вида (карты, сцены или макета). Если вы задаете переменной значение $view.scale как часть выражения символов, символы могут изменяться в зависимости от текущего масштаба вида. Вводный пример приведен ниже.

    var mapscale = $view.scale;
    var weight = $feature.STROKEWGHT;
    var size;
    var normal = 1000000;
    
    size = normal/mapscale*weight
    return size

    В этом выражении переменная mapscale создается для хранения значения масштаба. Выражение умножает масштаб на ширину weight, которая является производной от значения в поле STROKEWGHT, и делит это произведение на пользовательское значение normal. В результате изменяется толщина штрихов символов при увеличении и уменьшении масштаба изображения. Это полезно как альтернатива масштабированию класса символов.

  • Глобальная переменная $view.timeProperties позволяет сделать доступными настройки бегунка времени, когда он (бегунок времени) включен на карте. В выражениях, использующих эту переменную, должны быть предусмотрены ситуации, когда бегунок времени не включен. В приведенном ниже примере, начинающегося с выражения HasKey, проверяется наличие бегунка времени в $view. Если возвращается true, то считывается else.
    if (HasKey($view, 'timeProperties') == false || $view.timeProperties.currentEnd == null)
      return -1
    else
      return (
        DateDiff($view.timeProperties.currentEnd, $view.timeProperties.currentStart, 'days') 
        -
        DateDiff($view.timeProperties.currentEnd, $feature.Date_time, 'days') 
      )
  • Глобальная переменная $feature ссылается на поле векторного слоя в отношении символов.

    Подсказка:

    Если имя поля содержит символ, к которому невозможно получить доступ с помощью точечной записи, поместите имя в квадратные скобки, например, $feature.["joinKey.fieldName"].

Примеры профиля визуализации

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

Создание классов символов

В большинстве случаев вы можете вручную настроить слой для использования градуированных символов или градуированных цветов. Однако, если вы ссылаетесь на информацию из другого источника, которая часто меняется (например, средняя цена товара по стране), вы должны каждый раз обновлять или сбрасывать настройки символов. Чтобы избежать этого, вы можете задать выражение для выполнения вычислений и использовать результаты с помощью существующего метода классификации.

	var stationID = $feature.stationID; //ID number for gas station
var stationPrice = $feature.stationPrice; //Price at gas station
var avgPrice = '4.164' //National average price of gas

var priceDiffUL = Round(avgPrice - stationPrice, 2); //Calculate the difference

return priceDiffUL;

В этом примере значение результата определяется из двух полей, stationID и stationPrice.

Классификация уникальных значений

Вы можете написать пользовательское выражение для создания символов уникальных значений, особенно если значения четко определены и символы используются в нескольких проектах. Большинство выражений, написанных для символов уникальных значений, присваивают переменные классам и применяют логические функции if-else или when для определения надписей классов символов. В приведенном ниже примере возвращаемое уникальное значение зависит от того, является ли оно элементом массива примера.

var example_array = [1, 2, 3, 4];
if (IndexOf(example_array, $feature.VALUE) > -1) {
return “Value is 1, 2, 3 or 4”;
} else {
return “Other value”;
}

В другом примере значения сгруппированы на основе расширенной шкалы торнадо Фудзиты. Этот пример аналогичен приведенному выше примеру отображения на основе масштаба, но в этом выражении не используется переменная $view.scale.

var WindSpeed = $feature.WINDSPEED
when (
WindSpeed > 261, “F5”,
WindSpeed > 207, “F4”,
WindSpeed > 158, “F3”,
WindSpeed > 113, “F2”,
WindSpeed > 73, “F1”, 
“F0”
)

Метод отображения на основе масштаба.

В первом примере переменная vs хранит текущее значение масштаба. Переменная wind хранит значение скорости ветра для объектов, которое используется для определения точного размера символа. Это значение сохраняется как windSize, размер которого затем изменяется в зависимости от масштаба карты.

var vs = $view.scale
var wind = $feature.WINDSPEED

var windSize = When(
    wind > 136, 24, //Category 5
    wind > 112, 23, //Category 4
    wind > 95, 22, //Category 3
    wind > 82, 21, //Category 2
    wind > 63, 20, //Category 1
    wind > 33, 18, //Tropical Storm
    16) //Tropical Depression

when(
    vs >=37000000, windSize,
    vs >=18500000, 1 + windSize,
    vs >=9300000, 2 + windSize,
    vs >=4700000, 4 + windSize,
    vs >=2000000, 6 + windSize, 8 + windSize)

Во втором примере объекту присваиваются символы из поля EXAMPLE только тогда, когда текущий масштаб больше 1:30000.

Var scale = $view.scale
var feature = $feature.EXAMPLE
if(scale > 30000 && feature == 10){
return 'Feature equals 10'
}
return 'Feature is not equal to 10'

Пользовательские выражения предоставляют гибкий способ измерения и динамической настройки масштабирования символов, особенно если символы не основаны на шаблоне. Более подробно см. в разделе Размеры символов, зависящие от масштабов.

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