我有三列
更新前
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中做到这一点?
答案 0 :(得分:1)
我能看到的唯一方法是使用Python。
首先,您需要构建一个字典,以了解旧节点值与新节点值之间的关系 - old_node
和new_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脚本搞乱之前备份您的数据;)