- Cálculos simples
- Funciones de Python incorporada
- Utilizar bloques de código
- Muestras de código: matemática
- Calcular campos utilizando la lógica con Python
- Calcular campos utilizando la lógica con VBScript
- Ejemplos de código: geometría
- Conversiones de unidades geométricas
- Ejemplos de código: fechas
- Ejemplos de código: cadenas de caracteres
- Cálculos acumulativos y secuenciales
- Valores aleatorios
- Calcular valores nulos
La introducción de valores con el teclado no es el único modo con el que puede editar valores en una tabla. En algunos casos, puede realizar un cálculo matemático para establecer un valor de campo para un registro único o incluso para todos los registros. Puede realizar cálculos simples y avanzados en todos los registros o en registros seleccionados. Además, puede calcular área, longitud, perímetro y otras propiedades geográficas en campos de tablas de atributos. Las siguientes secciones incluyen ejemplos del uso de la calculadora de campo. Los cálculos se pueden realizar con Python o con VBScript.
Para ArcGIS, se recomienda el lenguaje de secuencia de comandos de Python. Utilice Python si desea acceder a la funcionalidad de geoprocesamiento, incluida la geometría de entidad. La adopción de Python como el lenguaje de secuencia de comandos para ArcGIS proporciona muchas oportunidades para realizar cálculos.
Utilice VBScript si tiene experiencia con VBA o VBScript y se siente cómodo con la sintaxis de secuencia de comandos. Los archivos .cal guardados de versiones anteriores de ArcGIS pueden funcionar o pueden precisar modificaciones mínimas. Si tiene código VBA de versiones anteriores que utilizan ArcObjects, deberá modificar los cálculos.
Cálculos simples
Ejemplos de cadenas sencillas
Varias funciones de cadenas de Python, incluidas capitalize, rstrip y replace, admiten cadenas.
Poner en mayúscula el primer carácter de la cadena del campo CITY_NAME.
!CITY_NAME!.capitalize()
Eliminar los espacios en blanco al final de la cadena del campo CITY_NAME.
!CITY_NAME!.rstrip()
Reemplazar las instancias de "california" con "California" que se encuentran en el campo STATE_NAME.
!STATE_NAME!.replace("california", "California")
Los caracteres en un campo de cadena se pueden acceder mediante la indexación y la segmentación en Python. La indexación recupera los caracteres en una posición del índice; la segmentación recupera un grupo de caracteres.
Ejemplo | Explicación | Resultado |
---|---|---|
!fieldname![0] | El primer carácter. | "a" |
!fieldname![-2] | Del segundo al último carácter. | "e" |
!fieldname![1:4] | El segundo, tercero y cuarto carácter. | "bcd" |
Python también admite el formato de cadena con el método str.format().
Combinar FieldA y FieldB separados por dos puntos.
"{}:{}".format(!FieldA!, !FieldB!)
Funciones de cadenas de VBScript
Varias funciones de cadenas de VBScript, incluidas Left, InStr y Chr, admiten cadenas. A continuación hay algunos ejemplos de VBScript para funciones de cadenas comúnmente utilizadas en la Calculadora de campo.
Función Left: devuelve un valor Variant (String) que contiene un número especificado de caracteres desde el lado izquierdo de una cadena.
MyStr = Left([MyField], 1)
Función Right: devuelve un valor Variant (String) que contiene un número especificado de caracteres desde el lado derecho de una cadena.
MyStr = Right([MyField], 1)
Función Mid: devuelve un valor Variant (String) que contiene un número especificado de caracteres de una cadena.
MyString = "Mid Function Demo" 'Create text string
FirstWord = Mid(MyString, 1, 3) ' Returns "Mid"
LastWord = Mid(MyString, 14, 4) 'Returns "Demo"
MidWords = Mid(MyString, 5) 'Returns "Function Demo"
Función InStr: devuelve un valor Variant (Long) que especifica la posición de la primera instancia de una cadena dentro de otra.
MyPosition = InStr([address], " ")
Función Replace: devuelve una cadena en la que una subcadena especificada ha sido reemplazada por otra subcadena un número de veces especificado.
NewString = Replace([comments], "#", "!")
Función Chr: devuelve una cadena que contiene el carácter asociado al código de carácter especificado.
' Replace a carriage return character with an exclamation
NewString = Replace([comments], chr(13), "!")
Operador &: se utiliza para forzar la concatenación de cadenas de dos expresiones.
MyStr = [MyField1] & " " & [MyField2]
Ejemplos de matemática sencillos
Python proporciona herramientas para procesar números. Python también admite una serie de funciones numéricas y matemáticas, incluidas math, cmath, decimal, random, itertools, functools y operator.
Operador | Explicación | Ejemplo | Resultado |
---|---|---|---|
x + y | x más y | 1.5 + 2.5 | 4.0 |
x - y | x menos y | 3.3 - 2.2 | 1.1 |
x * y | x multiplicado por y | 2.0 * 2.2 | 4.4 |
x / y | x dividido por y | 4.0 / 1.25 | 3.2 |
x // y | x dividido por y (división truncada) | 4.0 / 1.25 | 3.0 |
x % y | x módulo y | 8 % 3 | 2 |
-x | expresión negativa de x | x = 5 -x | -5 |
+x | x no cambia | x = 5 +x | 5 |
x ** y | x elevado a la potencia de y | 2 ** 3 | 8 |
Multiplicación
!Rank! * 2
Calcule el volumen de una esfera dado un campo de radio.
4 / 3 * math.pi * !Radius! ** 3
Cuando realiza cálculos de campo con una expresión Python, las reglas matemáticas de Python están en vigor. Por ejemplo, dividir dos valores enteros siempre producirá un resultado entero (3 / 2 = 1). Obtención de resultados decimales
- Uno de los números de la operación debe ser un valor decimal: 3,0/2 = 1,5.
- Utilice la función float para convertir de forma explícita el valor a un flotante:
float(3)/2 = 1.5
float(!Population!) / !Area!
Funciones de Python incorporada
Python tiene varias funciones incorporadas disponibles para su uso, incluidas max, min, round y sum.
Calcular el valor máximo para cada registro a partir de la lista de campos.
max([!field1!, !field2!, !field3!])
Calcular la suma para cada registro a partir de la lista de campos.
sum([!field1!, !field2!, !field3!])
Utilizar bloques de código
Con las expresiones de Python y el parámetro Bloque de código, puede:
- Utilizar cualquier función de Python en la expresión.
- Acceder a los objetos y las funciones de geoprocesamiento.
- Acceder a las propiedades de geometría de entidad.
- Acceder al nuevo operador de valor aleatorio.
- Reclasificar valores con la lógica if-then-else.
- Utilizar otras herramientas de geoprocesamiento.
El Tipo de expresión determina la forma en que se utiliza el bloque de código. La herramienta Calcular campo es compatible con los tipos de expresión PYTHON, PYTHON_9.3 y VB.
Tipo de expresión | Bloque de código |
---|---|
PYTHON_9.3 | Es compatible con la funcionalidad de Python. El bloque de código se expresa utilizando funciones de Python (def). Las propiedades de geometría se expresan utilizando objetos de geoprocesamiento, como objetos de punto, donde sea apropiado. |
PYTHON | Igual que PYTHON_9.3, pero devuelve cadenas en lugar de objetos de geometría. |
VB | Los cálculos se realizan utilizando VBScript. |
Las funciones de Python se definen con la palabra clave def seguida del nombre de la función y los argumentos de entrada de la función. Una función de Python se puede escribir para aceptar cualquier cantidad de argumentos de entrada (inclusive ninguno). La función devuelve los valores mediante una declaración return. El nombre de la función es elección suya (no utilice espacios ni números a la izquierda).
Muestras de código: matemática
Redondear el valor del campo a dos posiciones decimales.
Expresión:
round(!area!, 2)
Tipo de expresión:
PYTHON_9.3
Utilizar el módulo de matemática para convertir metros a pies. La conversión se eleva a la potencia de 2 y se multiplica por el área.
Expresión:
MetersToFeet((float(!shape.area!)))
Tipo de expresión:
PYTHON_9.3
Código bloque:
import math
def MetersToFeet(area):
return math.pow(3.2808, 2) * area
Calcular campos utilizando la lógica con Python
Clasificar basado en los valores de campo.
Expresión:
Reclass(!WELL_YIELD!)
Tipo de expresión:
PYTHON_9.3
Código bloque:
def Reclass(WellYield):
if (WellYield >= 0 and WellYield <= 10):
return 1
elif (WellYield > 10 and WellYield <= 20):
return 2
elif (WellYield > 20 and WellYield <= 30):
return 3
elif (WellYield > 30):
return 4
Calcular campos utilizando la lógica con VBScript
Ejecuta condicionalmente un grupo de declaraciones, dependiendo del valor de una expresión.
Expresión:
density
Tipo de expresión:
VB
Código bloque:
Dim density
If [POP90_SQMI] < 100 Then
density = "low"
elseif [POP90_SQMI] < 300 Then
density = "medium"
else
density = "high"
end if
Ejemplos de código: geometría
Calcular el área de una entidad.
Expresión:
!shape.area!
Tipo de expresión:
PYTHON_9.3
Calcular la coordenada X máxima de una entidad.
Expresión:
!shape.extent.XMax!
Tipo de expresión:
PYTHON_9.3
Calcular el número de vértices de una entidad.
Expresión:
MySub(!shape!)
Tipo de expresión:
PYTHON_9.3
Código bloque:
def MySub(feat):
partnum = 0
# Count the number of points in the current multipart feature
partcount = feat.partCount
pntcount = 0
# Enter while loop for each part in the feature (if a singlepart
# feature this will occur only once)
#
while partnum < partcount:
part = feat.getPart(partnum)
pnt = part.next()
# Enter while loop for each vertex
#
while pnt:
pntcount += 1
pnt = part.next()
# If pnt is null, either the part is finished or there
# is an interior ring
#
if not pnt:
pnt = part.next()
partnum += 1
return pntcount
Para una clase de entidad de puntos, cambiar la coordenada x de cada punto por 100.
Expresión:
shiftXCoordinate(!SHAPE!)
Tipo de expresión:
PYTHON_9.3
Código bloque:
def shiftXCoordinate(shape):
shiftValue = 100
point = shape.getPart(0)
point.X += shiftValue
return point
Conversiones de unidades geométricas
Las propiedades de área y longitud del campo de geometría se pueden modificar con tipos de unidades expresados con un signo @.
- 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
Calcular la longitud de una entidad en yardas.
Expresión:
!shape.length@yards!
Tipo de expresión:
PYTHON_9.3
Calcular el área de una entidad en acres.
Expresión:
!shape.area@acres!
Tipo de expresión:
PYTHON_9.3
La longitud y área geodésicas también se pueden calcular utilizando las propiedades geodesicArea y geodesicLength con el signo @ seguidas de una palabra clave de unidad de medida.
Calcule la longitud geodésica de una entidad en yardas.
Expresión:
!shape.geodesicLength@yards!
Tipo de expresión:
PYTHON_9.3
Calcule el área geodésica de una entidad en acres.
Expresión:
!shape.geodesicArea@acres!
Tipo de expresión:
PYTHON_9.3
Ejemplos de código: fechas
Calcular la fecha actual.
Expresión:
time.strftime("%d/%m/%Y")
Tipo de expresión:
PYTHON_9.3
Calcular la fecha y hora actuales.
Expresión:
datetime.datetime.now()
Tipo de expresión:
PYTHON_9.3
Calcular la fecha para que sea el 31 de diciembre de 2000.
Expresión:
datetime.datetime(2000, 12, 31)
Tipo de expresión:
PYTHON_9.3
Calcular el número de días entre la fecha actual y el valor en un campo.
Expresión:
(datetime.datetime.now() - arcpy.time.ParseDateTimeString(!field1!)).days
Tipo de expresión:
PYTHON_9.3
Calcular una fecha agregando 100 días al valor de fecha en un campo.
Expresión:
arcpy.time.ParseDateTimeString(!field1!) + datetime.timedelta(days=100)
Tipo de expresión:
PYTHON_9.3
Calcular el día de la semana (por ejemplo, domingo) para un valor de fecha en un campo.
Expresión:
arcpy.time.ParseDateTimeString(!field1!).strftime('%A')
Tipo de expresión:
PYTHON_9.3
Ejemplos de código: cadenas de caracteres
Devolver los tres caracteres más a la derecha.
Expresión:
!SUB_REGION![-3:]
Tipo de expresión:
PYTHON_9.3
Remplazar todas las instancias de una "P" mayúscula con una "p" minúscula.
Expresión:
!STATE_NAME!.replace("P","p")
Tipo de expresión:
PYTHON_9.3
Concatenar dos campos con un separador de espacio
Expresión:
!SUB_REGION! + " " + !STATE_ABBR!
Tipo de expresión:
PYTHON_9.3
Convertir a la primera letra de cada palabra en mayúscula y las demás en minúscula
Los siguientes ejemplos muestran diferentes maneras de convertir palabras de modo que cada palabra tenga la primer letra en mayúscula y el resto de las letras en minúscula.
Expresión:
' '.join([i.capitalize() for i in !STATE_NAME!.split(' ')])
Tipo de expresión:
PYTHON_9.3
Expresión:
!STATE_NAME!.title()
Tipo de expresión:
PYTHON_9.3
Expresiones regulares
El módulo re de Python proporciona operaciones de concordancia de expresión regular que se pueden utilizar para elaborar las reglas de geocodificación y sustitución de patrones complejos de cadenas de caracteres.
Reemplazar 'St' o 'St.' al iniciar una nueva palabra al final de la cadena de caracteres con la palabra 'Street'.
Expresión:
update_street(!ADDRESS!)
Tipo de expresión:
PYTHON_9.3
Código bloque:
import re
def update_street(street_name):
return re.sub(r"""\b(St|St.)\Z""",
'Street',
street_name)
Cálculos acumulativos y secuenciales
Calcular un número o Id. secuencial basado en un intervalo.
Expresión:
autoIncrement()
Tipo de expresión:
PYTHON_9.3
Código bloque:
rec=0
def autoIncrement():
global rec
pStart = 1 #adjust start value, if req'd
pInterval = 1 #adjust interval value, if req'd
if (rec == 0):
rec = pStart
else:
rec = rec + pInterval
return rec
Calcular el valor acumulativo de un campo numérico.
Expresión:
accumulate(!FieldA!)
Tipo de expresión:
PYTHON_9.3
Código bloque:
total = 0
def accumulate(increment):
global total
if total:
total += increment
else:
total = increment
return total
Calcular el aumento del porcentaje de un campo numérico.
Expresión:
percentIncrease(float(!FieldA!))
Tipo de expresión:
PYTHON_9.3
Código bloque:
lastValue = 0
def percentIncrease(newValue):
global lastValue
if lastValue:
percentage = ((newValue - lastValue) / lastValue) * 100
else:
percentage = 0
lastValue = newValue
return percentage
Valores aleatorios
Utilizar el paquete del sitio de numpy para calcular valores flotantes aleatorios entre 0,0 y 1,0.
Expresión:
getRandomValue()
Tipo de expresión:
PYTHON_9.3
Código bloque:
import numpy
def getRandomValue():
return numpy.random.random()
Calcular valores nulos
Con una expresión de Python, se pueden calcular los valores nulos utilizando un valor None de Python.
Use Python None para calcular valores nulos.
Expresión:
"None"
Tipo de expresión:
PYTHON_9.3