Estoy trabajando en un script que itera a través de los registros de "feature class A", realiza una selección espacial (flow tracing) con cada registro individual de "A" en "feature class B" y luego calcula en campo un atributo de "A" en los registros seleccionados resultantes en "B"
Básicamente, para cada nodo situado más abajo en una red de tuberías de alcantarillado, rastrea aguas arriba y asigna el ID de ese nodo aguas abajo a todas las características aguas arriba.
El valor del atributo siempre será un número entero, pero a veces el campo en A se formatea como texto y a veces como número.
Puedo realizar con éxito este cálculo si:
A se formatea como TEXTO
y
B se formatea como LONG
la operación no calcula nada si:
A se formatea como LONG
y
B está formateado como LONG
¿Qué me falta para que esto funcione para ambos casos potenciales de entrada si el ID de A es un número entero de texto o un formato de número entero entero?
...
for row in cursor:
ID = (str(row.getValue(str(flagname))))
whereclause = ((str(flagname)) +str(' = ') + "'%s'" %ID)
fc=str(r"outfalls_lyr")
arcpy.MakeFeatureLayer_management(traceflag, fc)
try:
arcpy.SelectLayerByAttribute_management(fc, "NEW_SELECTION",str(whereclause))
arcpy.MakeFeatureLayer_management( fc,r"in_memory\temp_of")
arcpy.TraceGeometricNetwork_management(geomnet, r"in_memory\outNet",r"in_memory\temp_of" , "TRACE_UPSTREAM", "", "", "","", "", "NO_TRACE_ENDS", "NO_TRACE_INDETERMINATE_FLOW", "", "", "AS_IS", "", "", "", "AS_IS")
for layer in arcpy.mapping.Layer(r"in_memory\outNet"):
try:
print arcpy.mapping.ListLayers(layer)
calc = str('"%s"' %ID)
arcpy.CalculateField_management (layer, fieldname, calc,"","")
except:
print arcpy.GetMessages()
except:
print arcpy.GetMessages()
Publicado también en Stack Overflow.