Arcpy中Select By Location执行失败(ERROR 000368),求解决方案
解决ArcPy SelectLayerByLocation报错(ERROR 000368)及筛选缓冲外点的方案
错误核心原因
你遇到的ERROR 000368本质问题是:SelectLayerByLocation_management工具要求第一个输入参数是图层对象,而非直接的Shapefile文件路径。直接传入shp路径会被判定为无效输入,导致执行失败。此外,两个数据的坐标系不一致也可能引发同类报错或逻辑失效。
修正后的代码实现
以下是调整后的代码,既解决输入无效问题,也能准确筛选出缓冲外的点:
# 设置工作空间 arcpy.env.workspace = "D:/Model/output_files" # 定义数据源路径 sinistros_shp = "ETRS89_Pontos_Sinistros.shp" buffer_shp = "buffer_freguesiasPorto_200.shp" # 1. 将Shapefile转为图层(必须步骤) arcpy.MakeFeatureLayer_management(sinistros_shp, "sinistros_layer") arcpy.MakeFeatureLayer_management(buffer_shp, "buffer_layer") # 2. 校验坐标系一致性(可选但强烈推荐) sinistros_sr = arcpy.Describe("sinistros_layer").spatialReference buffer_sr = arcpy.Describe("buffer_layer").spatialReference if sinistros_sr.name != buffer_sr.name: raise Exception("两个数据坐标系不一致,请先统一坐标系") # 3. 先选中与缓冲区相交的点,再切换选择得到缓冲外的点 arcpy.SelectLayerByLocation_management("sinistros_layer", "INTERSECT", "buffer_layer") arcpy.SelectLayerByLocation_management("sinistros_layer", "", "", "", "SWITCH_SELECTION") # 示例:将选中的缓冲外点导出为新文件 arcpy.CopyFeatures_management("sinistros_layer", "Fora_do_buffer.shp")
额外排查要点
- 路径验证:确认
D:/Model/output_files目录下确实存在目标shp文件,路径无拼写错误(注意大小写、特殊字符)。 - 文件完整性:在ArcGIS桌面端直接打开shp文件,验证文件未损坏。
- 权限检查:确保脚本拥有读写工作空间目录的权限。
内容的提问来源于stack exchange,提问作者Tomé Cardoso
相关产品推荐
相关产品推荐

