Definindo consulta de definição na camada ArcPy do shapefile?

11

Estou tentando determinar as opções para definir uma consulta de definição de camada usando o ArcPy.

Eu sei que é possível ao usar arcpy.mapping.ListLayers ().

No entanto, neste cenário, estou carregando em shapefiles e usando arcpy.MakeFeatureLayer_management () no ArcPy.

Eu quero definir uma consulta de definição na camada que eu criei usando esse geoprocessador.

Isso é possível?

amasephy
fonte

Respostas:

15

O código abaixo criará, a partir de um shapefile, um arquivo de camada chamado test_A.lyr que possui uma Consulta de definição de "testField" = 'A' salva nele.

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

Se necessário, você também pode adicionar esse arquivo de camada, ou o objeto Layer (lyr), antes de ser salvo como um arquivo de camada, no seu mapa via arcpy.mapping.AddLayer.

Para ver se uma cláusula where em MakeFeatureLayer é passada como uma Consulta de Definição, que eu acho que é um comportamento não documentado, realizei um segundo teste abaixo para verificar a Resposta de @John, e ele está correto.

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
fonte
Para atualizar para o ArcGIS Pro e sua biblioteca , arcpy.mapping.layer()foi substituído porarcpy.mp.LayerFile()
adin
5

Sim, definitivamente deve ser possível para você, pois é para isso que serve o parâmetro opcional "where_clause" - consulte a documentação para obter detalhes e exemplos, mas basicamente você só precisa incluir a consulta de definição como o parâmetro where_clause e deve funcionar. É importante notar que, se você estiver usando uma camada que não possui um campo ObjectID / FID, o ArcGIS tem problemas ao executar expressões SQL, mas qualquer camada regular do ArcGIS terá.

John
fonte