【问题标题】:Search and Select in ArcPy with Cursors使用光标在 ArcPy 中搜索和选择
【发布时间】:2015-09-02 20:48:01
【问题描述】:

我正在开发一种工具,该工具可以识别功能并使用现有工具对其进行修复。然而,目前我正在努力将我的想法变成代码。 目的是使用“按位置选择要素”图层中的搜索光标来识别并选择原始数据中的要素并执行另一个工具。 截至目前,我的代码看起来像这样(在 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()

本质上,如果它们与损坏的图层相交,这将(希望)选择交汇点要素类中的要素。然后它们将被选中并保存到文件中。然后原始要素类将在其中运行一个搜索光标,如果对象 ID 与已保存图层文件中的一个匹配,它将选择该要素并运行清理工具。

我的处理方法正确吗?我认为我无法正确表达这一点使问题更难以解决。

【问题讨论】:

  • 鉴于您所使用的数据和软件的地理特性,您可能会在这里gis.stackexchange.comgeonet.esri.com 获得更多运气。
  • 感谢您的建议!我也会确保在那里发帖。

标签: python gis arcgis python-2.5 arcpy


【解决方案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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 2019-11-13
    • 1970-01-01
    相关资源
    最近更新 更多