ArcGIS 字段計算器 Python 坑


最近要處理個簡單數據,一個字段中為文本類型,包含各種描述。要求是包含平方米的數值提取出來,變成數值,如果包含多個,則把各個值累加起來。

比如 字段值為 “非法占用100平方米” 處理后結果為 100

字段值為 “工棚3間” 處理結果為0

字段值為 “工棚3間,瓦屋2間,非法占用100平方米” 處理結果100

字段值為 “工棚100平方米,瓦屋100平方米” 處理結果為200

 

由於一直寫.net,上述功能在.net中做起來並不麻煩。但是覺得應該是字段計算器寫寫就解決的問題,懶得在用.net搭。就嘗試了一下ArcGIS中的Python字段計算器

四五年前學過一點python,雖然現在啥都不記得了

搜索了一些arcgis字段計算器的資料,大體瞄了一眼代碼,就開始寫。amazing Python

(1)python是用代碼縮進表示C#中{}啊,字段計算器中的編輯頁面就是個txt,啥功能也沒有啊,自己一邊寫邏輯,一邊改縮進。而且網上復制粘貼的代碼,很容易縮進就亂掉了

(2)python中,定義函數名之后有個 “:”, if條件之后也有個 “:”,而且ArcMap的字段計算器不能調試

(3)神奇的 unicode decode error: 'ascii' codesc can't decode 0xe5 in position 異常,檢索了半天資料,后來發現,是編碼的問題。不知道什么原因,按錯誤描述,應該是ArcMap字段計算器讀取的值是 ascii,而我要判斷的值是 中文,就出了這個 錯誤,可我字段中的值明明是中文啊。該錯誤對新手很不友好啊

 

雖然上述功能沒有完全實現,也不想實現了,下面記錄一下這段神奇的代碼

def fuxkPython(ss):
 flag="平方米"
 result=-1
 tp=ss.encode('utf-8');
 # tp =ss
 id=tp.find(flag)

 if(id>=0):
   jq=tp[0:id]
   if jq.isdigit():
     result= float(jq)

 return result

  

amazing

 


免責聲明!

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



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