Skip to main content

Задание текста для надписей

Строки текста для надписей основываются на одном или нескольких атрибутивных полях пространственных объектов. Так как надписи динамические, при изменении атрибутивных значений текст надписи тоже автоматически изменится. Когда вы включаете надписывание, текст надписи создается на основании содержания одного поля. Например, на метеорологической карте вы можете подписать для каждой метеостанции суточное количество осадков или максимальную скорость ветра. Эта единственная надпись, основанная на поле, которая задается на вкладке Надписи.

Примечание:

По умолчанию в качестве поля надписи используется первое поле текстового типа с текстом Name в названии (в любом регистре). Если поля с таким текстом в имени не существует, по умолчанию используется первое поле текстового типа, затем первое поле целочисленного типа, а затем первое поле любого типа.

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

Более подробно о построении выражений надписей

Вы можете вставить пользовательский текст в выражение надписи, чтобы он отображался вместе с этими надписями на карте. Например, на карте погоды вы можете добавить для каждой надписи аббревиатуры единиц измерения (например, in для дюймов и MPH для миль в час). Для изменения отображения текста в выражениях надписей можно также использовать ArcGIS Arcade, Python, VBScript или JScript. Например, можно вставить функцию, чтобы на одной строке указывалось количество осадков, а на другой - скорость ветра. Оба этих примера показаны на следующем изображении:

Пример размещения надписей

Можно еще точнее управлять отображением текста на карте с помощью тегов форматирования текста ArcGIS Pro. С помощью тегов форматирования текста можно задавать различные свойства отображения для разных частей текста надписи. Например, количество осадков можно указать синим курсивом, а скорость ветра – черным полужирным шрифтом, как показано на следующем рисунке.

Пример размещения надписей

Выражения надписей:

С помощью сложных выражений надписей можно добавить логику Arcade, Python, VBScript или JScript в выражения надписей, в том числе логику условий и циклов. Например, можно создать надписи, где заглавными будут только первые буквы каждого слова, независимо от того, как текст хранится в таблице атрибутов. Вы также можете использовать выражения надписи, чтобы скорректировать формат надписей с помощью тегов форматирования ArcGIS Pro. Это специальные символы для изменения внешнего вида всей надписи или ее части. Например, с помощью тегов форматирования можно выделить первую строчку в надписи полужирным шрифтом.

Подсказка:

Выражения используются по всей платформе ArcGIS. Профиль надписывания применяется к выражениям надписей. Выражения Arcade работают в ArcGIS Pro и ArcGIS Maps SDKs for Native Apps, где другие языки выражений могут не поддерживаться.

Примечание:

В Windows 11 версии 24H2 VBScript становится доступным по запросу и требует наличия функции VBScript.

Вы можете сделать следующее:

  • Преобразуйте тип выражения в Python или Arcade.

  • Включите дополнительную функцию VBScript в системных настройках Windows.

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

Если у вас есть описания кодированных значений в ваших данных, вы можете применять опцию Использовать описания кодированных значений, чтобы отображать эти описания в надписи, вместо кода.

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

Примечание:

Значения NULL не преобразуются в текстовые строки. Они будут восприниматься как выражения NULL.

При использовании Arcade значения полей сохраняют свой тип данных.

В следующих примерах добавляются два целочисленных поля:

Arcade

$feature.FIELD1 + $feature.FIELD2

Python

int([FIELD1]) + int([FIELD2])

VBScript

cint([FIELD1]) + cint([FIELD2])

JScript

parseInt([FIELD1]) + parseInt([FIELD2])

Дополнительные опции Maplex Label Engine

При использовании механизм надписывания Maplex вы можете управлять пробелами, используемыми в надписях.

Опция Удалить лишние пробелы удаляет дополнительные пробелы из текста надписи. Лишними могут считаться все пробелы в начале, в конце и в середине надписи. Если эта опция отключена, пробелы используются для форматирования, например, для добавления отступа текста в многострочной надписи.

