arcpy.SelectLayerByLocation_management 和 arcpy.SelectLayerByAttribute_management 是 ArcGIS 中两个常用的选择要素的方法。
arcpy.SelectLayerByLocation_management 方法
根据空间关系选择要素,它的语法如下:**
arcpy.SelectLayerByLocation_management (in_layer, {overlap_type}, {select_features}, {search_distance}, {selection_type},{"INVERT"})
- in_layer:要进行选择操作的输入图层。
- overlap_type:选择要素的空间关系类型,例如 “INTERSECT”(相交)、“COMPLETELY_WITHIN”(完全位于)、“WITHIN_A_DISTANCE”(在一定距离内)等。
- select_features:用于选择的参考要素图层。
- search_distance:可选参数,仅在 WITHIN_A_DISTANCE 情况下使用,指定搜索距离。
- selection_type:可选参数,指定选择的方式。常见选项是 “NEW_SELECTION”(新选择)和 “ADD_TO_SELECTION”(添加到选择)。
- “INVERT”:设置选择范围外部的要素
arcpy.SelectLayerByAttribute_management 方法
根据属性表达式选择要素,它的语法如下:**
arcpy.SelectLayerByAttribute_management (in_layer_or_view, {selection_type}, {where_clause})
- in_layer_or_view:要进行选择操作的输入图层或视图。
- selection_type:可选参数,指定选择的方式。常见选项是 “NEW_SELECTION”(新选择)和 “ADD_TO_SELECTION”(添加到选择)。
- where_clause:属性表达式,用于过滤要素进行选择。
通过结合使用这两种方法,可以根据空间关系和属性条件实现更精确的要素选择。在前面的例子中,SelectLayerByLocation_management 方法用于选择位于目标图层内部的要素,然后 SelectLayerByAttribute_management 方法使用 “SWITCH_SELECTION” 选项反选被选择的要素,从而得到位于图层外部的要素。
示例:
#获取雨水篦子,将数据输出
import arcpy
def getBiZi(inputfile,allfile,leftfile,allsave,leftsave,rightsave,roadname):
temporary_layer_name = allsave.replace(".shp","_temporary.shp") #临时存放shp文件
# 使用空间查询对象在源图层上执行空间选择,获取位于目标图层内部的管点
selected_featuresByLocation = arcpy.SelectLayerByLocation_management(inputfile, "COMPLETELY_WITHIN", allfile, "","NEW_SELECTION")
arcpy.CopyFeatures_management(selected_featuresByLocation, temporary_layer_name) #保存临时存放的图层
query_expression = "APPENDAGES LIKE '%XX%' AND SOURCE = 'XXX' AND ROAD_NAME = {}".format(roadname) #语句 # 执行属性选择,
selected_featuresByAttribute = arcpy.SelectLayerByAttribute_management(temporary_layer_name, "NEW_SELECTION", query_expression)
# 导出所选要素到新的 shapefile 文件中
arcpy.CopyFeatures_management(selected_featuresByAttribute,allsave)
print("####保存【ALLsave】成功")
left_selectBylocation = arcpy.SelectLayerByLocation_management(allsave, "COMPLETELY_WITHIN", leftfile, "","NEW_SELECTION")
arcpy.CopyFeatures_management(left_selectBylocation, leftsave)
print("####保存【LEFTsave】成功")
# 反选位于目标图层内部的要素,以获取位于目标图层外部的要素
right_selectBylocation = arcpy.SelectLayerByLocation_management(allsave, "COMPLETELY_WITHIN", leftfile, "","NEW_SELECTION","INVERT") #选择位于外部的
arcpy.CopyFeatures_management(right_selectBylocation, rightsave)
print("####保存【RIGHTsave】成功")
if __name__ == "__main__":
####这里有一些路径的设置
getBiZi(inputfile, allfile, leftfile, allsave, leftsave, rightsave,roadname)
说明:
主要就是将inputfile中的点要素,按照allfile的范围筛选出来,按照对应的字段值【所在道路等】进行进一步的筛选,最后保存在shp格式的数据中。