Définition d'une requête de définition sur la couche ArcPy à partir du fichier de formes?

11

J'essaie de déterminer les options pour définir une requête de définition de couche à l'aide d'ArcPy.

Je sais que cela est possible lors de l'utilisation de arcpy.mapping.ListLayers ().

Cependant, dans ce scénario, je charge des fichiers de formes et j'utilise arcpy.MakeFeatureLayer_management () dans ArcPy.

Je souhaite définir une requête de définition sur la couche que je crée à l'aide de ce géoprocesseur.

Est-ce possible?

amasephy
la source

Réponses:

15

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
PolyGeo
la source
Pour mettre à jour pour ArcGIS Pro et sa bibliothèque , arcpy.mapping.layer()a été remplacé pararcpy.mp.LayerFile()
adin
5

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.

John
la source