Инструмент Вычислить поле (Calculate Field) находится в наборе инструментов Управление данными (Data Management) в группе инструментов Поля (Fields). Это тот же самый инструмент, который запускается при вызове команды Калькулятор поля (Field Calculator) из контекстного меню поля атрибутивной таблицы. Выполняя вычисления поля, важно понимать, какие данные вы используете и каким образом собираетесь использовать их в будущем. Синтаксис, который необходимо использовать при составлении вычислительного выражения, может быть различным в зависимости от источника данных и используемого языка синтаксического анализатора.
Ниже представлены полезные подсказки и оптимальные методы использования инструмента Вычислить поле (Calculate Field).
Полезные подсказки и оптимальные методы использования инструмента Вычислить поле
Вычисляет значения в заданном поле класса объектов, векторного слоя или растра.
Выражения могут быть составлены в формате VBScript или Python. Стиль форматирования должен соответствовать принятому для соответствующего формата.
Выражения Python могут создаваться с использованием свойств объекта Geometry, включая type, extent, centroid, firstPoint, lastPoint, area, length, isMultipart и partCount (например, !shape.area!).
Выражения Python могут использовать свойства геометрии area и length с единицами измерения площади или расстояния для конвертации значений в другие единицы измерения (например, !shape.length@kilometers!). Если данные хранятся в географической системе координат и поддерживаются линейные единицы (например, мили), вычисления длин будут проведены по геодезическому алгоритму. Использование единиц площади в географических данных дает сомнительные результаты, так как десятичные градусы в разных частях глобуса имеют разную длину.
!shape.area@acres!
- Ключевые слова площадных единиц измерения:
- 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
При использовании с выбранным набором пространственных объектов, например созданных из запроса в инструментах Создать векторный слой (Make Feature Layer) или Выбрать в слое по атрибуту (Select Layer By Attribute), этот инструмент обновляет только выбранные записи.
Вычисление можно применить только к одному полю за один раз.
При использовании синтаксиса VBScript названия полей должны обязательно даваться в квадратных скобках [ ].
Для вычислений Python имена полей должны быть заключены в восклицательные знаки (!fieldname!).
Для вычисления значений строк в текстовых или символьных полях в диалоговом окне значение строки должно быть указано в двойных кавычках ("string"), или, при написании скрипта, строка в двойных кавычках должна быть заключена еще и в одинарные ('"string"').
This tool can also be used to update character items. Expressions using a character string should be wrapped, using single quotes—for example, [CHARITEM] = 'NEW STRING'. However, if the character string has embedded single quotes, wrap the string using double quotes—for example, [CHARITEM] = "TYPE'A'".
Для вычисления значения в числовом поле введите соответствующее числовое значение в качестве параметра Выражение (Expression); кавычек при этом не требуется.
Функция arcgis.rand() поддерживается инструментом Вычислить поле. Для того чтобы использовать эту функцию, для составления выражения должен быть выбран синтаксис языка Python. Функцию arcgis.rand(), созданную для инструментов ArcGIS, не следует путать с функцией Rand(), также существующей в языке Python.
Выражение и блок кода являются соединенными. Блок кода должен иметь обратное отношение к выражению; результат выполнения блока кода должен передаваться в выражение.
Для использования в параметре Блок кода (Code Block) доступны модуль Python math и форматирование. Вы можете импортировать дополнительные модули. Математический модуль math предлагает теоретико-числовые функции и функции представления, степенные и логарифмические функции, тригонометрические функции, функции углового преобразования, гиперболические функции и математические константы. Дополнительные сведения о математическом модуле math находятся в справке Python.
Saved VB .cal files from previous versions of ArcGIS may work or require minimal modifications. If you have VBA code from past releases that use ArcObjects, you will need to modify your calculations to work.
При вычислении присоединенных данных нельзя напрямую вычислять содержимое присоединенных столбцов. Однако вы можете напрямую вычислять значения столбцов исходной таблицы. Чтобы вычислить соединенные данные, вы должны сначала добавить соединенные таблицы или слои на карту. Затем вы можете отдельно вычислить эти данные. Эти изменения появятся и в присоединенных столбцах.
При использовании инструмента Вычислить поле в 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
try:
# 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!",
"PYTHON_9.3")
arcpy.CalculateField_management(inFeatures, fieldName2,
"!SHAPE.CENTROID.Y!",
"PYTHON_9.3")
except Exception:
e = sys.exc_info()[1]
print(e.args[0])
Пример CalculateField: Вычисление диапазонов
Используйте CalculateField с блоком кода для вычисления значений на основании рангов.
# Name: CalculateField_Ranges.py
# Description: Use CalculateField with a codeblock to calculate values
# based on ranges
# 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, "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
# Set environment settings
arcpy.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")