ArcGIS SelectLayerByLocation管理错误 000368:输入数据无效

0 投票
1 回答
1890 浏览
提问于 2025-04-17 21:57

下午好,

我一直在努力让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这个命令单独拿出来,放在另一行,并给它起个变量名。如果需要的话,还可以把它的格式从文本改成数字格式。

撰写回答