调用arcpy.SelctLayerByAttribute函数出现问题!

如题,我调用arcpy.SelctLayerByAttribute函数筛选图层中的矢量要素,会设置一条查询语句query = ‘ “Elevation <= 0 ” ’, 之后把它作为输入参数改变为 query = arcpy.GetParameterAsText(0), 之后我在输入参数里设置query为SQL语言,输入
“Elevation” <= 0, 运行后在生成图层再用上述函数处理时会报表达式错误,我又把SQL语言改为String, 输入了跟第一条一模一样的表达式,但还是会报错,请问这是为什么?应该怎么解决?(注:一个发现:使用SQL语言作为输入参数在保存原有图层直接运行处理的情况下可以生成正确的筛选后图层,但是如果先生成图层就会报表达式错误)
已邀请:

慕晓燕 - 长期ArcGIS爱好者

赞同来自: 潘建伟 陈晨

query = arcpy.GetParameterAsText(0)  ,那无论你的工具的参数的类型如何设置(SQL Expression 还是 String), query 都是字符串,所以不要在意工具界面上的类型设置,设置了之后只是会获得一些GP框架自带的界面功能。
 
另外有个点我不知题主是否考虑了,就是arcpy.SelectLayerByAttribute() 函数接收的是 Feature Layer 对象,而不是Feature Class,因此注意传入内存图层或lyr文件对象,而不是硬盘数据地址。可以在输入参数中设置类型,也可以在代码中加入arcpy.MakeFeatureLayer_management()实现。
 
我们再来解决这个问题,我做了个简单的测试可以实现,如下,请参照看看问题在哪。

测试1.png


测试2.png

 
脚本:
# -*- coding: utf-8 -*-
__author__ = 'Xiaoyan Mu'

import arcpy
input = arcpy.GetParameterAsText(0)
query = arcpy.GetParameterAsText(1)

arcpy.env.workspace = r"D:\USA.gdb\USA"
try:
# arcpy.MakeFeatureLayer_management("cities","lyr")
arcpy.SelectLayerByAttribute_management(input,"NEW_SELECTION", query)
arcpy.CopyFeatures_management(input,"NewLayer")
except arcpy.ExecuteError:
# Get the tool error messages
msgs = arcpy.GetMessages()
arcpy.AddError(msgs)
# print msgs #UPDATE
print(msgs)

 

tobm111

赞同来自:

测试数据:一个带有高程点和高程等高线数据的CAD文件 .dwg

要回复问题请先登录注册