Definitionsabfrage auf ArcPy-Ebene aus Shapefile festlegen?

11

Ich versuche, Optionen zum Festlegen einer Ebenendefinitionsabfrage mithilfe von ArcPy zu ermitteln.

Ich weiß, dass es möglich ist, wenn arcpy.mapping.ListLayers () verwendet wird.

In diesem Szenario lade ich jedoch Shapefiles und verwende arcpy.MakeFeatureLayer_management () in ArcPy.

Ich möchte eine Definitionsabfrage auf der Ebene festlegen, die ich mit diesem Geoprozessor erstelle.

Ist das möglich?

Amasephy
quelle

Antworten:

15

Der folgende Code erstellt aus einem Shapefile eine Layer-Datei mit dem Namen test_A.lyr, in der eine Definitionsabfrage von "testField" = 'A' gespeichert ist.

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

Bei Bedarf können Sie diese Layer-Datei oder das Layer-Objekt (lyr) auch vor dem Speichern als Layer-Datei über arcpy.mapping.AddLayer zu Ihrer Karte hinzufügen.

Um zu sehen, ob eine where_clause in MakeFeatureLayer als Definitionsabfrage übergeben wird, was meines Erachtens ein undokumentiertes Verhalten ist, habe ich unten einen zweiten Test durchgeführt, um die Antwort von @John zu überprüfen, und er ist ganz korrekt.

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
quelle
Das Update für ArcGIS Pro und seine Bibliothek wurde arcpy.mapping.layer()arcpy.mp.LayerFile()
adin
5

Ja, es sollte auf jeden Fall für Sie möglich sein, da dies der optionale Parameter "where_clause" ist. Einzelheiten und Beispiele finden Sie in der Dokumentation. Grundsätzlich müssen Sie jedoch nur die Definitionsabfrage als Parameter where_clause einfügen, und es sollte funktionieren. Wenn Sie eine Ebene verwenden, die kein ObjectID / FID-Feld enthält, treten bei ArcGIS nur Probleme beim Ausführen von SQL-Ausdrücken auf, bei jeder regulären ArcGIS-Ebene jedoch.

John
quelle