Опция Удалить лишние разрывы строк удаляет дополнительные переносы строки из текста надписи. Если эта опция отключена, в составной надписи можно использовать пустые строки.

Написание выражения надписи

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

  1. Убедитесь, что опция По надписыванию является активным способом отображения панели Содержание. Щелкните вкладку По надписыванию .

  2. Выберите класс надписей на панели Содержание и щелкните вкладку Надписи.

  3. На вкладке Надписи в группе Класс надписей щелкните кнопку Выражение .

  4. Выберите язык из меню Язык.

  5. Введите выражение Arcade, Python, VBScript или JScript.

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

    Пр работе с Python, VBScript и JScript имена полей заключаются в квадратные скобки [] независимо от типа данных в источнике данных слоя. Arcade использует другой способ задания полей.

    Синтаксис поля

    $feature.fieldname

    Синтаксис присоединенного поля

    $feature['tablename.fieldname']

    Синтаксис поля домена кодированных значений

    DomainName($feature, 'fieldname')

    Подсказка:

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

    Внимание:

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

    Внимание:

    При использовании обратной косой черты в выражении надписи, необходимо избегать ее, используя вторую обратную косую черту. Например, для надписи "C:\\Project\\" + $feature.ProjectId" использовать вариант C:\Project\2. При использовании Arcade обратная косая также может быть заменена на TextFormatting.BackwardSlash.

    При желании введите теги форматирования текста ArcGIS Pro в окно Выражение, чтобы отформатировать часть надписи.

    Примечание:

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

    Если выражение будет занимать несколько строк кода, установите отметку в поле Дополнительно и введите выражение надписи. Это не требуется при использовании Arcade.

  6. Щелкните Проверить , чтобы убедиться в отсутствии синтаксических ошибок, а затем щелкните Применить.

    Если есть синтаксические ошибки, то номер строки и причина будут указаны в ошибке. Чтобы увидеть эти номера, щелкните правой кнопкой на окне ввода выражения надписи и выберите Показать номера строк.

    Как обычные, так и сложные выражения надписей, можно экспортировать в файлы выражений надписей (.lxp), которые потом можно загрузить в другие слои или карты.

Импорт выражения надписи

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

  1. Убедитесь, что опция По надписыванию является активным способом отображения панели Содержание. Щелкните вкладку По надписыванию .

  2. Выберите класс надписей на панели Содержание и щелкните вкладку Надписи.

  3. На вкладке Надписи в группе Класс надписей щелкните кнопку Выражение .

  4. Выберите язык из меню Язык.

  5. Щелкните Импорт , перейдите к файлу выражения надписи (.lxp) и нажмите ОК.

  6. Щелкните Проверить , чтобы убедиться в отсутствии синтаксических ошибок, а затем щелкните Применить.

Примеры выражений

Примеры выражений надписи показаны в следующих подразделах.

Присоединение строки к значению поля

Присоединение строки к значению поля. Например, следующее выражение создаст надпись, в которой перед значением поля 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 и полем ADDRESS в разных строках:

Arcade

$feature.NAME + TextFormatting.NewLine + $feature.ADDRESS

Python

[NAME] + '\n' + [ADDRESS]

VBScript

[NAME] & vbCrLf& [ADDRESS]

JScript

[NAME] + "\r" + [ADDRESS]

Создание многострочного текста из одного поля

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

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

Указание выражения с условием (if else). Эти функции надписывают города большим красным шрифтом, если население больше 250 тыс. человек, или шрифтом по умолчанию – если численность населения меньше 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-выражение для класса надписей, чтобы не ломать голову с выражениями надписей.

Дополнительные ресурсы

Дополнительные сведения см. в:

Часть информации из этих дополнительных ресурсов хранится на веб-страницах, которые не были созданы, не принадлежат и не поддерживаются Esri. Esri не гарантирует доступность этих страниц и не несет ответственности за их содержание.