Инструмент Вычислить поле находится в наборе инструментов Управления данными в группе Поля. Это тот же самый инструмент, который запускается при вызове команды Калькулятор поля из меню, доступ к которому осуществляется в контекстном меню названия поля атрибутивной таблицы. Выполняя вычисления поля, важно понимать, какие данные вы используете и каким образом собираетесь использовать их в будущем. Синтаксис, который необходимо использовать при составлении вычислительного выражения, может быть различным в зависимости от источника данных и используемого языка синтаксического анализатора.
Ниже представлены полезные подсказки и оптимальные методы использования инструмента Вычислить поле.
Полезные подсказки и оптимальные методы использования инструмента Вычислить поле
Вычисляет значения в заданном поле класса объектов, векторного слоя или растра.
Выражения могут быть составлены в формате 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
При использовании с выбранным набором пространственных объектов, например созданных из запроса в инструментах Создать векторный слой или Выбрать в слое по атрибуту, этот инструмент обновляет только выбранные записи.
Вычисление можно применить только к одному полю за один раз.
При использовании синтаксиса VBScript названия полей должны обязательно даваться в квадратных скобках [ ].
Для вычислений Python имена полей должны быть заключены в восклицательные знаки (!fieldname!).
Для вычисления значений строк в текстовых или символьных полях в диалоговом окне значение строки должно быть указано в двойных кавычках ("string"), либо при написании скрипта строка в двойных кавычках должна быть заключена еще и в одинарные ('"string"').
Этот инструмент может также использоваться для обновления символьных элементов. Текст в выражениях следует заключать в одинарные кавычки, например, [CHARITEM] = 'NEW STRING'. Но если строка символов содержит символы одинарных кавычек, выражение должно быть заключено в двойные кавычки – например, [CHARITEM] = "TYPE'A'".
Для вычисления значения в числовом поле введите соответствующее числовое значение в качестве параметра Выражение; кавычек при этом не требуется.
Функция arcgis.rand() поддерживается инструментом Вычислить поле. Для того чтобы использовать эту функцию, для составления выражения должен быть выбран синтаксис языка Python. Функцию arcgis.rand(), созданную для инструментов ArcGIS, не следует путать с функцией Rand(), также существующей в языке Python.
Выражение и блок кода являются соединенными. Блок кода должен иметь обратное отношение к выражению; результат выполнения блока кода должен передаваться в выражение.
Модуль Python math и форматирование доступны для использования с параметром Блок кода. Вы можете импортировать дополнительные модули. Модуль math предлагает теоретико-числовые функции и функции представления, степенные и логарифмические функции, тригонометрические функции, функции углового преобразования, гиперболические функции и математические константы. Дополнительные сведения о модуле math находятся в справке Python.
Сохраненные файлы VB .cal из предыдущих версий ArcGIS можно использовать сразу, либо после внесения минимальных изменений. Если у вас есть код VBA из предыдущих версий, использовавший ArcObjects, необходимо изменить его.
При вычислении присоединенных данных нельзя напрямую вычислять содержимое присоединенных столбцов. Однако вы можете напрямую вычислять значения столбцов исходной таблицы. Чтобы вычислить соединенные данные, вы должны сначала добавить соединенные таблицы или слои на карту. Затем вы можете отдельно вычислить эти данные. Эти изменения появятся и в присоединенных столбцах.
Тип выражения должен быть Python при запуске Calculate Field с ArcGIS Engine Runtime или ArcGIS Server. Только выражения, написанные на Python, могут быть использованы в случае включения инструмента в модель, публикуемую с помощью ArcGIS Server.
Примеры кода, используемого инструментом Вычислить поле
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!",
"PYTHON_9.3")
arcpy.CalculateField_management(inFeatures, fieldName2,
"!SHAPE.CENTROID.Y!",
"PYTHON_9.3")
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, "PYTHON_9.3",
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, "PYTHON_9.3",
code_block)