2 votos

Rellenar los campos en función de los objetos seleccionados mediante el updatecursor

¿Cómo consigo que mi script sólo rellene los campos de los objetos seleccionados mientras edito en el mapa?

# Importing arcpy
  import arcpy

# Set the workspace environment
  arcpy.env.workspace = r'C:\Users\aa2zz6\Desktop\TrackTraceDownload\UPDM2016.gdb'

  rows = arcpy.UpdateCursor('P_ExcessFlowValve')
  for row in rows:
    if row.ItemNumber == '100':
      row.Status = 'In Service' 
      row.Owner = ''
      row.Diameter = '1'
      row.Capacity = ''
      rows.updateRow(row)
  del row
  del rows

  print "Updated Selected EFV Features on the map"

3voto

Anton8000 Puntos 165

Utiliza el módulo de acceso a datos cursores en cambio, son más rápidos. Si sólo desea actualizar los registros seleccionados en el mapa, deberá utilizar la capa de características como entrada (=no dirija el updatecursor a la clase de características de la geodatabase) y ejecutar el código en la ventana python de ArcGIS. Para utilizar la capa de características como entrada sólo tiene que utilizar el mismo nombre que la capa de características en el índice. ArcMap autocompletará el nombre por usted:

with arcpy.da.UpdateCursor("Name_of_feature_layer",['ItemNumber','Status','Owner','Diameter','Capacity']) as cursor:
    for row in cursor:
        if row[0]=='100':
            row[1],row[2],row[3],row[4]=['In Service','','1','']
            cursor.updateRow(row)

Ejemplo de selección de registros y devolución de los mismos utilizando el SearchCursor:

enter image description here

0voto

Deepesh Deepak Puntos 21

Puedes añadir la consulta en la propia llamada a UpdateCursor. Además, el UpdateCursor normal (a diferencia de arcpy.da.UpdateCursor()) no establece los campos como invocables por la fila. Así que lo siguiente funcionaría para ti, creo:

rows = arcpy.UpdateCursor('P_ExcessFlowValve', '*', "ItemNumber ='100'")    
for row in rows:    
    row.setValue('Status','In Service' )   
    row.setValue('Owner', '')    
    row.setValue('Diameter, '1')   
    row.setValue('Capacity', '')    
rows.updateRow(row)

del rows   
print "Updated Selected EFV Features on the map"

Nota importante, asegúrese de que los tipos de campo coinciden con los valores que está asignando. Asegúrese de que ItemNumber, Diameter, etc. son Texto (que es lo que está utilizando aquí) y no Entero corto o Largo, ya que esto hará que el script falle. Si son enteros, simplemente elimine las comillas ' para esos valores y esto debería funcionar bien.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X