繁体   English   中英

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

[英]ArcGIS polyline file How to update column in attribute table

我有三列

更新前

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

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

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

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

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

我能看到的唯一方法是使用 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 脚本之前先备份您的数据;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM