小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

解析ArcGis的標(biāo)注(一)

 唯依L 2019-02-18

該“標(biāo)注”系列博文的標(biāo)注引擎使用“標(biāo)準(zhǔn)標(biāo)注引擎(standard label engine)”,這個(gè)概念如不知道,可不理會(huì),ArcGis默認(rèn)標(biāo)注引擎就是它。

ArcGis的標(biāo)注表達(dá)式支持VBScript、Jscript、Python ,3種腳本語言進(jìn)行語句解析。一般我們常用的是VB、Python。

普通標(biāo)注這里不做講述,先從一個(gè)簡(jiǎn)單的換行標(biāo)注開始講起。

 


 

兩行標(biāo)注

可以很簡(jiǎn)單的通過下面的VB語句來實(shí)現(xiàn)

[字段1] +VB換行符+ [字段2]

 

VB的換行符一般用vbnewline,它與vbcrlf是等價(jià)的,在ArcGis的字段計(jì)算器或者標(biāo)注表達(dá)式中其實(shí)還可以用chr(10)、chr(13)、chr(10)+chr(13)來替代。

先了解一下chr函數(shù),它是將ASCII碼值返回對(duì)應(yīng)的字符,這篇文章的讀者應(yīng)該會(huì)對(duì)這個(gè)概念比較陌生,有興趣不妨自己去查一下chr函數(shù)與ASCII。

1
2
3
4
5
chr(10)—>vblf—>換行;
chr(13)—>vbcr—>回車;
chr(10)+chr(13)—>vbcrlf(vbnewline)—>換行回車

上面vb……的東西是VB語言中的預(yù)置常數(shù),其值就是對(duì)應(yīng)的chr函數(shù)返回值。

下面幾種組合的結(jié)果是一樣的

1
2
3
4
5
6
7
[PartCount]  +vbnewline+ [BH]
[PartCount]  +chr(10)+ [BH]
[PartCount]  +vbcr+ [BH]
[PartCount]  +chr(10)+chr(13)+ [BH]

這樣的標(biāo)注只能叫兩行標(biāo)注,它離分式標(biāo)注還差一條分式橫線。

 


 

分式標(biāo)注

這樣實(shí)現(xiàn)?

[PartCount]  +vbnewline+"——"+vbcrlf +[BH]

其實(shí)換行兩次成了3行,分子與分母距離較遠(yuǎn),看起來效果挺差。

改進(jìn)方法?有的。

這就要引入ArcGis的標(biāo)注標(biāo)簽了,使用und(下劃線)標(biāo)簽為分子字段加個(gè)下劃線:

"<und>"+[PartCount]+"</und>"+vbcrlf +[BH]

標(biāo)簽的使用方式類似HTML、XML等的標(biāo)簽,由上面的表達(dá)式可知(不知道就百度去吧)。效果如下圖,由于分子太短,分母太長(zhǎng),分式線顯得過于苗條了。

用一個(gè)VBScript函數(shù)對(duì)分子、分母字符串的長(zhǎng)度進(jìn)行比較,如果分母長(zhǎng),就在分子前后加若干空格(“ ”),然后對(duì)“空格+分子+空格”使用下劃線標(biāo)簽加下劃線:

復(fù)制代碼
Function FindLabel ( [分子字段], [分母字段] )

Dim fmLength '分母長(zhǎng)度

Dim fzLength '分子長(zhǎng)度

Dim strSpace '空格

fmLength = Len([分母字段]) 'len函數(shù)取字符串長(zhǎng)度,字段計(jì)算器那兒有講

fzLength = Len([分子字段]) '博客園 yzhyingcool

If fmLength > fzLength Then  '如果分母比分子長(zhǎng)

    strSpace = Space((fmLength - fzLength)/2) '(fmLength - fzLength)/2 取得兩端空格的長(zhǎng)度

End If                                        'space函數(shù)生成給定位數(shù)空格

FindLabel = "<und>" + strSpace + [分子字段] + strSpace + "</und>" + vbCrLf + [分母字段]

End Function
復(fù)制代碼

效果便是這樣了:

 

 


 

到這里應(yīng)該插一個(gè)小節(jié)講一下標(biāo)注函數(shù)表達(dá)式如何使用

 

如上圖,首先要確定函數(shù)使用的語言,然后去點(diǎn)擊“Advanced(高級(jí))”,語句塊輸入框里會(huì)自動(dòng)生成一個(gè)名為FindLabel  的函數(shù)框架,傳入的參數(shù)是標(biāo)注需要的字段,這個(gè)函數(shù)名字不能改!

然后你就有兩種選擇,一種是直接在此基礎(chǔ)上完成函數(shù),另一種是直接刪掉,復(fù)制現(xiàn)成的表達(dá)式進(jìn)來修改傳入的字段參數(shù)。 

還有需要提醒的是不建議在ArcMap的標(biāo)注表達(dá)式框里寫函數(shù),因?yàn)樗鼪]有關(guān)鍵詞提示、代碼高亮、縮進(jìn)等的功能,不便于代碼編寫,甚至出錯(cuò)了數(shù)出錯(cuò)行數(shù)也是個(gè)麻煩事情??梢試L試使用Notepad++或者選用語言的IDE,如果使用VBScript可以使用Excel的VBE編輯器。

 


 

假分?jǐn)?shù)樣式

使用下面的VBScript函數(shù)實(shí)現(xiàn):

復(fù)制代碼
Function FindLabel ( [整數(shù)字段] , [分子字段], [分母字段] )

Dim fmLength '分母長(zhǎng)度

Dim fzLength '分子長(zhǎng)度

Dim zsLength '整數(shù)長(zhǎng)度

Dim hxLength '分式線長(zhǎng)度

fmLength = Len([分母字段]) 'len函數(shù)取字符串長(zhǎng)度,字段計(jì)算器那兒有講

fzLength = Len([分子字段]) '博客園 yzhyingcool

zsLength = Len([整數(shù)字段])

If fmLength > fzLength Then  '如果分母比分子長(zhǎng)

    hxLength=fmLength

       else '反之

       hxLength=fzLength

End If

'下面的"-"或"—"根據(jù)英文(數(shù)字)或者中文進(jìn)行調(diào)整即可

FindLabel = space(zsLength)+[分子字段] +vbcrlf+[整數(shù)字段]+ string(hxLength,"-")+vbcrlf+space(zsLength)+ [分母字段]

End Function
復(fù)制代碼

效果如圖:

其實(shí)這個(gè)樣式是由我們開始便講到的“3行標(biāo)注分式”進(jìn)化而來的,沒錯(cuò),這個(gè)假分?jǐn)?shù)就是3行:

第一行→整數(shù)長(zhǎng)度的空格+分子;

第二行→整數(shù)+分式線(根據(jù)分子分母的中英文調(diào)整"-"或"—");

第三行→整數(shù)長(zhǎng)度的空格+分母

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多