码迷,mamicode.com
首页 > 其他好文 > 详细

解析ArcGis的标注(一)——先看看分式、假分数式标注是怎样实现的

时间:2018-12-08 23:57:18      阅读:738      评论:0      收藏:0      [点我收藏+]

标签:cgi   lse   strong   百度   ring   .com   arc   通过   字符   

ArcGis的标注表达式支持VBScript、Jscript、Python ,3种脚本语言进行语句解析。一般我们常用的是VB、Python。

普通标注这里不做讲述,先从一个简单的换行标注开始讲起。

两行标注

可以很简单的通过下面的VB语句来实现

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

技术分享图片 

VB的换行符一般用vbnewline,它与vbcrlf是等价的,在ArcGis的字段计算器或者标注表达式中其实还可以用chr(10)、chr(13)、chr(10)+chr(13)来替代。

先了解一下chr函数,它是将ASCII码值返回对应的字符,这篇文章的读者应该会对这个概念比较陌生,有兴趣不妨自己去查一下chr函数与ASCII。

chr(10)—>vblf—>换行;

chr(13)—>vbcr—>回车;

chr(10)+chr(13)—>vbcrlf(vbnewline)—>换行回车

上面vb……的东西是VB语言中的预置常数,其值就是对应的chr函数返回值。

下面几种组合的结果是一样的

[PartCount]  +vbnewline+ [BH]

[PartCount]  +chr(10)+ [BH]

[PartCount]  +vbcr+ [BH]

[PartCount]  +chr(10)+chr(13)+ [BH]

这样的标注只能叫两行标注,它离分式标注还差一条分式横线。

分式标注

这样实现?

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

其实换行两次成了3行,分子与分母距离较远,看起来效果挺差。

技术分享图片

改进方法?有的。

这就要引入ArcGis的标注标签了,使用und(下划线)标签为分子字段加个下划线:

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

标签的使用方式类似HTML、XML等的标签,由上面的表达式可知(不知道就百度去吧)。效果如下图,由于分子太短,分母太长,分式线……

技术分享图片

用一个VBScript函数对分子、分母字符串的长度进行比较,如果分母长,就在分子前后加若干空格(“ ”),然后对“空格+分子+空格”使用下划线标签加下划线:

Function FindLabel ( [分子字段], [分母字段] )

Dim fmLength 分母长度

Dim fzLength 分子长度

Dim strSpace 空格

fmLength = Len([分母字段]) len函数取字符串长度,字段计算器那儿有讲

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

If fmLength > fzLength Then  如果分母比分子长

    strSpace = Space((fmLength - fzLength)/2) (fmLength - fzLength)/2 的最小值是1

End If                                        space函数生成给定位数空格

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

End Function

效果便是这样了:

 技术分享图片

假分数样式

使用下面的VBScript函数实现:

Function FindLabel ( [整数字段] , [分子字段], [分母字段] )

Dim fmLength 分母长度

Dim fzLength 分子长度

Dim zsLength 整数长度

Dim hxLength 分式线长度

fmLength = Len([分母字段]) len函数取字符串长度,字段计算器那儿有讲

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

zsLength = Len([整数字段])

If fmLength > fzLength Then  如果分母比分子长

    hxLength=fmLength

       else 反之

       hxLength=fzLength

End If

下面的"-"或"—"根据英文(数字)或者中文进行调整即可

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

End Function

效果如图:

技术分享图片

其实这个样式是由我们开始便讲到的“3行标注分子式”进化而来的,没错,这个假分数就是3行:

第一行→整数长度的空格+分子;

第二行→整数+分式线(根据分子分母的中英文调整"-"或"—");

第三行→整数长度的空格+分母

解析ArcGis的标注(一)——先看看分式、假分数式标注是怎样实现的

标签:cgi   lse   strong   百度   ring   .com   arc   通过   字符   

原文地址:https://www.cnblogs.com/yzhyingcool/p/10089517.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!