Использование инструмента Вычислить поле

Инструмент Вычислить поле (Calculate Field) находится в наборе инструментов Управление данными (Data Management) в группе инструментов Поля (Fields). Это тот же самый инструмент, который запускается при вызове команды Калькулятор поля (Field Calculator) из контекстного меню поля атрибутивной таблицы. Выполняя вычисления поля, важно понимать, какие данные вы используете и каким образом собираетесь использовать их в будущем. Синтаксис, который необходимо использовать при составлении вычислительного выражения, может быть различным в зависимости от источника данных и используемого языка синтаксического анализатора.

Ниже представлены полезные подсказки и оптимальные методы использования инструмента Вычислить поле (Calculate Field).

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

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

Выражения могут быть составлены в формате VBScript или Python. Стиль форматирования должен соответствовать принятому для соответствующего формата.

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

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

!shape.area@acres!

При использовании с выбранным набором пространственных объектов, например, созданных из запроса в инструментах Создать векторный слой (Make Feature Layer) или Выбрать в слое по атрибуту (Select Layer by Attribute), этот инструмент обновляет только выбранные записи.

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

При использовании синтаксиса VBScript названия полей должны обязательно даваться в квадратных скобках [ ].

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

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

Этот инструмент может также использоваться, чтобы обновить символьные данные. Текст в выражениях надо заключать в одинарные кавычки — например, [CHARITEM] = 'NEW STRING'. Однако в случае, если символьная строка включает в себя символ одинарных кавычек, выражение должно быть заключено в двойные кавычки, например [CHARITEM] = "TYPE'A'".

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

Функция arcgis.rand() поддерживается инструментом Вычислить поле. Для того чтобы использовать эту функцию, для составления выражения должен быть выбран синтаксис языка Python. Функцию arcgis.rand(), созданную для инструментов ArcGIS, не следует путать с функцией Rand(), также существующей в языке Python.

Выражение (Expression) и Кодовый Блок (Code Block) тесно связаны между собой: кодовый блок должен соотноситься с выражением, а результат кодового блока передается в выражение.

Для использования в параметра Блок кода (Code Block) доступны математический модуль и форматирование Python. Вы также можете импортировать дополнительные модули. Математический модуль предоставляет возможности использования большого числа теоретических и статистических, степенных и логарифмических, тригонометрических функций, функций преобразования угловых единиц, гиперболических функций, математических констант. Для более глубокого изучения математического модуля рекомендуем Вам ознакомиться со справочными материалами Python.

Сохраненные файлы VB .cal из предыдущих версий ArcGIS могут работать и так, либо после внесения минимальных исправлений. Если у вас есть код VBA из предыдущих версий, использовавший ArcObjects, вам будет надо изменить вычисления, чтобы они заработали.

Сохраненные файлы VB .cal из предыдущих версий ArcGIS могут работать и так, либо после внесения минимальных исправлений. Если у вас есть код VBA из старых версий, использовавший ArcObjects, возможно, надо будет изменить вычисления, чтобы они работали в 10.0. Для вычисления же присоединенных данных, необходимо сначала добавить присоединенные таблицы или слои данных в ArcMap. Однако вы можете непосредственно вычислить данные в исходной таблице. Внесенные изменения будут отражены в присоединенных столбцах.

При использовании инструмента Вычислить поле в ArcGIS Engine Runtime или ArcGIS for Server синтаксис выражений должен быть написан на Python. Только выражения, написанные на Python, могут быть использованы в случае включения инструмента в модель, публикуемую с помощью ArcGIS for Server.

Примеры кода, используемого инструментом Вычислить поле

Пример CalculateField: Вычисление центроидов

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

# Name: CalculateField_Centroids.py
# Description: Use CalculateField to assign centroid values to new fields

# Import system modules
import arcpy
from arcpy import env

try: 
    # Set environment settings
    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!",
                                    "PYTHON_9.3")
    arcpy.CalculateField_management(inFeatures, fieldName2, 
                                    "!SHAPE.CENTROID.Y!",
                                    "PYTHON_9.3")
except Exception as e:
    # If an error occurred, print line number and error message
    import traceback
    import sys
    tb = sys.exc_info()[2]
    print("Line {0}".format(tb.tb_lineno))
    print(e.message)

Пример CalculateField: Вычисление диапазонов

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

# Name: CalculateField_Ranges.py
# Description: Use CalculateField with a codeblock to calculate values
#  based on ranges

# Import system modules
import arcpy
from arcpy import env
 
# Set environment settings
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, "PYTHON_9.3", 
                                codeblock)

Пример CalculateField: Вычисление произвольных значений

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

# Name: CalculateField_Random.py
# Description: Use CalculateField to assign random values to a new field


# Import system modules
import arcpy
from arcpy import env
 
# Set environment settings
env.workspace = "C:/data/airport.gdb"
  
# Set local variables
inFeatures = "parcels"
fieldName = "RndValue"
expression = "arcgis.rand('Integer 0 10')"
 
# Execute AddField
arcpy.AddField_management(inFeatures, fieldName, "LONG")
 
# Execute CalculateField 
arcpy.CalculateField_management(inFeatures, fieldName, expression, "PYTHON_9.3")

Связанные темы

9/11/2013