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

Сводка

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Выражения Python могут создаваться с использованием свойств объекта Geometry, включая type, extent, centroid, firstPoint, lastPoint, area, length, isMultipart и partCount (например, !shape.area!).

  • Выражения Python могут использовать свойства геометрии area и length с единицами измерения площади или расстояния для конвертации значений в другие единицы измерения (например, !shape.length@kilometers!). Если данные хранятся в географической системе координат и поддерживаются линейные единицы (например, мили), вычисления длин будут проведены по геодезическому алгоритму. Использование единиц площади в географических данных дает сомнительные результаты, так как десятичные градусы в разных частях глобуса имеют разную длину.

    • Ключевые слова площадных единиц измерения:
      • ACRES | ARES | HECTARES | SQUARECENTIMETERS | SQUAREDECIMETERS | SQUAREINCHES | SQUAREFEET | SQUAREKILOMETERS | SQUAREMETERS | SQUAREMILES | SQUAREMILLIMETERS | SQUAREYARDS | SQUAREMAPUNITS | UNKNOWN
    • Ключевые слова линейных единиц измерения:
      • CENTIMETERS | DECIMALDEGREES | DECIMETERS | FEET | INCHES | KILOMETERS | METERS | MILES | MILLIMETERS | NAUTICALMILES | POINTS | UNKNOWN | YARDS
  • Выражения Python могут использоваться для вычисления геодезической площади или длины объекта с помощью свойств geodesicArea или geodesicLength вместе с площадными или линейными единицами измерения (например, !shape.geodesicArea@hectares! или !shape.geodesicLength@miles!).

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

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

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

  • Обратите внимание, что инструмент получает настройку среды Выходной экстент. Значения поля вычисляются только для объектов, расположенных внутри экстента. Настройка среды не влияет на непространственные данные, например, на таблицы

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

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

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

Синтаксис

CalculateField(in_table, field, expression, {expression_type}, {code_block}, {field_type})
ParameterОбъяснениеТип данных
in_table

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

Mosaic Layer; Raster Layer; Table View
field

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

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

Field
expression

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

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

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

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

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

Python 3 (PYTHON3 в Python) возвращает значения в поле даты как Python datetime объекты. PYTHON а PYTHON_9.3 возвращает значения полей дат в виде строк.

  • PYTHON3Тип выражения Python. Используется по умолчанию.
  • ARCADEТип выражения Arcade.
  • SQLВыражение SQL.

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

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

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

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

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

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

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

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

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

Если тип поля текстовой, длина нового поля будет 512 символов. Для шейп-файлов и файлов dBASE длина поля будет 254 символа. Длину нового поля можно настроить с помощью инструмента Изменить поле.

  • TEXTЛюбая строка символов.
  • FLOAT Дробные числа между -3.4E38 и 1.2E38.
  • DOUBLE Дробные числа между -2.2E308 и 1.8E308.
  • SHORT Целые числа между -32,768 и 32,767.
  • LONG Целые числа между -2 147 483 648 и 2 147 483 647.
  • DATEДата и время.
  • BLOBДлинный ряд двоичных чисел.
  • RASTERРастровые изображения. Можно хранить все поддерживаемые в ArcGIS форматы наборов растровых данных, но настоятельно рекомендуется для этого поля использовать только маленькие изображения.
  • GUIDГлобальный уникальный идентификатор.
String

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

NameОбъяснениеТип данных
out_table

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

Представление таблицы; Растровый слой; Слой мозаики

Пример кода

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

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

import arcpy
arcpy.env.workspace = "C:/data"
arcpy.AddField_management("vegtable.dbf", "VEG_TYP2", "TEXT", "", "", "20")
arcpy.CalculateField_management("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.AddField_management(inFeatures, fieldName1, "DOUBLE", 
                          fieldPrecision, fieldScale)
arcpy.AddField_management(inFeatures, fieldName2, "DOUBLE", 
                          fieldPrecision, fieldScale)
 
# Calculate centroid
arcpy.CalculateField_management(inFeatures, fieldName1, 
                                "!SHAPE.CENTROID.X!",
                                "PYTHON3")
arcpy.CalculateField_management(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"""
 
# Execute AddField
arcpy.AddField_management(inTable, fieldName, "SHORT")
 
# Execute CalculateField 
arcpy.CalculateField_management(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"
 
# Execute AddField
arcpy.AddField_management(inFeatures, fieldName, "LONG")
 
# Execute CalculateField 
arcpy.CalculateField_management(inFeatures, fieldName, expression, "PYTHON3", 
                                code_block)
CalculateField, пример 5 (окно Python)

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

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

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

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

Environments

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

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

Информация о лицензиях

  • Basic: Да
  • Standard: Да
  • Advanced: Да

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