ArcGIS折线文件如何更新属性表中的列

时间:2017-10-09 03:59:52

标签: python python-2.7 arcgis arcpy

我有三列

更新前

from node    to node    gridcode   
2            3          8
3            2          9
7            2          5

更新后,我希望“节点列”与“网格代码”列相同,因此我在ArcGIS中使用了字段计算器(来自node = gridcode)。我的“from node”列已更改为gridcode,但不确定如何更新“to node”列(取决于“from node”列中的值)

以下是我想要的最终结果:

from node    to node    gridcode
8            9          8
9            8          9
5            8          5

到目前为止,我已尝试过“加入”,“空间连接”,但我没有得到所需的结果。我怎么能在Python或ArcGIS中做到这一点?

1 个答案:

答案 0 :(得分:1)

我能看到的唯一方法是使用Python。

首先,您需要构建一个字典,以了解旧节点值与新节点值之间的关系 - old_nodenew_node。这可以通过SearchCursor完成,匹配节点"" (old_node)到网格代码(new_node)。

# instantiate empty dictionary
node_values = {}
# build dictionary of values
with arcpy.da.SearchCursor(feature_class, ["fromnode", "gridcode"]) as cursor:
    for row in cursor:
        old_node = row[0]
        new_node= row[1]
        node_values[old_node] = new_node

然后,您需要更新所有值。这需要一个UpdateCursor(有点像Field Calculator,但是由于你在Python中工作,你可以做更多的事情。)

with arcpy.da.UpdateCursor(feature_class, ["fromnode", "tonode", "gridcode"]) as cursor:
    for row in cursor:
        # set fromnode to gridcode value
        row[0] = row[2]
        # set tonode to new equivalent node
        to_node = row[1]
        new_to_node = node_values[to_node]
        row[1] = new_to_node
        cursor.updateRow(row)

请注意,此代码有很多方法可以“收紧”,“改进”和“缩短”,并且在这些代码段之前需要分配变量(例如feature_class)会正常工作。与往常一样,我建议在使用其他人的Python脚本搞乱之前备份您的数据;)