- 字段計算器簡介
在數據整理過程中經常要用到對屬性表的處理,即為字段進行賦值或運算。字段計算器(Field Calculator)是一個強大的處理字段值的工具,不僅可以實現快速批量賦值,還支持Python和VBScript,可以通過代碼進行復雜條件的賦值工作,並且字段計算器還可以在Model Builder中調用,構建空間模型。
在某個屬性字段的右鍵菜單中即可調出字段計算器,在該界面中即可對該字段進行統一批量賦值,如果勾選Show Codeblock可以編寫代碼實現條件賦值、復雜計算或是幾何體的計算。下面我們就以國土行業的圖斑數據整理為例,看看靈活而強大字段計算器是如何應用的。
2. 應用實例
已有的圖斑數據的屬性表如下,兩個字段分別代表二級地類的編碼(DLBM)和名稱(DLMC)。
- 截取拼接字符串
問題描述:從已有的DLBM(二級地類編碼)中提取一級地類的編碼,由於前兩位即是一級地類編碼,我們可以通過字符串的截取來實現
解決方法:創建字段YJDL,在字段計算器內選擇Python,輸入!DLBM![0:2]
注:Python中對字符串的處理非常簡單,直接通過下標位置的索引來提取,拼接字符串則可使用加號來連接字段即可。
- 條件賦值
問題描述:根據一級地類的代碼為其增加具體描述信息
解決方法:創建字段YJDLMC(一級地類名稱),勾選Show Codeblock,根據YJDL的代碼為其賦值,在YJDLMC=下面輸入CalDLMC(!YJDL!),在上面的Pre-Logic Script Code空白處輸入代碼如下:
def CalDLMC(code):
if(code==’01’):
return “耕地”
elif(code==’02’):
return “園地”
else:
return “”
- 為重復記錄進行編號
問題描述:將同一地類圖斑自動編號(標記重復記錄),例如根據DLBM字段,把具有相同值的記錄標出來,並且按照從小到大的排序自動增加一個編號,實現如下效果:
解決方法:增加DLCOUNT字段,計算每種用地類型有多少塊,即同類型的DLBM按順序從1開始賦值,勾選Show Codeblock,編寫代碼:
UniqueDict = {}
def isDuplicateIndex(inValue):
UniqueDict.setdefault(inValue,0)
UniqueDict[inValue] += 1
return str(UniqueDict[inValue])
- 計算幾何體信息
計算圖斑面積:!Shape.Area!
質心X坐標:!Shape.CENTROID.X!
質心Y坐標:!Shape.CENTROID.Y!
- 字段間運算
在上一步計算得到的面積基礎上進行單位轉換,如將平方米轉換為平方公里
!Area! /1000000
- 順序賦值,即為每條記錄進行唯一值編號