作為近年Esri支持得最好的腳本語(yǔ)言,Python能夠在字段計(jì)算器中解決不少簡(jiǎn)單的屬性問(wèn)題(如編號(hào)、截位等)。ArcPy則是直接能夠進(jìn)行ArcGis二次開(kāi)發(fā)。系統(tǒng)性文章目標(biāo)太大,目前我會(huì)把之前問(wèn)的字段計(jì)算器問(wèn)題以及ArcPy問(wèn)題匯總。 另注:python是對(duì)代碼縮進(jìn)要求很?chē)?yán)格的編程語(yǔ)言。本博客統(tǒng)一采用4個(gè)空格作為縮進(jìn)。 python很少使用分號(hào),逗號(hào)一定使用英文半角。(同學(xué)們請(qǐng)注意) python的基礎(chǔ)函數(shù)中有求數(shù)值的求和、最大、最小值函數(shù),所以我們也可以直接使用的。 舉例:假設(shè)有三個(gè)字段,NumA,NumB,NumC三個(gè)字段都是數(shù)值型的字段,我們需要求三個(gè)字段的最大值,并寫(xiě)入到MaxNum字段中。 只需在表達(dá)式中輸入 max([NumA,NumB,NumC])即可。 最大值函數(shù):max([NumA,NumB,NumC]) 最小值函數(shù):min([NumA,NumB,NumC]) 多字段求和函數(shù):sum([NumA,NumB,NumC]) 最大值使用截圖如下: 舉例1:舉例描述:已有宗地圖層,包含字段“地籍子區(qū)”、“特征碼”、“宗地編碼”按照 宗地統(tǒng)一編碼 規(guī)則給圖層內(nèi)的宗地編碼。 宗地統(tǒng)一編碼規(guī)則:宗地編碼 = '地籍子區(qū)' '特征碼' 5位自然數(shù)流水號(hào)。 原始屬性表截圖: 字段計(jì)算器使用截圖: 處理結(jié)果截圖: 代碼塊如下: dict={} def funZdbm(fldVal,tzm): if fldVal == None: return None if tzm == None: return None temp = 0 key = fldVal tzm if dict.has_key(key) == True: temp = dict[key] strVal = key str(temp 1).zfill(5) dict[key] = temp 1 return strVal else : dict[key] = 1 strVal = key str(temp 1).zfill(5) return strVal 舉例2:描述:有文本型字段流水號(hào),其中有兩行記錄已編號(hào),需要續(xù)編其他記錄,并在前面補(bǔ)零。保證流水號(hào)為6位數(shù) 原始屬性表截圖: 字段計(jì)算器使用截圖: 處理結(jié)果截圖: 代碼塊: max = 504 def funLsh(fldVal): global max fldVal = fldVal.strip() if fldVal == None or fldVal == '': max = max 1 return str(max).zfill(6) else: return fldVal 描述:檢查宗地圖層,將“宗地代碼”字段有重復(fù)記錄的內(nèi)容標(biāo)記出來(lái),并將檢查結(jié)果賦給'檢查結(jié)果'字段。 原始屬性表截圖: 字段計(jì)算器使用截圖: 處理結(jié)果截圖: 代碼塊:(此代碼在數(shù)據(jù)量太大的情況下慎用,估計(jì)會(huì)比較卡,預(yù)計(jì)十萬(wàn)以內(nèi)還是可以承受) dict={} def adjRepeat(fldVal,id): if fldVal == None: return None temp = 0 strVal = '' if dict.has_key(fldVal) == True: temp = dict[fldVal] strVal = '宗地代碼字段和FID為' str(temp) '的圖元重復(fù)' return strVal else : dict[fldVal] = id return '' |
|
來(lái)自: 書(shū)山之客 > 《軟件_ArcGIS》