Строки текста для надписей основываются на одном или нескольких атрибутивных полях пространственных объектов. Так как надписи динамические, при изменении атрибутивных значений текст надписи тоже автоматически изменится. Когда вы включаете надписывание, текст надписи создается на основании содержания одного поля. Например, на метеорологической карте вы можете подписать для каждой метеостанции суточное количество осадков или максимальную скорость ветра. Эта единственная надпись, основанная на поле, которая задается на вкладке Надписи.
Примечание:
По умолчанию в качестве поля надписи используется первое поле текстового типа с текстом «Name» в названии (в любом регистре). Если поля с таким текстом не существует, это будет первое поле текстового типа, затем первое целочисленное поле или первое поле любого типа.
Вы можете добавлять атрибутивные поля для своих надписей. Например, можно надписать для каждой метеостанции и количество осадков, и скорость ветра. Независимо от того, основаны ваши надписи на одном или нескольких полях, выражение, определяющее текст вашей надписи, называется Выражение надписи. Каждый класс надписей имеет свое собственное выражение.
Более подробно о построении выражений надписей
Вы можете вставлять ваш собственный текст в выражения надписей, чтобы они отображались на карте совместно с надписями. Например, на вашей карте погоды вы можете показать на каждой надписи единицы измерения (например, мм для количества осадков или м/сек для скорости ветра). Для изменения отображения текста в выражениях надписей можно также использовать Arcade, Python, VBScript или JScript. Например, можно вставить функцию, чтобы на одной строчке указывалось количество осадков, а на второй строчке - скорость ветра. Оба этих примера показаны на следующем рисунке:
Можно еще точнее управлять отображением текста на карте с помощью тегов форматирования текста ArcGIS Pro. С помощью тегов форматирования текста можно задавать различные свойства отображения для разных частей надписи. Например, количество осадков можно указать синим курсивом, а скорость ветра – черным полужирным шрифтом, как показано на следующем рисунке.
Выражения надписи
С помощью сложных выражений надписей можно добавить логику Arcade, Python, VBScript или JScript в ваши выражения надписей, в том числе логику условий и циклическую. Например, можно создать надписи, где заглавными будут только первые буквы каждого слова, независимо от того, как текст хранится в таблице атрибутов. Вы также можете использовать выражения надписи, чтобы скорректировать формат надписей с помощью тегов форматирования ArcGIS Pro. Это специальные символы, которые можно использовать для изменения отображения частей ваших надписей. Например, с помощью тегов форматирования можно выделить первую строчку в надписи полужирным шрифтом.
Подсказка:
Выражения Arcade используются по всей платформе ArcGIS. Выражения Arcade работают в Runtime, ArcGIS Pro и ArcGIS Runtime SDK, в отличие от других языков.Выражение надписи может быть простым однострочным, или более сложным, содержащим несколько строк кода с применением программной логики. Arcade по умолчанию разрешает сложные выражения. При использовании Python, VBScript или JScript, необходимо включить опцию Дополнительно, а код должен быть внедрен в функцию для использования многострочных выражений.
Если у вас есть описания кодированных значений в ваших данных, вы можете применять опцию Использовать описания кодированных значений, чтобы отображать эти описания в надписи, вместо кода.
Значения поля автоматически вносятся в текстовые строки. Поэтому, если вы хотите использовать числовое значение в арифметической операции или при сопоставлении, необходимо снова вернуть им числовой тип данных.
Примечание:
Значения NULL не преобразуются в текстовые строки. Они будут восприниматься как выражения NULL.
При использовании Arcade значения полей сохраняют их тип данных.
В следующих примерах добавляются два целочисленных поля:$feature.FIELD1 + $feature.FIELD2
int([FIELD1]) + int([FIELD2])
cint([FIELD1]) + cint([FIELD2])
parseInt([FIELD1]) + parseInt([FIELD2])
Дополнительные опции Maplex Label Engine
Maplex Label Engine обеспечивает дополнительную возможность управления пробелами в надписях.
Опция Удалить лишние пробелы удаляет дополнительные пробелы из текста надписи. Лишними могут считаться все пробелы в начале, в конце и в середине надписи. Если эта опция отключена, для форматирования используются пробелы, например, для добавления отступа текста в составной надписи.
Опция Удалить лишние разрывы строк удаляет дополнительные переносы строки из текста надписи. Если эта опция отключена, в составной надписи можно использовать пустые строки.
Написание выражения надписи
- Убедитесь, что опция По надписыванию является активным способом отображения панели Содержание. Щелкните вкладку По надписыванию .
- Выберите класс надписей на панели Содержание и щелкните вкладку Надписи.
- На вкладке Надписи в группе Класс надписей щелкните кнопку Выражение .
- Выберите язык из меню Язык.
- Введите выражение Arcade, Python, VBScript или JScript. Вы также можете создать выражение, дважды щелкнув поле, чтобы добавить его в выражение, или выделить поле, щелкнуть правую кнопку мыши и выбрать Присоединить, чтобы добавить поле в выражение, отделив его пробелом или пробелами. Используйте предлагаемые текстовые функции, дважды щелкая их для добавления в выражение.
При использовании Python, VBScript и JScript поля заключаются в квадратные скобки [ ] независимо от типа данных источника данных слоя. Arcade использует другой способ задания полей.
Синтаксис поля $feature.fieldname
Синтаксис присоединенного поля $feature['tablename.fieldname']
Синтаксис поля домена кодированных значений DomainName($feature, 'fieldname')
Подсказка:
При работе с Arcade вы можете использовать функцию Консоли, которая поможет выявить ошибки в выражениях надписей. Когда вы нажимаете Проверить , то появляется ссылка Посмотреть сообщения консоли, если в выражение вставлена функция Консоль. Щелкните на ссылку, чтобы открыть окно Сообщения консоли. Работая с Arcade, вы также можете указать заголовок для своего выражения.
Внимание:
При надписывании поля, где имя содержит специальные символы или начинается с цифры, Arcade использует тот же формат, что и для синтаксиса присоединяемого поля, например, $feature['33field'], $feature['acres²'], $feature['st_area(SHAPE)'].
При желании, введите теги форматирования текста ArcGIS Pro в окно Выражение, чтобы отформатировать часть текста надписи.
Примечание:
При использовании Arcade форматирование поля слоя не переносится на надписи. Нужно использовать методы форматирования Arcade.
Если ваше выражение будет разбиваться на несколько строчек кода, отметьте Дополнительно и затем вводите выражение. Это не требуется при использовании Arcade.
- Щелкните Проверить, чтобы убедиться в отсутствии синтаксических ошибок, затем щелкните Применить.
Если есть синтаксические ошибки, то номер линии и причина будут указаны в ошибке. Чтобы увидеть эти номер, щелкните правой кнопкой на входном окне выражения надписи и выберите Показать номера линий.
Как обычные, так и сложные выражения надписей, можно экспортировать в файлы выражений надписей (.lxp), которые потом можно загрузить в другие слои или карты.
Примеры выражений
Вот некоторые примеры выражений надписей:
- Объедините строку с значением поля, например, это выражение строит надписи, в которых перед значениями поля PARCELNO присутствует текст: "Parcel no:" (номер участка):
Arcade "Parcel no: " + $feature.PARCELNO
Python "Parcel no: " + [PARCELNO]
VBScript "Parcel no: " & [PARCELNO]
JScript "Parcel no: " + [PARCELNO]
- Округление десятичного числа до определенного количества знаков после запятой; например, это выражение показывает значения поля AREA округленными до одного знака после запятой:
Arcade round(number($feature.AREA), 1)
Python round(float([AREA]), 1)
VBScript Round ([AREA], 1)
JScript function FindLabel ( [AREA] ) { var ss; var num= parseFloat([AREA]); ss = num.toFixed(1); return (ss); }
- Измените регистр надписи на строчные или прописные; например, это выражение отображает поле NAME в нижнем регистре:
Arcade lower($feature.NAME)
Python def FindLabel ( [NAME] ): S = [NAME] S = S.lower() return S
VBScript LCase ([NAME])
JScript [NAME].toLowerCase()
- Преобразование текстовых надписей в правильный регистр; например, это выражение принимает поле NAME, которое записано заглавными символами, и изменяет его регистр на правильный:
Arcade Proper($feature.NAME, 'firstword')
Python def FindLabel ( [NAME] ): S = [NAME] S = S.title() return S
VBScript Function FindLabel ( [NAME] ) FindLabel = UCase(Left([NAME],1)) & LCase(Right([NAME], Len([NAME]) -1)) End Function
JScript function FindLabel ( [NAME] ) { var str = [NAME]; var iLen = String(str).length; var upper = (str.substring(0,1)).toUpperCase(); var lower = (str.substring(1, iLen)).toLowerCase() return upper + lower; }
- Создайте многострочный текст, например, это выражение создает надпись из поля NAME и двух полей адреса, разнесенных по разным строчкам:
Arcade "Name: " + $feature.NAME + TextFormatting.NewLine + $feature.ADDRESS_1 + TextFormatting.NewLine + $feature.ADDRESS_2
Python "Name: " + [NAME] + '\n' + [ADDRESS_1] + '\n' + [ADDRESS_2]
VBScript "Name: " & [NAME] & vbCrLf& [ADDRESS_1] & vbCrLf& [ADDRESS_2]
JScript "Name: " + [NAME] + "\r" + [ADDRESS_1] + "\r" + [ADDRESS_2]
- Создание текста из нескольких строк на основании текста из одного поля; например, это выражение разбивает текст по строчкам в местах, где стоят запятые:
Arcade replace($feature.LABELFIELD, ', ', '\n')
Python def FindLabel ( [LABELFIELD] ): S = [LABELFIELD] S = S.replace(', ', '\n') return S
VBScript Function FindLabel ( [LABELFIELD] ) FindLabel = replace([LABELFIELD], ", ", vbnewline) End Function
JScript function FindLabel ( [LABELFIELD] ) { var r, re; var str = [LABELFIELD]; re = /,/g; r = str.replace(re, "\r"); return r; }
- Форматирование ваших надписей; например, это выражение отображает надпись как денежную:
Arcade "Occupancy Revenue: $" + round($feature.MAXIMUM_OC * $feature.RATE, 2)
Python def FindLabel ( [MAXIMUM_OC], [RATE] ): import locale locale.setlocale(locale.LC_ALL, '') S = locale.currency(float([MAXIMUM_OC]) * float([RATE])) return S
VBScript "Occupancy Revenue: " & FormatCurrency ([MAXIMUM_OC] * [RATE])
JScript function FindLabel ( [MAXIMUM_OC], [RATE] ) { var ss; var num1 = parseFloat([MAXIMUM_OC]); var num2 = parseFloat([RATE]); var num3 = num1 * num2 ss = num3.toFixed(2); return ("$" + ss); }
- Использование части поля для надписи; например, это выражение отображает символы с третьего по пятый:
Arcade mid($feature.LABELFIELD, 2, 3)
Python def FindLabel ( [LABELFIELD] ): S = [LABELFIELD] return S[2:5]
VBScript Mid([LABELFIELD], 3, 3)
JScript function FindLabel ( [LABELFIELD] ) { var S; var str = [LABELFIELD]; S = str.substring(2, 5); return S; }
- Указание выражения с условием (if else). Эти функции надписывают города большими красными буквами, если население больше 250 тыс. человек, или шрифтом по умолчанию – если меньше.
Arcade if ($feature.POPULATION >=250000) { return "<CLR red='255'><FNT size = '14'>" + $feature.NAME + "</FNT></CLR>" } else { return $feature.NAME }
Python def FindLabel ( [NAME], [POPULATION] ): if int([POPULATION]) >= 250000: return "<CLR red='255'><FNT size = '14'>" + [NAME] + "</FNT></CLR>" else: return [NAME]
VBScript Function FindLabel ([NAME], [POPULATION]) if (cLng([POPULATION]) >= 250000) then FindLabel = "<CLR red='255'><FNT size = '14'>" + [NAME] + "</FNT></CLR>" else FindLabel = [NAME] end if End Function
JScript function FindLabel ( [NAME], [POPULATION] ) { if (parseFloat([POPULATION]) >= 250000){ return ("<CLR red='255'><FNT size = '14'>" + [NAME] + "</FNT></CLR>"); } else return ([NAME]); }
Примечание:
Для надписывания поднабора объектов на основании значения поля, создайте SQL-выражение для класса надписей, чтобы не ломать голову с выражениями надписей.Ниже приведены дополнительные ресурсы:
- Справочник по языку Arcade
- Справочник по языку Python
- Справочник по языку Microsoft VBScript
- Справочник по языку Microsoft JScript
(Часть информации находится на веб-страницах, не принадлежащих компании Esri и не поддерживаемых ею. Esri не гарантирует доступность этих страниц и не несет ответственности за их содержание.)