¿Definición de consulta de definición en la capa ArcPy desde shapefile?

11

Estoy tratando de determinar las opciones para establecer una consulta de definición de capa usando ArcPy.

Sé que es posible cuando utilizo arcpy.mapping.ListLayers ().

Sin embargo, en este escenario, estoy cargando archivos shape y usando arcpy.MakeFeatureLayer_management () en ArcPy.

Quiero establecer una consulta de definición en la capa que creo al usar este geoprocesador.

es posible?

amasephy
fuente

Respuestas:

15

El siguiente código creará, a partir de un archivo de forma, un archivo de capa llamado test_A.lyr que tiene una consulta de definición de "testField" = 'A' guardada en él.

import arcpy

arcpy.MakeFeatureLayer_management(r"C:\temp\testLines.shp","test_lyr")
lyr = arcpy.mapping.Layer("test_lyr")
lyr.name = "test"
lyr.definitionQuery = '"testField" = ' + "'A'"
lyr.saveACopy(r"C:\temp\test_A.lyr")

del lyr

Si es necesario, también puede agregar este archivo de capa, o el objeto de capa (lyr) antes de que se guarde como un archivo de capa, en su mapa a través de arcpy.mapping.AddLayer.

Para ver si una cláusula where_clave en MakeFeatureLayer se pasa como una Consulta de definición, que creo que es un comportamiento indocumentado, realicé una segunda prueba a continuación para verificar la Respuesta de @John, y él es bastante correcto.

arcpy.MakeFeatureLayer_management(r"C:\temp\testLines.shp","test_lyr2",'"testField" = ' + "'A'")
lyr2 = arcpy.mapping.Layer("test_lyr2")
lyr2.name = "test2"
lyr2.saveACopy(r"C:\temp\test_2.lyr")

del lyr2
PolyGeo
fuente
Para actualizar para ArcGIS Pro y su biblioteca , arcpy.mapping.layer()se ha reemplazado conarcpy.mp.LayerFile()
adin
5

Sí, definitivamente debería ser posible para usted, ya que para eso es el parámetro opcional "where_clause"; consulte su documentación para obtener detalles y ejemplos, pero básicamente solo necesita incluir la consulta de definición como el parámetro where_clause y debería funcionar. Lo único a tener en cuenta es que si está utilizando una capa que no tiene un campo ObjectID / FID, ArcGIS tiene problemas para ejecutar expresiones SQL en su contra, pero cualquier capa ArcGIS normal sí.

John
fuente