Poniższy kod utworzy z pliku kształtu plik warstw o nazwie test_A.lyr, w którym zapisane jest zapytanie definicji „testField” = „A”.
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
W razie potrzeby możesz również dodać ten plik warstwy lub obiekt warstwy (lyr) przed zapisaniem go jako plik warstwy do mapy za pomocą arcpy.mapping.AddLayer.
Aby sprawdzić, czy klauzula where_clause na MakeFeatureLayer jest przekazywana jako zapytanie definicji, które uważam za zachowanie nieudokumentowane, wykonałem drugi test poniżej, aby zweryfikować odpowiedź @Johna, a on jest całkiem poprawny.
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()
został zastąpionyarcpy.mp.LayerFile()
Tak, zdecydowanie powinno być to dla ciebie możliwe, ponieważ do tego służy opcjonalny parametr „where_clause” - zobacz dokumentację, aby uzyskać szczegółowe informacje i przykłady, ale w zasadzie wystarczy podać zapytanie definicji jako parametr where_clause i powinno działać. Jedyną rzeczą wartą uwagi, jeśli używasz warstwy, która nie ma pola ObjectID / FID, ArcGIS ma problemy z uruchomieniem wyrażeń SQL, ale każda zwykła warstwa ArcGIS to zrobi.
źródło
Jeśli ładujesz warstwy do Arcmap za pomocą narzędzia geoprzetwarzania MakeFeatureLayer, możesz ustawić definicję zapytania na istniejących warstwach arcmap za pomocą warstw klasy arcpy.mapping - definitionQuery .
źródło