Le code ci-dessous créera, à partir d'un fichier de formes, un fichier de couches appelé test_A.lyr qui contient une requête de définition de "testField" = 'A' enregistrée.
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 nécessaire, vous pouvez également ajouter ce fichier de couche, ou l'objet Layer (lyr) avant qu'il ne soit enregistré en tant que fichier de couche, dans votre carte via arcpy.mapping.AddLayer.
Pour voir si une clause where_clause sur MakeFeatureLayer est transmise en tant que requête de définition, ce qui, à mon avis, est un comportement non documenté, j'ai effectué un deuxième test ci-dessous pour vérifier la réponse de @John, et il a tout à fait raison.
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
arcpy.mapping.layer()
a été remplacé pararcpy.mp.LayerFile()
Oui, cela devrait certainement être possible pour vous, car c'est à cela que sert le paramètre facultatif "where_clause" - consultez sa documentation pour plus de détails et des exemples, mais en gros, il vous suffit d'inclure la requête de définition en tant que paramètre where_clause et cela devrait fonctionner. Seule chose à noter, si vous utilisez une couche qui n'a pas de champ ObjectID / FID, ArcGIS a des problèmes lors de l'exécution d'expressions SQL, mais toute couche ArcGIS régulière le fera.
la source
Si vous chargez des couches dans Arcmap à l'aide de l'outil de géotraitement MakeFeatureLayer, vous pouvez définir la définitionQuery sur les couches arcmap existantes à l' aide des couches de classe arcpy.mapping - definitionQuery .
la source