Установка определения запроса на слое ArcPy из шейп-файла?

11

Я пытаюсь определить параметры для установки запроса определения слоя с помощью ArcPy.

Я знаю, что это возможно при использовании arcpy.mapping.ListLayers ().

Однако в этом сценарии я загружаю шейп-файлы и использую arcpy.MakeFeatureLayer_management () в ArcPy.

Я хочу установить запрос определения для слоя, который я создаю с помощью этого геопроцессора.

Это возможно?

amasephy
источник

Ответы:

15

Приведенный ниже код создаст из шейп-файла файл слоя с именем 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
PolyGeo
источник
Для обновления для ArcGIS Pro и его библиотеки , arcpy.mapping.layer()была замененаarcpy.mp.LayerFile()
Адина
5

Да, это определенно должно быть возможно для вас, так как именно для этого и нужен необязательный параметр "where_clause" - подробности и примеры см. В его документации , но в основном вам просто нужно включить запрос определения в качестве параметра where_clause, и он должен работать. Единственное, на что следует обратить внимание: если вы используете слой, у которого нет поля ObjectID / FID, у ArcGIS есть проблемы с запуском выражений SQL, но любой обычный слой ArcGIS будет.

Джон
источник