ArcMap屬性字段自增引出字段計算器使用python的技巧


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
View Code

 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 總結

語言是一種工具,你只要精通一門語言,對於編程你會多一份自信。不管使用什么語言你都可以解決問題。使用編程的思想會大大的提高你的工作效率,所以朋友們你至少要學會一門語言,為了更好地工作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM