1.前言
前些日子有人問我ArcMap中要讓某個字段的值實現自增有什么方法?我首先想到像SQL Server中對於數值型字段可以設置自增。所以我打開ArcCatalog查看發現只提供默認值,沒辦法只能看一下字段計算器中是否有更好的方法。開始我的方法是在字段計算器中將要自增的值等於默認的OBJECTID值,但是問題又來啦,如果刪除一個對象后OBJECTID值變亂,又不能實現自增。本人學習的主要語言是c#,對於字段計算器所支持的VB腳本和Python不了解,對於c#來說寫一個for循環很容易實現自增。最后參照幫助文檔找到了Python的實現方法,下面分享給大家。
2.幫助文檔解析
打開計算字段示例文檔找到(累加計算和順序計算)
首先分析幫助文檔提供的代碼(注意:紅色部分為注釋)
Parser:
Python #程序語言
Expression:
autoIncrement() #表達式方法
Code Block: #下面這部分是具體實現,注意在放字段計算器時只需要下面這部分
rec=0
def autoIncrement(): #定義方法名
global rec
pStart = 1 #初始值, 可以調整
pInterval = 1 #自增間隔, 可以調整
if (rec == 0):
rec = pStart
else:
rec = rec + pInterval
return rec
下面是如何在字段計算器中使用
目的實現ghg的字段的自增
打開字段計算器進行設置如下
注意:Python 將強制要求縮進作為語法的一部分。請使用兩個或四個空格來定義每個邏輯級別。將語句塊的開頭和結尾對齊並且保持一致。
查看結果實現自增
3.提升
其實使用Python十分的方便,如果沒有Python要實現自增對於一個大項目來說很耗人力的。說到這里上面的那種方法中自定義函數沒有輸入參數,如果我們需要輸入參數該怎么寫呢。查看幫助文檔有一個計算數值型字段的累加值的例子我們分析一下。
Parser:
Python
Expression:
accumulate(!FieldA!) #該函數需要輸入字段做參數
Code Block: #下面這部分是具體實現,注意在放字段計算器時只需要下面這部分
total = 0
def accumulate(increment):
global total
if total:
total += increment
else:
total = increment
return total
目的實現OBJECTID累加值賦值給ghg的字段
注意:Python 計算表達式字段將使用驚嘆號 (!!) 括起。
結果:
4.Python該怎么使用
對於有有編程經驗的人來說入門簡單的Python語法很容易,他和java,c#等語言基礎語法很像,
例如控制流,if 語句 2. while語句 3. for 循環 for..in 4. break語句 5. continue語句 幾乎主流語言都有。
在ArcMap中也可以使用其他Python的庫,例如random函數,可以實現隨機值。
例如:通過 numpy 站點包來計算 0.0 和 1.0 之間的隨機浮點值。
Parser:
Python
Expression:
getRandomValue()
Code Block:
import numpy.random as R
def getRandomValue():
return R.random()
5.總結
語言是一種工具,你只要你精通一門語言,對於編程你會多一份自信。不管使用什么語言你都可以解決問題。使用編程的思想會大大的提高你的工作效率,所以朋友們你至少要學會一門語言,為了更好地工作。
參考資料:ArcGIS10.2 幫助庫