Вычислить поле (Управление данными)

Краткая информация

Вычисляет значения в заданном поле класса объектов, векторного слоя или растра.

Использование

    Внимание:

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

  • Более подробно о выражениях Python см. в примерах Вычислить поля в Python.

    Более подробно о выражениях Arcade см. руководство по ArcGIS Arcade.

    Более подробно о выражениях SQL см. в разделе Вычислить значения полей.

  • При использовании с выбранным набором объектов, например, созданных из запроса в инструментах Создать векторный слой или Выбрать в слое по атрибуту, этот инструмент обновит только выбранные записи.

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

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

  • Для вычислений Python имена полей должны быть заключены в восклицательные знаки (например, !fieldname!).

    В вычислениях Arcade перед именами полей должно стоять $feature. (например, $feature.fieldname).

  • Чтобы вычислить строки в текстовые или символьные поля, в диалоговом окне строка должна использовать двойные кавычки (например, "строка"), или в скрипте строка, использующая двойные кавычки, также должна быть заключена в одинарные кавычки (например, '"string"').

  • Для вычисления значения в числовом поле введите соответствующее числовое значение в качестве параметра Выражение; кавычек при этом не требуется.

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

    arcgis.rand() в ArcGIS AllSource 2.0 больше не поддерживается. Вместо этого следует использовать похожие функции модуля Python random. Для успешного использования модуля random добавьте его в виде импорта в параметр Блок кода.

  • Вы можете создавать сложные выражения с помощью параметра Блок кода. Введите блок кода либо непосредственно в диалоговое окно, либо в виде строки в скрипт. Выражение и блок кода являются соединенными. Блок кода должен иметь обратное отношение к выражению; результат выполнения блока кода должен передаваться в выражение.

    Параметр Блок кода поддерживается только для выражений Python.

  • Вы можете использовать модель Python math и форматирование в параметре Блок кода. Вы также можете импортировать дополнительные модули. Модуль math предлагает теоретико-числовые функции и функции представления, степенные и логарифмические функции, тригонометрические функции, функции углового преобразования, гиперболические функции и математические константы. Дополнительные сведения о модуле math находятся в справке Python.

  • Чтобы вычислить информацию о геометрии в Python, воспользуйтесь свойствами объекта Geometry. Например, используйте выражение !shape.pointCount! для вычисления числа вершин объекта.

    Примечание:

    Инструмент Вычислить атрибуты геометрии поддерживает аналогичные вычисления.

    Чтобы вычислить площадь и длину в Python, используйте методы getArea и getLength с указанием метода и типа единицы измерения.

    • Для расчета геодезической площади полигонов в квадратных километрах воспользуйтесь следующим выражением:
      !shape.getArea('GEODESIC', 'SQUAREKILOMETERS')!
    • Чтобы вычислить длину полилиний или полигонов на плоскости в ярдах, используйте следующее выражение:
      !shape.getArea('PLANAR', 'YARDS')

    Для получения подробной информации см. объекты Polygon и Polyline.

    Подробнее об инструментах геообработки и линейных и площадных единицах измерения

  • В приложениях ArcGIS для записи и чтения файлов .cal используется кодировка UTF-16-LE. Другие приложения (например, Notepad) также можно использовать для создания и редактирования файлов .cal, если файл записывается в кодировке UTF-16-LE. Файл с любой другой кодировкой не будет загружен в блок кода.

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

  • Выражения Python, в которых соединяются строковые поля, содержащие значения null либо деление на ноль, возвратят null в качестве значения такого поля.

  • Выражения SQL поддерживают более быстрые вычисления для сервисов объектов и многопользовательских баз геоданных. Вместо выполнения вычислений по одному объекту или строке за раз, к серверу или базе данных устанавливается один запрос, что приводит к более быстрым вычислениям.

    Выражения SQL поддерживают только сервисы объектов и многопользовательские базы геоданных. Для других форматов используйте Python или выражение Arcade.

    При использовании опции SQL для параметра Тип выражения есть следующие ограничения:

    • Эта опция поддерживается только для многопользовательских баз геоданных Db2, Oracle, PostgreSQL, SAP HANA и SQL Server.
    • Вычисление значений полей в соединяемых таблицах не поддерживается.
    • Не поддерживаются данные версионных и архивных баз геоданных.
    • Операции отмены геообработки не поддерживаются.

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

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

