从shapefile在ArcPy图层上设置定义查询?


11

我正在尝试确定使用ArcPy设置图层定义查询的选项。

我知道使用arcpy.mapping.ListLayers()时是可能的。

但是,在这种情况下,我正在加载shapefile,并在ArcPy中使用arcpy.MakeFeatureLayer_management()。

我想在使用此地理处理器创建的图层上设置定义查询。

这可能吗?

Answers:


15

下面的代码将从shapefile创建一个名为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

如果需要,还可以通过arcpy.mapping.AddLayer将此图层文件或图层对象(lyr)保存为图层文件之前,将其添加到地图中。

为了查看MakeFeatureLayer上的where_clause是否作为定义查询通过,我认为这没有记录,我在下面进行了第二次测试以验证@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

要更新ArcGIS Pro及其库arcpy.mapping.layer()已由arcpy.mp.LayerFile()
adin

5

是的,您绝对应该可以,因为这是可选的“ where_clause”参数的用途- 有关详细信息和示例,请参见其文档,但是基本上,您只需要将定义查询包括为where_clause参数即可,它应该可以工作。唯一要注意的是,如果使用的图层没有ObjectID / FID字段,则ArcGIS会在针对该图层运行SQL表达式时遇到问题,但是任何常规的ArcGIS图层都会遇到问题。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.