|
該“標(biāo)注”系列博文的標(biāo)注引擎使用“標(biāo)準(zhǔn)標(biāo)注引擎(standard label engine)”,這個概念如不知道,可不理會,ArcGis默認標(biāo)注引擎就是它。 ArcGis的標(biāo)注表達式支持VBScript、Jscript、Python ,3種腳本語言進行語句解析。一般我們常用的是VB、Python。 普通標(biāo)注這里不做講述,先從一個簡單的換行標(biāo)注開始講起。
兩行標(biāo)注 可以很簡單的通過下面的VB語句來實現(xiàn) [字段1] +VB換行符+ [字段2]
VB的換行符一般用vbnewline,它與vbcrlf是等價的,在ArcGis的字段計算器或者標(biāo)注表達式中其實還可以用chr(10)、chr(13)、chr(10)+chr(13)來替代。 先了解一下chr函數(shù),它是將ASCII碼值返回對應(yīng)的字符,這篇文章的讀者應(yīng)該會對這個概念比較陌生,有興趣不妨自己去查一下chr函數(shù)與ASCII。
上面vb……的東西是VB語言中的預(yù)置常數(shù),其值就是對應(yīng)的chr函數(shù)返回值。 下面幾種組合的結(jié)果是一樣的
這樣的標(biāo)注只能叫兩行標(biāo)注,它離分式標(biāo)注還差一條分式橫線。
分式標(biāo)注 這樣實現(xiàn)? [PartCount] +vbnewline+"——"+vbcrlf +[BH] 其實換行兩次成了3行,分子與分母距離較遠,看起來效果挺差。
改進方法?有的。 這就要引入ArcGis的標(biāo)注標(biāo)簽了,使用und(下劃線)標(biāo)簽為分子字段加個下劃線: "<und>"+[PartCount]+"</und>"+vbcrlf +[BH] 標(biāo)簽的使用方式類似HTML、XML等的標(biāo)簽,由上面的表達式可知(不知道就百度去吧)。效果如下圖,由于分子太短,分母太長,分式線顯得過于苗條了。
用一個VBScript函數(shù)對分子、分母字符串的長度進行比較,如果分母長,就在分子前后加若干空格(“ ”),然后對“空格+分子+空格”使用下劃線標(biāo)簽加下劃線: Function FindLabel ( [分子字段], [分母字段] ) Dim fmLength '分母長度 Dim fzLength '分子長度 Dim strSpace '空格 fmLength = Len([分母字段]) 'len函數(shù)取字符串長度,字段計算器那兒有講 fzLength = Len([分子字段]) '博客園 yzhyingcool If fmLength > fzLength Then '如果分母比分子長 strSpace = Space((fmLength - fzLength)/2) '(fmLength - fzLength)/2 取得兩端空格的長度 End If 'space函數(shù)生成給定位數(shù)空格 FindLabel = "<und>" + strSpace + [分子字段] + strSpace + "</und>" + vbCrLf + [分母字段] End Function 效果便是這樣了:
到這里應(yīng)該插一個小節(jié)講一下標(biāo)注函數(shù)表達式如何使用
如上圖,首先要確定函數(shù)使用的語言,然后去點擊“Advanced(高級)”,語句塊輸入框里會自動生成一個名為FindLabel 的函數(shù)框架,傳入的參數(shù)是標(biāo)注需要的字段,這個函數(shù)名字不能改! 然后你就有兩種選擇,一種是直接在此基礎(chǔ)上完成函數(shù),另一種是直接刪掉,復(fù)制現(xiàn)成的表達式進來修改傳入的字段參數(shù)。 還有需要提醒的是不建議在ArcMap的標(biāo)注表達式框里寫函數(shù),因為它沒有關(guān)鍵詞提示、代碼高亮、縮進等的功能,不便于代碼編寫,甚至出錯了數(shù)出錯行數(shù)也是個麻煩事情??梢試L試使用Notepad++或者選用語言的IDE,如果使用VBScript可以使用Excel的VBE編輯器。
假分數(shù)樣式 使用下面的VBScript函數(shù)實現(xiàn): Function FindLabel ( [整數(shù)字段] , [分子字段], [分母字段] ) Dim fmLength '分母長度 Dim fzLength '分子長度 Dim zsLength '整數(shù)長度 Dim hxLength '分式線長度 fmLength = Len([分母字段]) 'len函數(shù)取字符串長度,字段計算器那兒有講 fzLength = Len([分子字段]) '博客園 yzhyingcool zsLength = Len([整數(shù)字段]) If fmLength > fzLength Then '如果分母比分子長 hxLength=fmLength else '反之 hxLength=fzLength End If '下面的"-"或"—"根據(jù)英文(數(shù)字)或者中文進行調(diào)整即可 FindLabel = space(zsLength)+[分子字段] +vbcrlf+[整數(shù)字段]+ string(hxLength,"-")+vbcrlf+space(zsLength)+ [分母字段] End Function 效果如圖:
其實這個樣式是由我們開始便講到的“3行標(biāo)注分式”進化而來的,沒錯,這個假分數(shù)就是3行: 第一行→整數(shù)長度的空格+分子; 第二行→整數(shù)+分式線(根據(jù)分子分母的中英文調(diào)整"-"或"—"); 第三行→整數(shù)長度的空格+分母 |
|
|