Параметры

ПодписьОписаниеТип данных
Входная таблица

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

Mosaic Layer; Raster Layer; Table View
Имя поля (существующего или нового)

Поля, которые будут обновлены при вычислении.

Если во входной таблице нет поля с этим именем, оно будет добавлено.

Field
Выражение

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

SQL Expression
Тип выражения
(Дополнительный)

Указывает тип используемого выражения.

Если входные данные - сервис объектов, тип выражения по умолчанию - SQL. Для остальных типов входных данных тип выражения по умолчанию - Python.

Более подробно о выражениях Python см. в примерах Вычислить поля в Python.

Более подробно о выражениях Arcade см. руководство по ArcGIS Arcade.

Более подробно о выражениях SQL см. в разделе Вычислить значения полей.

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

Выражения SQL поддерживают только сервисы объектов и многопользовательские базы геоданных. Для других форматов используйте Python или выражение Arcade.

  • PythonБудет использоваться тип выражения Python.
  • ArcadeБудет использоваться тип выражения Arcade.
  • SQLБудет использоваться тип выражения SQL.
  • VBScriptБудет использоваться тип выражения VBScript.
String
Блок кода
(Дополнительный)

Блок кода, который будет использоваться для сложных выражений.

String
Тип поля
(Дополнительный)

Задает тип для нового поля. Этот параметр используется только если имя поля отсутствует во входной таблице.

Если поле имеет тип text, длина поля будет равна 512, если только входные данные не являются шейп-файлом или файлом базы данных, в этом случае длина будет равна 254. Чтобы настроить длину, используйте инструмент Изменить поле.

  • Короткое целое (16-разрядное целочисленное)Тип поля будет Короткое целое. Поля типа Короткое целое поддерживают целые числа от -32 768 до 32 767.
  • Длинное целое (32-разрядное целочисленное)Тип поля будет Длинное целое. Поля типа Длинное целое поддерживают целые числа от -2 147 483 648 до 2 147 483 647.
  • Большое целочисленное (64-разрядное целое число)Типом поля будет большое целое. Поля типа большое целое поддерживают целые числа в диапазоне от -(253) до 253.
  • С плавающей точкой (32-разрядное с плавающей точкой)Тип поля будет С плавающей точкой. Поля типа С плавающей точкой поддерживают дробные числа от -3.4E38 до 1.2E38.
  • Двойной точности (64-разрядное с плавающей точкой)Тип поля будет Двойной точности. Поля типа Двойной точности поддерживают дробные числа от -2.2E308 до 1.8E308.
  • ТекстТип поля будет Текст. Текстовые поля поддерживают строку символов.
  • ДатаТипом поля будет Дата. Поля даты поддерживают значения даты и времени.
  • Только датаТипом поля будет только дата. Поля только для даты поддерживают значения даты без значений времени.
  • Только времяТипом поля будет только время. Поля только для времени поддерживают значения времени без значения даты.
  • Сдвиг метки времениТипом поля будет сдвиг метки времени. Поля сдвига метки времени поддерживают дату, время и сдвиг от значения UTC.
  • BLOB (Большой двоичный объект)Тип поля будет BLOB. Поле BLOB поддерживает данные, хранящиеся в виде длинной последовательности двоичных чисел. Необходимо использовать пользовательский загрузчик или вьюер, или приложение сторонних производителей для загрузки элементов в поле типа BLOB или просмотра его содержимого.
  • GUID (глобальный уникальный идентификатор)Типом поля будет GUID. В полях GUID хранятся строки в стиле реестра, состоящие из 36 символов, заключенных в фигурные скобки.
  • РастрТипом поля будет Растр. Растровые поля могут хранить растровые данные в базе геоданных или вне ее. Можно хранить все поддерживаемые в ArcGIS форматы наборов растровых данных, но рекомендуется использовать только маленькие изображения.
String
Принудительно использовать домены
(Дополнительный)

