Utilizar la herramienta Calcular campo
The Calculate Field tool is located in the Data Management toolbox in the Fields toolset. This is the same tool that is called when you click the Field Calculator command from the field shortcut menu of an attribute table. When performing field calculations, it is important to know what type of data you are using and in what context it is going to be used in the future. The syntax that must be used in a calculation expression differs depending on the data source and scripting language.
The following includes a number of important tips and best practices for using the Calculate Field tool.
Consejos y mejores prácticas para utilizar la herramienta Calcular campo
Calcula los valores de un campo para una clase de entidad, una capa de entidades o un catálogo de ráster.
Expressions can be created using VBScript or a standard Python format. The formatting style of the string used for the expression should be appropriate for the environment (type).
Se pueden crear expresiones en Python con las propiedades del objeto de geometría (type, extent, centroid, firstPoint, lastPoint, area, length, isMultipart y partCount).
Las expresiones de Python pueden utilizar las propiedades area y length de la geometría con una unidad lineal o de área para convertir el valor en una unidad de medida diferente (ejemplo: !shape.length@kilometers!). Si los datos se almacenan en un sistema de coordenadas geográficas y se proporciona una unidad lineal (por ejemplo, millas), la longitud se calculará mediante un algoritmo geodésico. Utilizar unidades de área en los datos geográficos producirá resultados cuestionables ya que los grados decimales no son consistentes en el globo.
!shape.area@acres!
- Palabras clave de unidad de medida de área:
- ACRES | ARES | HECTARES | SQUARECENTIMETERS | SQUAREDECIMETERS | SQUAREINCHES | SQUAREFEET | SQUAREKILOMETERS | SQUAREMETERS | SQUAREMILES | SQUAREMILLIMETERS | SQUAREYARDS | SQUAREMAPUNITS | UNKNOWN
- Palabras clave de unidad de medida lineal:
- CENTIMETERS | DECIMALDEGREES | DECIMETERS | FEET | INCHES | KILOMETERS | METERS | MILES | MILLIMETERS | NAUTICALMILES | POINTS | UNKNOWN | YARDS
Cuando se utiliza con un conjunto seleccionado de entidades, como las creadas a partir de una consulta en Crear capa de entidades o Seleccionar capa por atributo, esta herramienta solamente actualiza los registros seleccionados.
El cálculo solamente se puede aplicar a un campo por operación.
Fields are always enclosed in brackets [ ] for VBScript.
Para cálculos en Python, los nombres de campo deben estar entre signos de admiración (!fieldname!).
Para calcular cadenas de caracteres para campos de texto o de caracteres, en el cuadro de diálogo la cadena debe estar entre comillas dobles ("cadena") y, en una secuencia de comandos, la cadena entre comillas dobles también debe estar entre comillas simples ('"cadena"').
Esta herramienta también se puede utilizar para actualizar elementos de caracteres. Las expresiones que utilizan una cadena de caracteres deben estar entre comillas simples, por ejemplo, [CHARITEM] = 'CADENA NUEVA'. Sin embargo, si la cadena de caracteres ya tiene comillas simples, enciérrela entre comillas dobles, por ejemplo, [CHARITEM] = "TIPO'A'".
Para calcular un campo para que sea un valor numérico, introduzca el valor numérico en el parámetro Expresión; no se requieren comillas para este valor.
The arcgis.rand() function is supported by the Calculate Field tool, and the expression type must be Python. The arcgis.rand() function was created for ArcGIS tools and should not be confused with the Python Rand() function.
La expresión y el código bloque están conectados. El código bloque debe estar relacionado con la expresión; el resultado del código bloque se debe pasar a la expresión.
El módulo y el formato de matemática de Python están disponibles para utilizarse en el parámetro Código bloque. Puede importar módulos adicionales. El módulo de matemática proporciona funciones de teoría de números y de representación, funciones potencia y logarítmicas, funciones trigonométricas, funciones de conversión angular, funciones hiperbólicas y constantes matemáticas. Para obtener más información sobre el módulo de matemática, consulte la ayuda de Python.
Los archivos .cal VB guardados de versiones anteriores de ArcGIS pueden funcionar o pueden precisar modificaciones mínimas. Si tiene código VBA de versiones anterior que utilizan ArcObjects, deberá modificar los cálculos para que funcionen en la versión 10.0.
Cuando calcula datos unidos, no puede calcular directamente las columnas unidas. Sin embargo, puede calcular directamente las columnas de la tabla de origen. Para calcular los datos unidos, primero debe agregar las tablas o capas unidas a ArcMap. Después puede realizar cálculos en estos datos por separado. Estos cambios se reflejarán en las columnas que se unieron.
The expression type must be Python when running Calculate Field with ArcGIS Engine or ArcGIS Server. Only use Python as the expression type whenever the tool is included in a model that will be published to ArcGIS Server.
Ejemplos de código bloque con la herramienta Calcular campo
Utilice CalculateField para asignar valores del centroide a campos nuevos.
# 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 # Expressions are calculated using the Shape Field's geometry property expression1 = "float(!SHAPE.CENTROID!.split()[0])" expression2 = "float(!SHAPE.CENTROID!.split()[1])" # Execute AddField arcpy.AddField_management(inFeatures, fieldName1, "DOUBLE", fieldPrecision, fieldScale) arcpy.AddField_management(inFeatures, fieldName2, "DOUBLE", fieldPrecision, fieldScale) # Execute CalculateField arcpy.CalculateField_management(inFeatures, fieldName1, expression1, "PYTHON") arcpy.CalculateField_management(inFeatures, fieldName2, expression2, "PYTHON") except Exception, e: # If an error occurred, print line number and error message import traceback, sys tb = sys.exc_info()[2] print "Line %i" % tb.tb_lineno print e.message
Utilice CalculateField con un código bloque para calcular los valores basados en rangos.
# 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", codeblock)
Utilice CalculateField para asignar valores aleatorios al campo nuevo.
# 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")