7 votos

Seleccione Layer By Attribute usando loop

Tengo 273 funciones en la clase de entidad y quiero seleccionarlas una por una y usar la declaración en el siguiente código.

En la línea:

 *arcpy.SelectLayerByAttribute_management (fc1,"NEW_SELECTION","OBJECTID=79")*, 
 

La función cuyo identificador de objeto es 79 una de las características. Cuando uso este código, lo hago solo para esa característica. Quiero aplicar la declaración a todas las características una por una con un bucle. Intento hacerlo, pero soy nuevo para programar con Python.

 import arcpy
from arcpy import env
env.workspace = "D:\pomme de terre 2\pomme de terre2.gdb"
env.overwriteOutput = 1

fc1 = "Flowlin24K_sl_Uns"
fc2 = "New_Poyline"

arcpy.SelectLayerByAttribute_management (fc1,"NEW_SELECTION","OBJECTID=79")
arcpy.SelectLayerByLocation_management(fc1,"INTERSECT",fc1)
arcpy.SelectLayerByAttribute_management (fc1,"REMOVE_FROM_SELECTION","StreamLevel>6")
arcpy.CopyFeatures_management(fc1,"hidden")
arcpy.SelectLayerByAttribute_management (fc1,"CLEAR_SELECTION")

coordList = []

arcpy.FeatureVerticesToPoints_management("hidden", "vertices", "MID")
arcpy.AddXY_management("vertices")
rows = arcpy.SearchCursor("vertices")

for row in rows:
    X = row.getValue("POINT_X")
    Y = row.getValue("POINT_Y")
    coordList.append([X, Y])

del row, rows

coordList.sort()

point = arcpy.Point()
array = arcpy.Array()

for feature in coordList:
    point.X = feature[0]
    point.Y = feature[1]
    array.add(point)

polyline = arcpy.Polyline(array)

array.removeAll()
arcpy.Delete_management("vertices")
arcpy.Delete_management("hidden")
arcpy.CopyFeatures_management(polyline, fc2)
 

7voto

Roy Puntos 2884

Usted puede sacar esto, pero es mi entendimiento de que no se pueden ejecutar las selecciones de las clases de entidad, sólo en función de las CAPAS.

Desde ESRI: La entrada debe ser una característica de la capa o una vista de tabla. El de entrada no puede ser una clase de entidad o tabla. ESRI SelectLayerByAttributes archivos de Ayuda

El código requiere un arcpy.MakeFeatureLayer_management() ESRI MakeFeatureLayer archivos de Ayuda Recuerde eliminar la capa de entidad al final del bucle

Desde ya tienes una comprensión de búsqueda, los cursores, sólo podría utilizar el cursor para identificar el OID para cada bucle -- esto eliminaría la posibilidad de que el índice está fuera de rango. Cada vez que el bucle a través de su código, cambie su cláusula where a la fila actual de la OID.

Si usted es el conseguir justo en Python para ArcMap yo ALTAMENTE recomiendo que compruebes el Estado de Penn en Línea de GIS Programa de Maestría - Es open courseware a través de la MIT licencia de Creative commons.

4voto

texai Puntos 178

¿Intentó un bucle desde el punto de inicio hasta el punto siguiente?

 for a in range(0,274):
    obj = "OBJECTID=%s" % (a)
    arcpy.SelectLayerByAttribute_management (fc1,"NEW_SELECTION",obj)
    arcpy.SelectLayerByLocation_management(fc1,"INTERSECT",fc1)
    arcpy.SelectLayerByAttribute_management (fc1,"REMOVE_FROM_SELECTION","StreamLevel>6")
    arcpy.CopyFeatures_management(fc1,"hidden")
    arcpy.SelectLayerByAttribute_management (fc1,"CLEAR_SELECTION")

    ...
 

debería resolver tu problema ...

1voto

Hameno Puntos 129

¿Has mirado la selección de características de iteración usando ModelBuilder ? Una vez que tenga su modelo funcionando, puede exportar el código a python.

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