1 前言
前些日期有人問我ArcMap中要讓某個字段的值實現自增有什么方法?我首先想到到像SQLServer中對於數值型字段可以設置自增。所以我打開ArcCatalog查看我發現只提供默認值,沒辦法只能看一下字段計算器中是否有更好的辦法。開始我的方法是在字段計算器中將要自增的值等於默認的OBJECTID值,但是問題又來了,如果刪除一個對象后,OBJECTID值變亂,又不能實現自增。但是它提供了支持VB腳本和Python腳本,於是參照幫助文檔找到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
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語句,while循環語句,for循環語句,break語句,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 總結
語言是一種工具,你只要精通一門語言,對於編程你會多一份自信。不管使用什么語言你都可以解決問題。使用編程的思想會大大的提高你的工作效率,所以朋友們你至少要學會一門語言,為了更好地工作。