Приведенный ниже код создаст из шейп-файла файл слоя с именем test_A.lyr, в котором сохранен запрос определения "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
При необходимости вы также можете добавить этот файл слоя или объект Layer (lyr) до того, как он будет сохранен как файл слоя, в вашу карту с помощью arcpy.mapping.AddLayer.
Чтобы увидеть, передается ли where_clause в MakeFeatureLayer как запрос определения, что, по моему мнению, является недокументированным поведением, я выполнил второй тест ниже, чтобы проверить ответ @John, и он совершенно прав.
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()
была замененаarcpy.mp.LayerFile()
Да, это определенно должно быть возможно для вас, так как именно для этого и нужен необязательный параметр "where_clause" - подробности и примеры см. В его документации , но в основном вам просто нужно включить запрос определения в качестве параметра where_clause, и он должен работать. Единственное, на что следует обратить внимание: если вы используете слой, у которого нет поля ObjectID / FID, у ArcGIS есть проблемы с запуском выражений SQL, но любой обычный слой ArcGIS будет.
источник
Если вы загружаете слои в Arcmap с помощью инструмента геообработки MakeFeatureLayer, вы можете установить DefinitionQuery для существующих слоев Arcmap с помощью слоев класса arcpy.mapping - DefinitionQuery .
источник