Ejemplos de Calcular campo

Introducir valores con el teclado no es la única forma de editar los valores de 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 anterior que utilizan ArcObjects, deberá modificar los cálculos.

NotaNota:
  • Python aplica la sangría como parte de la sintaxis. Utilice dos o cuatro espacios para definir cada nivel lógico. Alinee el comienzo y el final de los bloques de declaración, y sea consistente.
  • Los campos de expresión de cálculo de Python se encuentran entre signos de exclamación (!!).
  • Cuando nombre variables, tenga en cuenta que Python distingue entre mayúsculas y minúsculas, de manera que yield no es lo mismo que Yield.
  • VBScript no permite declarar explícitamente ningún tipo de dato; todas las variables son implícitamente Variant. Las declaraciones como Dim x as String deberían quitarse o simplificarse a Dim x.
  • Después de introducir las declaraciones, puede hacer clic en Guardar si desea escribirlas en un archivo. El botón Cargar le solicitará que busque y seleccione un archivo de cálculo existente.

Cálculos simples

Ejemplos de cadenas sencillas

Las cadenas están admitidas por una serie de funciones de cadenas de Python, incluidas capitalize, rstrip y replace.

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]

El segundo/último carácter.

"e"

!fieldname![1:4]

El segundo, tercero, cuarto y quinto carácter.

"bcd"

Python también admite el formato de cadena con el operador %.

Combinar FieldA y FieldB separados por dos puntos.

"%s:%s" % (!FieldA!, !FieldB!)

Funciones de cadenas de VBScript

Las cadenas de caracteres están admitidas por una serie de funciones de cadenas de caracteres de VBScript, incluidas Left, InStr y Chr. A continuación hay algunos ejemplos de VBScript para funciones de cadenas comúnmente utilizadas en la Calculadora de campo.

Función Left: Devuelve una (cadena) Variant que contiene una cantidad especificada de caracteres desde el lado izquierdo de una cadena.

MyStr = Left([MyField], 1)

Función Right: Devuelve una (cadena) Variant que contiene una cantidad especificada de caracteres desde el lado derecho de una cadena.

MyStr = Right([MyField], 1)

Función Mid: Devuelve una (cadena) Variant que contiene una cantidad especificada 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, una cantidad de veces especificada.

NewString = Replace([comments], "#", "!")

Función Chr: Devuelve una cadena que contiene el carácter asociado con el 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

-x

expresión negativa de x

x = 5

-x

, 2

+x

x no cambia

x = 5

+x

5 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 en la operación debe ser un valor decimal: 3.0/2 = 1.5
  • Use la función flotante para convertir explícitamente el valor a un flotante:
    float(3)/2 = 1.5
    
    float(!Population!) / !Area!
    

Funciones de Python incorporada

Python tiene varias funciones incorporadas disponibles, incluidas máximo, mínimo, redondear y suma.

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 de Código bloque, puede:

El analizador utilizado determina la forma en que se utiliza el código bloque. La Calculadora de campo es compatible con los analizadores de Python y VB Script.

Analizador

Bloque de código

Python

Es compatible con la funcionalidad de Python. El bloque de código se expresa utilizando las funciones de Python (def). Las propiedades de geometría se expresan utilizando objetos de geoprocesamiento, como objetos de punto, donde sea apropiado.

VB Script

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). Los valores se vuelven de la función con una declaración return. El nombre de la función es elección suya (no utilice espacios ni números a la izquierda).

Utilizar la calculadora de campo
NotaNota:

Recuerde que Python aplica la sangría como parte de la sintaxis. Utilice dos o cuatro espacios para definir cada nivel lógico. Alinee el comienzo y el final de los bloques de declaración, y sea consistente.

Muestras de código: matemática

Redondear el valor del campo a dos posiciones decimales.

Expression: round(!area!, 2)  Parser: Python

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.

Parser: Python  Expression: MetersToFeet((float(!shape.area!)))  Code Block: 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.

Parser: Python  Expression: Reclass(!WELL_YIELD!)  Code Block: 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.

Parser: VB Script  Expression: density  Code Block: 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

NotaNota:

Para obtener más información sobre la conversión de unidades geométricas, consulte la sección "Conversiones de unidades geométricas" a continuación.

Calcular el área de una entidad.

Parser: Python  Expression: !shape.area!

Calcular la coordenada X máxima de una entidad.

Parser: Python  Expression: !shape.extent.XMax!

Calcular el número de vértices de una entidad.

Parser: Python  Expression: MySub(!shape!)  Code Block: 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.

Parser: Python  Expression: shiftXCoordinate(!SHAPE!)  Code Block: def shiftXCoordinate(shape):    shiftValue = 100    point = shape.getPart(0)    point.X += shiftValue    return point

Conversiones de unidades geométricas

Las propiedades de forma y longitud del campo de geometría se pueden modificar con tipos de unidades expresadas con un signo @.

NotaNota:

Si los datos se almacenan en un sistema de coordenadas geográficas y se proporciona una unidad lineal (por ejemplo, pies), el cálculo de longitud se convertirá mediante un algoritmo geodésico.

PrecauciónPrecaución:

Convertir las unidades de área en datos en un sistema de coordenadas geográficas producirá resultados cuestionables ya que los grados decimales no son consistentes en el globo.

Calcular la longitud de una entidad en yardas.

Parser: Python  Expression: !shape.length@yards!

Calcular el área de una entidad en acres.

Parser: Python  Expression: !shape.area@acres!

Ejemplos de código: fechas

Calcular la fecha actual.

Parser: Python  Expression: time.strftime("%d/%m/%Y")

Calcular la fecha y hora actuales.

Parser: Python  Expression: time.strftime("%d/%m/%Y %H:%M")

Ejemplos de código: cadenas de caracteres

Devolver los tres caracteres más a la derecha.

Parser: Python  Expression: !SUB_REGION![-3:]

Remplazar todas las instancias de una "P" mayúscula con una "p" minúscula.

Parser: Python  Expression: !STATE_NAME!.replace("P","p")

Concatenar dos campos con un separador de espacio

Parser: Python  Expression: !SUB_REGION! + " " + !STATE_ABBR!

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.

Parser: Python  Expression: ' '.join([i.capitalize() for i in !STATE_NAME!.split(' ')])
Parser: Python  Expression: string.capwords(!STATE_NAME!, ' ')  Code Block: import string
Parser: Python  Expression: MySub(!STATE_NAME!)  Code Block: def MySub(myfieldname):  import string   return string.capwords(myfieldname, ' ')

Expresiones regulares

El módulo re de Python proporciona operaciones de concordancia de expresión regular que se pueden utilizar para realizar la geocodificación de patrón complejo y normas de sustitución para cadenas de caracteres.

Reemplazar 'St' o 'St.' al iniciar nuevas palabras al final de la cadena de caracteres con la palabra 'Street'.

Parser: Python  Expression: update_street(!ADDRESS!)  Code Block: 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.

Parser: Python  Expression: autoIncrement()  Code Block: 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.

Parser: Python  Expression: accumulate(!FieldA!)  Code Block: 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.

Parser: Python  Expression: percentIncrease(float(!FieldA!))  Code Block: 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.

Parser: Python  Expression: getRandomValue()  Code Block: import numpy.random as R  def getRandomValue():     return R.random()

Calcular valores nulos

Al usar una expresión de Python, los valores nulos se pueden calcular con un Python None.

NotaNota:

El siguiente cálculo solo funcionará si el campo es anulable.

Use Python None para calcular valores nulos.

Parser: Python  Expression: None

Temas relacionados

9/11/2013