實(shí)際工作中,經(jīng)常會(huì)有對(duì)各類圖斑進(jìn)行編號(hào)的需求。數(shù)據(jù)中圖斑數(shù)比較少時(shí),我們可以手動(dòng)進(jìn)行編號(hào),但數(shù)據(jù)量較大時(shí)就必須得想辦法自動(dòng)實(shí)現(xiàn)圖斑編號(hào)。今天,將分享幾種常見(jiàn)的圖斑自動(dòng)編號(hào)方式,主要包括:圖斑順序編號(hào)、按字段屬性分類編號(hào)、按圖斑四至位置編號(hào)、分級(jí)編號(hào)、指定位數(shù)編號(hào)、加前綴編號(hào)等多種編號(hào)方法。
由于將要介紹的方法大多數(shù)都用到ArcGIS屬性表中的【字段計(jì)算器】,因此先對(duì)【字段計(jì)算器】做一簡(jiǎn)單介紹。
一、字段計(jì)算器介紹
在左側(cè)菜單欄任一要素類或者表上右擊【打開(kāi)屬性表】,再找到要計(jì)算的字段上右擊【字段計(jì)算器】,即可打開(kāi)字段計(jì)算器。
打開(kāi)【字段計(jì)算器】后頁(yè)面如下圖所示:
1是選擇腳本語(yǔ)言,默認(rèn)是VB語(yǔ)言,可以改成Python語(yǔ)言;2是要素字段名,雙擊會(huì)在3和4的代碼里顯示;3是代碼框,勾選【顯示代碼塊】就會(huì)出現(xiàn),用于編寫(xiě)多行的簡(jiǎn)單腳本。4主代碼框,用于簡(jiǎn)單的代碼或字段運(yùn)算。右邊是常用函數(shù),雙擊即可使用,可用于字段屬性字符串切片[:]、大小寫(xiě)轉(zhuǎn)換.isupper()、字符串補(bǔ)齊.zfill()等。
二、圖斑編號(hào)
1.按圖斑順序編號(hào)
最簡(jiǎn)單的編號(hào)就是按圖斑順序依次編號(hào),一種是可以借助現(xiàn)有的編號(hào)字段,比如FID進(jìn)行字段運(yùn)算獲得編號(hào),另外一種便是通過(guò)編寫(xiě)簡(jiǎn)單代碼的方式進(jìn)行編號(hào)。先看第一種,我們添加一個(gè)BH字段,然后打開(kāi)字段計(jì)算器,切換到Python語(yǔ)言,然后雙擊FID字段再加1(FID編號(hào)從0開(kāi)始)。
計(jì)算完成后,BH字段里面就有了編號(hào)。
? ? ? 接下來(lái),我們通過(guò)編寫(xiě)簡(jiǎn)易代碼的方式來(lái)實(shí)現(xiàn)編號(hào)。同樣打開(kāi)字段計(jì)算器,切換到Python語(yǔ)言,顯示代碼塊,在里面編寫(xiě)編號(hào)函數(shù),然后在下面進(jìn)行函數(shù)調(diào)用,同樣可以實(shí)現(xiàn)上面的效果。
完整編號(hào)函數(shù)代碼如下,在字段計(jì)算器代碼塊里面輸入時(shí)要注意空格,否則容易報(bào)錯(cuò)。溫馨提示:可以通過(guò)點(diǎn)擊【保存】按鈕將當(dāng)前函數(shù)保存成.cal的函數(shù)文件,下次使用時(shí)點(diǎn)擊【加載】按鈕便可直接調(diào)用。
1 rec=0
2 def?autoIncrement():
3??global?rec
4??pStart?=?1?
5??pInterval?=?1?
6??if?(rec?==?0):?
7????rec?=?pStart?
8??else:?
9????rec?=?rec?+?pInterval
10??return?re
這樣我們便實(shí)現(xiàn)了簡(jiǎn)單的順序編號(hào),但有時(shí)候我們需要編號(hào)數(shù)字位數(shù)保持一致,例如:0001、0299這樣都是四位數(shù)。這就需要用到Python字符串函數(shù).zfill(n)。函數(shù)功能:返回長(zhǎng)度為n的字符串,原字符串右對(duì)齊,前面填充0。
下面,我們以生成5位數(shù)編號(hào)舉例。在BH字段名稱上右擊打開(kāi)字段計(jì)算器,切換到Python語(yǔ)言,先選擇并雙擊BH字段,再選擇并雙擊.zfill()函數(shù),輸入函數(shù)參數(shù)5,就形成!BH!.zfill(5)代碼,表示BH字段字符串向左保留為5位。
點(diǎn)擊確定,計(jì)算完成后生成的結(jié)果如下:
同樣的,如果需要在編號(hào)前面再加其他字母等信息,直接在編號(hào)前面添加即可。比如5位編號(hào)前面加“SM”,為“SM00001”,代碼為:"SM"+ !BH!,要注意為英文雙引號(hào)。另外,也可以通過(guò)修改上面編號(hào)函數(shù)代碼的方式實(shí)現(xiàn)。
2按字段類型編號(hào)
有時(shí)候,我們?cè)诰幪?hào)時(shí)需要按照?qǐng)D層中某一字段屬性類型對(duì)要素進(jìn)行編號(hào)。比如在衛(wèi)片圖斑中,我們需要按鄉(xiāng)鎮(zhèn)對(duì)圖斑進(jìn)行編號(hào),每個(gè)鄉(xiāng)鎮(zhèn)都從0開(kāi)始編號(hào)。同樣可以在字段計(jì)算器中采取Python腳本的方式進(jìn)行實(shí)現(xiàn)。我們定義一個(gè)isDuplicateIndex(inValue)函數(shù),然后調(diào)用即可,同時(shí)讓編號(hào)按3位數(shù)對(duì)齊。
完整Python代碼:
UniqueDict?=?{}
def?isDuplicateIndex(inValue):
????UniqueDict.setdefault(inValue,0)
????UniqueDict[inValue]?+=?1
????return?UniqueDict[inValue]
計(jì)算后結(jié)果如下:
3按圖斑四至編號(hào)
有時(shí)候,為了工作方便我們需要按照?qǐng)D斑四至位置,按照從左到右、從上到下的順序給圖斑進(jìn)行編號(hào)。按照四至位置編號(hào),首先需要按照上述排序方式對(duì)圖斑進(jìn)行重新排序,然后依次編號(hào)即可。
首先,需要給大家簡(jiǎn)單介紹一下幾個(gè)字段計(jì)算器中常用的Python語(yǔ)法:
!shape.area!:圖斑要素面積;
!shape.length!:圖斑要素周長(zhǎng)。
!shape.extent.Xmin!:圖斑要素最小外包矩形的左上角X坐標(biāo);
!shape.extent.XMax!:圖斑要素最小外包矩形的右下角X坐標(biāo);
!shape.extent.Ymax!:圖斑要素最小外包矩形的左上角Y坐標(biāo);
!shape.extent.YMin!:圖斑要素最小外包矩形的右下角Y坐標(biāo);
具體操作步驟如下:
第一步:給圖層添加X(jué)min和Ymax兩個(gè)字段。字段添加后,在字段計(jì)算器中基于Python語(yǔ)法:!shape.extent.Xmin!和!shape.extent.Ymax!分別計(jì)算出Xmin和Ymax坐標(biāo)。
第二步:在【數(shù)據(jù)管理】模塊下的【常規(guī)】工具集中找到【排序】工具進(jìn)行圖斑排序。
排序規(guī)則:從上到下排序意思就是沿縱軸從上到下排序,所以排序字段Ymax在前面降序排列,從左到右排序意思就是沿橫軸從左到右排序,所以排序字段Xmin在后面升序排列,從而保證數(shù)據(jù)按從上到下,從左到右的順序排列。
第三步:排序后會(huì)生成一個(gè)新的要素圖層,給新圖層添加編號(hào)字段,然后運(yùn)用上面順序編號(hào)的代碼給圖斑依次編號(hào)就可了。
計(jì)算完成后我們要的四至編號(hào)就成功實(shí)現(xiàn)了,如下圖所示:
需要說(shuō)明的是,這塊沒(méi)有使用質(zhì)心坐標(biāo)是因?yàn)閳D斑形狀很長(zhǎng)或很寬時(shí),會(huì)因?yàn)橘|(zhì)心的位置導(dǎo)致排序位置偏后。為了避免這種情況,采取Xmin和Ymax進(jìn)行排序。
4圖斑分級(jí)別號(hào)
實(shí)際工作中,有時(shí)候需要根據(jù)某字段屬性值大小劃分不同的等級(jí)進(jìn)行編號(hào)或賦值,所謂圖斑分級(jí)編號(hào)。比如:按照?qǐng)D斑面積劃分不同的等級(jí),相同等級(jí)的圖斑賦相同的編號(hào)或其他屬性值。
我們以面積大小為例,采取自定義Python函數(shù)的方式演示一下如何進(jìn)行分級(jí)編號(hào)。自定義編號(hào)函數(shù):按照要素面積大小,將面積小于2000平方米的圖斑編號(hào)為1,大于2000小于3000平方米的為2,以此類推。
完整的函數(shù)代碼如下:
def bianhao(value):
bh = ""
if value <= 2000:
bh = 1
elif 2000 < value <= 3000:
bh = 2
elif 3000 < value <= 4000:
bh = 3
elif 4000 < value <= 5000:
bh = 4
else:
bh = 5
return str(bh).zfill(3)
函數(shù)調(diào)用字段為面積字段,計(jì)算后結(jié)果如下,圖斑已經(jīng)按照面積大小進(jìn)行了編號(hào)。
另外,有種笨辦法不用寫(xiě)代碼也能實(shí)現(xiàn)分級(jí)編號(hào)。還是以面積為例:首先對(duì)面積進(jìn)行升序或降序排序,然后手動(dòng)選中面積小于2000平方米的所有圖斑,再手動(dòng)將編號(hào)賦值為1,以此類推。當(dāng)然,數(shù)據(jù)量大時(shí)就不太方便了。
以上。如有問(wèn)題,歡迎關(guān)注我的G*Z*H:爬蟲(chóng)與地理信息。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-676214.html
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-676214.html
到了這里,關(guān)于ArcGIS|一文徹底搞懂GIS圖斑編號(hào)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!