Arcpy中arcpy.management.SelectLayerByAttribute的用法

文章介绍了如何利用Python的arcpy库中的management.SelectLayerByAttribute函数,根据SQL查询语句选择要素图层中的特定条件要素,并展示了如何保存选择结果。示例代码演示了选择人口数量大于等于10000的要素并保存为新要素类的过程。
摘要由CSDN通过智能技术生成

       在根据指定的属性条件从图层中选择要素时,我们需要用到arcpy.management.SelectLayer这个函数。

 函数的用法:

arcpy.management.SelectLayerByAttribute(in_layer_or_view, {selection_type}, {where_clause}, {invert_where_clause})

 函数的各个参数含义如下:

  • in_layer_or_view:要素图层或要素视图。
  • selection_type:选择类型。可选值包括:"NEW_SELECTION"(新建选择)、"ADD_TO_SELECTION"(添加到选择)和"CLEAR_SELECTION"(清除选择)。默认值为"NEW_SELECTION"。
  • where_clause:选择条件语句。例如:"POPULATION >= 10000"。
  • invert_where_clause:是否选择不满足指定条件的要素。 Boolean 类型,True 表示选择不满足条件的要素,False 表示选择满足条件的要素。默认为 False。

注意事项:

  • where_clause 参数指定选择条件,使用的是 SQL 查询语句,需要正确书写查询语句,以选择符合条件的要素。
  • in_layer_or_view 参数必须是要素图层或要素视图,不支持选择数据表。
  • 选择结果会影响到图层数据,可以用 arcpy.management.CopyFeatures() 复制选择结果,以保留原始图层数据。

下面是一个使用 arcpy.management.SelectLayerByAttribute() 工具的示例代码

import arcpy

# 指定要素图层和选择条件
in_layer = r"C:\data\test.gdb\myFeatureClass"
where_clause = "POPULATION >= 10000"

# 选择满足指定条件的要素
arcpy.management.SelectLayerByAttribute(in_layer, "NEW_SELECTION", where_clause)

# 保存选择结果
arcpy.management.CopyFeatures(in_layer, r"C:\data\test.gdb\SelectionResult")

该代码将从要素图层中选择满足人口数量大于等于10000的要素,并将选择结果保存为新的要素类。

import syssys.tracebacklimit = 0import osos.environ['PYTHONUNBUFFERED'] = '1'import arcpy# 获取参数input_features = arcpy.GetParameterAsText(0)join_field = arcpy.GetParameterAsText(1)target_feature = arcpy.GetParameterAsText(2)target_field = arcpy.GetParameterAsText(3)area_threshold = arcpy.GetParameterAsText(4)# 创建空间连接join_result = arcpy.SpatialJoin_analysis(input_features, target_feature, "in_memory/spatial_join", "JOIN_ONE_TO_ONE", "KEEP_ALL", "", "INTERSECT")# 使用MakeFeatureLayer创建要素图层,并使用AddFieldDelimiters处理字段名称join_layer = arcpy.management.MakeFeatureLayer(join_result, "join_layer").getOutput(0)join_field_name = arcpy.AddFieldDelimiters(join_layer, join_field)# 使用SelectLayerByAttribute选择重叠面积大于阈值的要素arcpy.management.SelectLayerByAttribute(join_layer, "NEW_SELECTION", "Shape_Area > " + str(area_threshold))# 使用SummaryStatistics工具进行面积求和summary_table = arcpy.Statistics_analysis(join_layer, "in_memory/summary_table", [[join_field_name, "SUM_Shape_Area"]], [join_field_name])# 使用TableToNumPyArray将结果转换为字典sum_dict = {}with arcpy.da.TableToNumPyArray(summary_table, [join_field, "SUM_Shape_Area"]) as arr: for row in arr: sum_dict[row[0]] = row[1]# 使用UpdateCursor更新目标要素类的目标字段with arcpy.da.UpdateCursor(target_feature, [target_field, join_field], sql_clause=(None, "ORDER BY OBJECTID")) as cursor: for row in cursor: join_value = row[1] if join_value in sum_dict: area_sum = sum_dict[join_value] row[0] = area_sum cursor.updateRow(row)# 导出结果output_feature = arcpy.GetParameterAsText(5)arcpy.CopyFeatures_management(target_feature, output_feature)# 删除游标对象和要素图层对象del cursor, join_layer运行错误Traceback (most recent call last): ExecuteError: 执行失败。参数无效。 WARNING 000725: 输出表: 数据集 in_memory\summary_table 已存在。 ERROR 000800: 该值不是 SUM | MEAN | MIN | MAX | RANGE | STD | COUNT | FIRST | LAST 的成员。 ERROR 000728: 表不存在字段 "数据" 执行(Statistics)失败。请改正代码
05-24
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值