我正在开发一种工具,用于识别功能并使用现有工具对其进行修复。目前,我正努力将我的想法转化为代码。 目的是使用“按位置选择要素”图层中的搜索光标来识别并选择原始数据中的要素并执行其他工具。 截至目前,我的代码看起来像这样(在ArcMap 9.3中):
Junctions_Lyr = "Junctions_Lyr"
gp.MakeFeatureLayer_management(Junctions, Junctions_Lyr, "", "", "")
gp.SelectLayerByLocation_management(Junctions_Lyr, "INTERSECT", Corrupt_Lyr, "", "NEW_SELECTION")
gp.SaveToLayerFile_management(Junctions_Lyr, "Junctions.lyr", Workspace)
rows = gp.SearchCursor(Junctions, "OBJECTID")
curs = gp.SearchCursor(Junctions_Lyr, "OBJECTID")
for row in rows:
if row.OBJECTID = curs.OBJECTID:
# Something to select the feature and run clean up tool.
rows.next()
else:
rows.next()
基本上,如果它们与损坏的图层相交,这将(有希望)选择Junctions Feature类中的特征。然后将选择它们并将其保存到文件中。然后,原始要素类将在其中运行搜索光标,如果对象ID与已保存图层文件中的对象ID匹配,则它将选择该要素并运行清理工具。
我接近这个吗?我认为我无法正确表达这一点,这使得问题难以解决。
答案 0 :(得分:1)
总的来说,这是一个很好的方法。但是我可以看到代码中有一些可能的改进:
row.OBJECTID = curs.OBJECTID
是一项任务,而非比较。使用==
进行比较,而不是=
。SearchCursor
(但只需执行一次)。我的下面的示例假设修复工具一次只能使用一个功能。这里有一些我认为可以满足你需要的代码:
Junctions_Lyr = "Junctions_Lyr"
gp.MakeFeatureLayer_management(Junctions, Junctions_Lyr, "", "", "")
gp.SelectLayerByLocation_management(Junctions_Lyr, "INTERSECT", \
Corrupt_Lyr, "", "NEW_SELECTION")
for row in gp.SearchCursor(Junctions_Lyr):
pt = row.SHAPE.getPart(0)
print("TODO run tool on selected feature " + str(row.OBJECTID) \
+ ", x = " + str(pt.X) + ", y = " + str(pt.Y))