Определяет, будут ли принудительно использованы правила доменов полей.

  • Отмечено — правила доменов полей будут включены принудительно. Если поле невозможно обновить, то значение поля останется без изменений, а в сообщениях инструментов появится предупреждение.
  • Не отмечено — правила доменов полей не будут включены принудительно. Используется по умолчанию
Boolean

Производные выходные данные

ПодписьОписаниеТип данных
Обновленная входная таблица

Обновленная таблица.

Table View; Raster Layer; Mosaic Layer

arcpy.management.CalculateField(in_table, field, expression, {expression_type}, {code_block}, {field_type}, {enforce_domains})
ИмяОписаниеТип данных
in_table

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

Mosaic Layer; Raster Layer; Table View
field

Поля, которые будут обновлены при вычислении.

Если во входной таблице нет поля с этим именем, оно будет добавлено.

Field
expression

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

SQL Expression
expression_type
(Дополнительный)

Указывает тип используемого выражения.

  • PYTHON3Будет использоваться тип выражения Python.
  • ARCADEБудет использоваться тип выражения Arcade.
  • SQLБудет использоваться тип выражения SQL.
  • VBБудет использоваться тип выражения VBScript.

Если входные данные - сервис объектов, тип выражения по умолчанию - SQL. Для остальных типов входных данных тип выражения по умолчанию - PYTHON3.

Более подробно о выражениях Python см. в примерах Вычислить поля в Python.

Более подробно о выражениях Arcade см. руководство по ArcGIS Arcade.

Более подробно о выражениях SQL см. в разделе Вычислить значения полей.

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

Выражения SQL поддерживают только сервисы объектов и многопользовательские базы геоданных. Для других форматов используйте Python или выражение Arcade.

String
code_block
(Дополнительный)

Блок кода, который будет использоваться для сложных выражений.

String
field_type
(Дополнительный)

Задает тип для нового поля. Этот параметр используется только если имя поля отсутствует во входной таблице.

Если поле имеет тип text, длина поля будет равна 512, если только входные данные не являются шейп-файлом или файлом базы данных, в этом случае длина будет равна 254. Чтобы настроить длину, используйте инструмент Изменить поле.

  • SHORTТип поля будет Короткое целое. Поля типа Короткое целое поддерживают целые числа от -32 768 до 32 767.
  • LONGТип поля будет Длинное целое. Поля типа Длинное целое поддерживают целые числа от -2 147 483 648 до 2 147 483 647.
  • BIGINTEGERТипом поля будет большое целое. Поля типа большое целое поддерживают целые числа в диапазоне от -(253) до 253.
  • FLOATТип поля будет С плавающей точкой. Поля типа С плавающей точкой поддерживают дробные числа от -3.4E38 до 1.2E38.
  • DOUBLEТип поля будет Двойной точности. Поля типа Двойной точности поддерживают дробные числа от -2.2E308 до 1.8E308.
  • TEXTТип поля будет Текст. Текстовые поля поддерживают строку символов.
  • DATEТипом поля будет Дата. Поля даты поддерживают значения даты и времени.
  • DATEONLYТипом поля будет только дата. Поля только для даты поддерживают значения даты без значений времени.
  • TIMEONLYТипом поля будет только время. Поля только для времени поддерживают значения времени без значения даты.
  • TIMESTAMPOFFSETТипом поля будет сдвиг метки времени. Поля сдвига метки времени поддерживают дату, время и сдвиг от значения UTC.
  • BLOBТип поля будет BLOB. Поле BLOB поддерживает данные, хранящиеся в виде длинной последовательности двоичных чисел. Необходимо использовать пользовательский загрузчик или вьюер, или приложение сторонних производителей для загрузки элементов в поле типа BLOB или просмотра его содержимого.
  • GUIDТипом поля будет GUID. В полях GUID хранятся строки в стиле реестра, состоящие из 36 символов, заключенных в фигурные скобки.
  • RASTERТипом поля будет Растр. Растровые поля могут хранить растровые данные в базе геоданных или вне ее. Можно хранить все поддерживаемые в ArcGIS форматы наборов растровых данных, но рекомендуется использовать только маленькие изображения.
String
enforce_domains
(Дополнительный)

