2017-10-09 130 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腳本混淆在一起;)

相關問題