Ustawianie definicji zapytania na warstwie ArcPy z pliku kształtu?

11

Próbuję określić opcje ustawienia zapytania dotyczącego definicji warstwy za pomocą ArcPy.

Wiem, że jest to możliwe przy użyciu arcpy.mapping.ListLayers ().

Jednak w tym scenariuszu ładuję pliki kształtów i używam arcpy.MakeFeatureLayer_management () w ArcPy.

Chcę ustawić zapytanie definicji na warstwie, którą tworzę z tego geoprocesora.

czy to możliwe?

amasephy
źródło

Odpowiedzi:

15

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
PolyGeo
źródło
Aby zaktualizować do ArcGIS Pro i jego biblioteki , arcpy.mapping.layer()został zastąpionyarcpy.mp.LayerFile()
Adin
5

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.

Jan
źródło