arcmap中添加python脚本_基于Python脚本的ArcMap字段计算器分类赋值
因為出差等等緣由,又沒能很好的堅持記錄博客,今天回來了,繼續記錄所學吧。python
ArcMap中提供了“字段計算器工具”,實際上就是對Sql語句進行了可視化封裝,造成了一個具備計算器外觀的Sql語句編輯器窗口。利用字段計算器工具,咱們能夠直接在AacMap中針對圖層的屬性表進行數據的增刪改查等操做,從而避免了操做圖形的同時切換到Oracle、sqlserver、access等存儲介質中操做屬性表的麻煩。(之前批量處理數據時,采用的就是講數據導進mdb中,而后利用Access打開寫sql語句進行操做的方法,相比于字段計算器來講,麻煩的多)sql
字段計算器工具很方便,可是編輯起來交互不友好,并且python語法對于縮進要求很嚴格,這個編輯器也沒有智能縮進和代碼提示的功能,徹底要求編輯者在相似純記事本的狀態下進行編輯,必定要十分謹慎認真才能執行出想要的結果。下面咱們用具體事例來說解操做過程。編輯器
以下圖所示,函數
咱們有一個圖層,是關于一些兩棲類和爬行類動物的數據,咱們打開屬性表,能夠看到包含主鍵(OBJECTID),動物名稱(NAME),科名稱(FAMILY_NAME),目名稱(ORDER_NAME),數量等級(NUMBER_CLASS),生境(ENVIRONMENT)等字段,其中生境這列字段的值是空的,須要填寫,而這列值得內容和科名稱這一列有相關性關系;通常來講,同一科的動物,其生境相同,好比:“游蛇科”的生境都是“草樹叢”,“石龍子科”的生境都是“石壁、草叢”;這樣咱們就能夠根據不一樣的“科名稱”來對“生境”這一字段進行分類賦值。工具
一、選擇字段,打開字段計算器:sqlserver
首先打開圖層的屬性表,右擊鼠標選中“生境(ENVIRONMENT)”字段,選擇“字段計算器”選項并單擊打開,以下圖所示:測試
二、打開python代碼塊編輯器,編寫賦值函數:spa
咱們須要勾選上圖中的“顯示代碼塊”前的勾選框,這時會顯示出編寫代碼塊的區域,咱們同時要在最上面選擇Python腳本進行解析:咱們在代碼塊區域編寫一個帶返回值的函數,用來基于“科名稱(FAMILY_NAME)”這一字段進行分類,這個函數索性就叫“填充(Fill)”吧,它具備一個形參f,咱們進行分類的條件是科名稱的不一樣,因此編寫以下代碼:server
def Fill(f):blog
if f == u"游蛇科":
return "草樹叢"
elif f == u"石龍子科":
return "石壁、草叢"
而后在下面的填充值區域,也就是 ENVIRONMENT= ?下面的文本框中調用這個函數,只需寫出函數名Fill(),而后將光標移到括號中,在上面的字段列表中雙擊“FAMILY_NAME”這個字段就會顯示出完整的函數,并傳遞實參,不全的內容以下:Fill( !NUMBER_CLASS! ) ?(注意:括號中選擇的字段必定是基于分類的那個字段!)
完整的代碼截圖以下:
這時就獲得了咱們的計算結果,以下圖所示:
咱們還能夠繼續補充代碼,一次性列舉出所有分類條件,而后一次性執行進行所有分類賦值。
如何分類條件是空值,好比咱們要根據“科名稱(FAMILY_NAME)”這一列中的 處的這些值統一對某列字段賦值,要如何編寫代碼呢?通過測試發現,凡是記錄中為的這些地方,其值是None 而不是 Null, 因此賦值條件應該寫成 if f == None:
注意:
一、python語法嚴格依賴縮進,在此代碼邊繼快中,統一用英文狀態兩個字符縮進進行書寫,不然報錯。
二、當分類條件的字段中記錄為中文的地方,須要在中文字符串前面加上U 來進行轉碼,不然會致使不能識別條件從而使要填充的字段計算結果永遠是空值。
三、記錄中為 的地方,若是想用這些地方的值做為分類條件,條件語句要寫成 if f == None:
總結
以上是生活随笔為你收集整理的arcmap中添加python脚本_基于Python脚本的ArcMap字段计算器分类赋值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cvc降噪和主动降噪_小米降噪项圈蓝牙耳
- 下一篇: 韩顺平 php 聪明的小猫代码,聪明的小