Вычислить поле (Calculate Field) (Управление данными (Data Management))
Резюме
Вычисляет значения в заданном поле объектов наборов данных, слоев данных или каталогов растровых изображений.
Обзор примеров использования инструмента Вычислить поле (Calculate Field)
Использование
-
Выражения 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
- Ключевые слова единиц измерения площади:
-
В диалоговом окне инструмента, выражение вводится непосредственно в строку Выражение (Expression) или интерактивно с помощью Калькулятора поля (Field Calculator).
-
При использовании с выбранным набором пространственных объектов, например, созданных из запроса в инструментах Создать векторный слой (Make Feature Layer) или Выбрать в слое по атрибуту (Select Layer by Attribute), этот инструмент обновляет только выбранные записи.
-
Одна операция вычисления может быть применена только к одному полю.
-
Существующие значения поля будут перезаписны. Должна быть сделана копия входной таблицы, если вы хотите сохранить исходные значения
-
При использовании синтаксиса Python названия полей должны обязательно обрамляться восклицательными знаками (!fieldname!).
Для вычислений VB имена полей должны быть заключены в квадратные скобки ([fieldname]).
-
При составлении выражения, включающего в себя текстовые данные, такие данные должны быть заключены в кавычки ("string"), а если текстовое выражение включает в себя данные, уже заключенные в кавычки, то в этом случае подобную строку, заключенную в кавычки, дополнительно обрамляют с двух сторон «одинарными» кавычками ('"string"').
-
Этот инструмент может также использоваться, чтобы обновить символьные данные. Текст в выражениях надо заключать в одинарные кавычки — например, [CHARITEM] = 'NEW STRING'. Однако в случае, если символьная строка включает в себя символ одинарных кавычек, выражение должно быть заключено в двойные кавычки, например [CHARITEM] = "TYPE'A'".
-
Для вычисления значения в числовом поле, введите соответствующее числовое значение в качестве параметра Выражение (Expression); кавычек при этом не требуется.
-
Функция arcgis.rand() поддерживается этим инструментом, если задано выражение Python. Функция arcgis.rand() была создана для инструментов ArcGIS, ее не следует путать с функцией Python Rand(). Синтаксис для доступных распределений функции arcgis.rand() может быть найден в Синтаксисе распределения для произвольных значений.
-
Выражение (Expression) и Кодовый Блок (Code Block) тесно связаны между собой: кодовый блок должен соотноситься с выражением, а результат кодового блока передается в выражение.
-
Параметр Код блокировки (Code Block) позволяет создавать сложные выражения. Вы можете ввести код блокировки непосредственно в диалоговое окно, или продолжить строку в скрипте.
-
Для использования в параметра Блок кода (Code Block) доступны математический модуль и форматирование Python. Вы также можете импортировать дополнительные модули. Математический модуль предоставляет возможности использования большого числа теоретических и статистических, степенных и логарифмических, тригонометрических функций, функций преобразования угловых единиц, гиперболических функций, математических констант. Для более глубокого изучения математического модуля рекомендуем Вам ознакомиться со справочными материалами Python.
Сохраненные файлы VB .cal из предыдущих версий ArcGIS могут работать и так, либо после внесения минимальных исправлений. Если у вас есть код VBA из предыдущих версий, использовавший ArcObjects, вам будет надо изменить вычисления, чтобы они заработали.
-
Сохраненные файлы VB .cal из предыдущих версий ArcGIS могут работать и так, либо после внесения минимальных исправлений. Если у вас есть код VBA из старых версий, использовавший ArcObjects, возможно, надо будет изменить вычисления, чтобы они работали в 10.0. Для вычисления же присоединенных данных, необходимо сначала добавить присоединенные таблицы или слои данных в ArcMap. Однако вы можете непосредственно вычислить данные в исходной таблице. Внесенные изменения будут отражены в присоединенных столбцах.
- Примеры вычислений полей
Синтаксис
Параметр | Объяснение | Тип данных |
in_table |
Таблица, содержащая поле, которое будет обновлено новыми вычислениями. | Mosaic Layer; Raster Catalog Layer; Raster Layer; Table View |
field |
Поле, в которое будут записаны вычисленные значения. | Field |
expression |
Простое выражение, используемое для вычисления значений, которые будут записаны в выбранные строки таблицы. | SQL Expression |
expression_type (дополнительно) |
Задайте тип выражения, которое будет использоваться.
| String |
code_block (дополнительно) |
Позволяет блокировать код, чтобы ввести его в сложное выражение. | String |
Пример кода
Пример скрипта Python для выполнения функции Вычислить поле (Calculate Field) с запуском из окна Python в ArcGIS.
import arcpy
from arcpy import env
env.workspace = "C:/data"
arcpy.AddField_management("vegtable.dbf", "VEG_TYP2", "TEXT", "", "", "20")
arcpy.CalculateField_management("vegtable.dbf", "VEG_TYP2",
'!VEG_TYPE!.split(" ")[-1]', "PYTHON_9.3")
Используйте 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 с блоком кода для вычисления значений на основании рангов.
# 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 для присвоения новому полю случайных значений.
# 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")