2017-10-09 131 views
-1

我有三列ArcGIS的折线文件如何更新属性表列

更新之前

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

更新后,我想“节点列”是一样的“网格代码”一栏,所以我在ArcGIS中使用了字段计算器(从node = gridcode)。我的“从节点”一栏已改为gridcode但不知道如何更新“到节点”列(取决于值“从节点”栏)

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

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

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

+0

“从节点”和“到节点”之间的关系是什么?如果不知道,就不可能回答。 – Erica

+0

@Erica此数据适用于从节点(河流起点或上游)到节点(河流正在流失或下游下游)的河流/河流。我根据数字高程地图描绘了我的分水岭,并得到了我的流网络。 – Wisconsin

回答

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(有点像字段计算器,但可以让你做更多,因为你在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脚本混淆在一起;)

相关问题