ArcGIS SelectLayerByLocation管理错误 000368:输入数据无效
下午好,
我一直在努力让arcpy.SelectLayerByLocation_management这个功能正常工作,但找不到解决办法——我正在使用ArcMap/Catalog 10.2。
我有一个很大的折线数据集,想要通过几个不同的多边形图层文件来进行拆分。我的想法是,脚本会依次处理这些图层文件,选择那些在X米范围内的折线部分,并把它们导出到一个单独的文件夹里。以下是我的代码:
arcpy.AddMessage("\n Checking Script for Errors...")
#Script to split one layer (OSMM/OSVML) into parts, parts defined by another layer.
import arcpy
import os
#References users Map document - get parameter input from prompt
mxd = arcpy.mapping.MapDocument(arcpy.GetParameterAsText(0))
df = arcpy.mapping.ListDataFrames(mxd, "Frame")[0]
arcpy.env.workspace = arcpy.GetParameterAsText(1)
#For loop to iterate through all layers in dataframe
for lyr in arcpy.mapping.ListLayers(mxd,"",df):
#Get layer name
layerName = lyr.name
#Skip the OS File
if layerName == "OSMM_Line_Detail":
arcpy.AddMessage("\n Skipping " + layerName)
else:
#Inform users of layer being processed
arcpy.AddMessage("\n Processing: " + layerName)
#Select the wanted layer that is within a distance of the current layer
arcpy.AddMessage("\n Select by location")
arcpy.SelectLayerByLocation_management('OSMM_Line_Detail',"WITHIN_A_DISTANCE",layerName,arcpy.GetParameterAsText(3),"NEW_SELECTION")
#Create directory for file (http://desk.stinkpot.org:8080/tricks/index.php/2006/07/create-a-directory-in-python/)
dirname = ("C:\Users\USERNAME\Documents\Test Data\Basemapping and Boundary Data\Split line by area\Line " + layerName)
if not os.path.isdir(dirname + "/"):
arcpy.AddMessage("\n Directory not found, creating directoy for: " + layerName)
os.mkdir(dirname + "/")
#Exports the selection of layer to new directory
arcpy.FeatureClassToShapefile_conversion(arcpy.GetParameterAsText(2), ""C:\Users\USERNAME\Documents\Test Data\Basemapping and Boundary Data\Split line by area\Line " + layerName)
arcpy.AddMessage("\n Completed split for " + layerName)
arcpy.AddMessage("\n Script complete")
#delete variables created
del lyr
del df
del mxd
#script ends
目前我遇到的错误代码是:
Traceback (most recent call last):
File "C:\Users\Richard.Lauberts\Documents\LIS Data\Toolbox and Scripts\Python Script for Splitting MasterMap by Site.py", line 26, in <module>
arcpy.SelectLayerByLocation_management('OSMM_Line_Detail',"WITHIN_A_DISTANCE",layerName,'110 Meters',"NEW_SELECTION")
File "c:\program files (x86)\arcgis\desktop10.2\arcpy\arcpy\management.py", line 6618, in SelectLayerByLocation
raise e
ExecuteError: Failed to execute. Parameters are not valid.
ERROR 000368: Invalid input data.
Failed to execute (SelectLayerByLocation).
我已经把文件导出到一个地理数据库中,并重新设置了图层的来源。我还尝试过使用arcpy.MakeFeatureLayer_management,正如其他帖子中建议的那样,甚至尝试直接写文件名,而不是用GetParameterAsText,但似乎都没有帮助!
在代码中输入距离值时,我尝试过“110”、“110 Meters”、“110 Metres”,也试过让它作为getparameters(在arc工具箱界面中设置为线性值,让用户选择长度和单位)。
任何建议都将非常感谢。
1 个回答
0
这本来不应该是个问题,但有时候arcpy这个小家伙处理嵌套命令时会有点儿吃力。你可以试着把GetParameterAsText这个命令单独拿出来,放在另一行,并给它起个变量名。如果需要的话,还可以把它的格式从文本改成数字格式。