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


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 幫助庫


免責聲明!

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



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