Определяет, будут ли принудительно использованы правила доменов полей.

  • ENFORCE_DOMAINSПравила доменов полей будут включены принудительно.
  • NO_ENFORCE_DOMAINSПравила доменов полей не будут включены принудительно. Используется по умолчанию.
Boolean

Производные выходные данные

ИмяОписаниеТип данных
out_table

Обновленная таблица.

Table View; Raster Layer; Mosaic Layer

Пример кода

CalculateField, пример 1 (окно Python)

Пример скрипта окна Python для использования функции CalculateField в режиме прямого запуска.

import arcpy
arcpy.env.workspace = "C:/data"
arcpy.management.AddField("vegtable.dbf", "VEG_TYP2", "TEXT", "", "", "20")
arcpy.management.CalculateField("vegtable.dbf", "VEG_TYP2", 
                                '!VEG_TYPE!.split(" ")[-1]', "PYTHON3")
CalculateField, пример 2 (автономный скрипт)

Используйте функцию CalculateField для присвоения новым полям значения центроида.

# Name: CalculateField_centroids.py

# Import system modules
import arcpy

# Set environment settings
arcpy.env.workspace = "C:/data/airport.gdb"
 
# Set local variables
inFeatures = "parcels"
fieldName1 = "xCentroid"
fieldName2 = "yCentroid"
fieldPrecision = 18
fieldScale = 11
 
# Add fields
arcpy.management.AddField(inFeatures, fieldName1, "DOUBLE", 
                          fieldPrecision, fieldScale)
arcpy.management.AddField(inFeatures, fieldName2, "DOUBLE", 
                          fieldPrecision, fieldScale)
 
# Calculate centroid
arcpy.management.CalculateField(inFeatures, fieldName1, 
                                "!SHAPE.CENTROID.X!",
                                "PYTHON3")
arcpy.management.CalculateField(inFeatures, fieldName2, 
                                "!SHAPE.CENTROID.Y!",
                                "PYTHON3")
CalculateField, пример 3 (автономный скрипт)

Используйте функцию CalculateField с блоком кода для вычисления значений на основании рангов.

# Name: CalculateField_ranges.py

# Import system modules
import arcpy
 
# Set environment settings
arcpy.env.workspace = "C:/data/airport.gdb"
 
# Set local variables
inTable = "parcels"
fieldName = "areaclass"
expression = "getClass(float(!SHAPE.area!))"

codeblock = """
def getClass(area):
    if area <= 1000:
        return 1
    if area > 1000 and area <= 10000:
        return 2
    else:
        return 3"""
 
# Run AddField
arcpy.management.AddField(inTable, fieldName, "SHORT")
 
# Run CalculateField 
arcpy.management.CalculateField(inTable, fieldName, expression, "PYTHON3", 
                                codeblock)
CalculateField, пример 4 (автономный скрипт)

Используйте функцию CalculateField для присвоения новым полям случайных значений.

# Name: CalculateField_Random.py

# Import system modules
import arcpy
import random
 
# Set environment settings
arcpy.env.workspace = "C:/data/airport.gdb"
  
# Set local variables
inFeatures = "parcels"
fieldName = "RndValue"
expression = "random.randint(0, 10)"
code_block = "import random"
 
# Run AddField
arcpy.management.AddField(inFeatures, fieldName, "LONG")
 
# Run CalculateField 
arcpy.management.CalculateField(inFeatures, fieldName, expression, "PYTHON3", 
                                code_block)
CalculateField, пример 5 (окно Python)

Пример скрипта окна Python для использования функции CalculateField в режиме прямого запуска Arcade.

import arcpy
arcpy.env.workspace = "C:/data/fgdb.gdb"
arcpy.management.CalculateField("data", "new_value", "$feature.value1 + $feature.value2", "ARCADE")
CalculateField, пример 6 (окно Python)

Пример скрипта окна Python для использования функции CalculateField в режиме прямого запуска SQL.

import arcpy
feature_service = "<a feature service url>"
arcpy.management.CalculateField("data", "NEW_VALUE", "SAMPLE * (BASELINE - 40)", "SQL")

Параметры среды

Особые случаи

Передать описания доменов полей

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