0

下午好,

我一直在用头撞墙,试图让 arcpy.SelectLayerByLocation_managerment 工作并且找不到解决方案 - 我正在使用 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,尝试硬编码文件名而不是使用 GetParameterAsTest,但似乎没有任何帮助!

对于代码中距离值的输入,我尝试了“110”、“110 米”、“110 米”并将其保留为 getparameters(在 arc 工具箱界面中设置为允许用户选择长度的线性值和单位)。

任何建议将不胜感激。

4

1 回答 1

0

这应该不是问题,但有时 arcpy 的小大脑并不能完全处理嵌套命令。尝试将 GetParameterAsText 从参数中取出 - 将其设为带有变量名称的单独行,并在需要时将其从文本更改为数字格式。

于 2014-03-12T16:24:17.530 回答