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

技术文章3年前 (2021-06-18)2968

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。

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

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

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

1
2
3
4
5
6
7
[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([分子字段]) '博客园 yzhyingcoolIf fmLength > fzLength Then  '如果分母比分子长
    strSpace = Space((fmLength - fzLength)/2) '(fmLength - fzLength)/2 取得两端空格的长度End If                                        'space函数生成给定位数空格FindLabel = "<und>" + strSpace + [分子字段] + strSpace + "</und>" + vbCrLf + [分母字段]End Function
复制代码

效果便是这样了:

 

 


 

到这里应该插一个小节讲一下标注函数表达式如何使用

 

如上图,首先要确定函数使用的语言,然后去点击“Advanced(高级)”,语句块输入框里会自动生成一个名为FindLabel  的函数框架,传入的参数是标注需要的字段,这个函数名字不能改!

然后你就有两种选择,一种是直接在此基础上完成函数,另一种是直接删掉,复制现成的表达式进来修改传入的字段参数。 

还有需要提醒的是不建议在ArcMap的标注表达式框里写函数,因为它没有关键词提示、代码高亮、缩进等的功能,不便于代码编写,甚至出错了数出错行数也是个麻烦事情。可以尝试使用Notepad++或者选用语言的IDE,如果使用VBScript可以使用Excel的VBE编辑器。

 


 

假分数样式

使用下面的VBScript函数实现:

复制代码
Function FindLabel ( [整数字段] , [分子字段], [分母字段] )Dim fmLength '分母长度Dim fzLength '分子长度Dim zsLength '整数长度Dim hxLength '分式线长度fmLength = Len([分母字段]) 'len函数取字符串长度,字段计算器那儿有讲fzLength = Len([分子字段]) '博客园 yzhyingcoolzsLength = Len([整数字段])If fmLength > fzLength Then  '如果分母比分子长
    hxLength=fmLength       else '反之
       hxLength=fzLengthEnd If'下面的"-"或"—"根据英文(数字)或者中文进行调整即可FindLabel = space(zsLength)+[分子字段] +vbcrlf+[整数字段]+ string(hxLength,"-")+vbcrlf+space(zsLength)+ [分母字段]End Function
复制代码

效果如图:

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

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

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

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


引自:https://www.cnblogs.com/yzhyingcool/

相关文章

关于ArcGIS Engine符号库的讨论

关于ArcGIS Engine符号库的讨论

符号化是GIS应用开发中重要的功能或者是处理,由于程序中每次调入一个图层的图层的符号都是随机的,动态变化的,所以不利于图层的美观。还有一点就是符号有增加电子地图可读性的功能。符号的来源有以下几种:1、...

ArcGIS实用制图技巧——如何制作“光照”效果的水体多边形

ArcGIS实用制图技巧——如何制作“光照”效果的水体多边形

通过对地图中的水体要素添加光照效果,能够使地图更具真实感。这里,就来介绍一下如何使用ArcMap来实现为水体表面添加光照效果。         &nb...

ArcGIS使用字体文件制作符号库

ArcGIS使用字体文件制作符号库

ArcGIS制作的符号库有多种,刚刚毕业进入公司,接触到符号库的制作,在前人的脚步之下,本人整理通过字体符号(Character Marker Symbol)制作符号库的步骤。重要方法:对于大量制造符...

ArcGIS地图通用线符号的制作

ArcGIS地图通用线符号的制作

ArcGIS地图中有一些线性数据,如交通网络,应用的领域非常广泛,其符号表达已逐渐被大众所认识和熟知。这类线符号的制作,虽没达到约定俗成的程度,但已具有一定的通用性,值得制图员去学习和掌握。所以本文将...

ArcGIS地质填充符号的制作

ArcGIS地质填充符号的制作

地质制图中,面符号的制作复杂度最高,存在规则和不规则的样式,通常由底色和图案组成,表示岩性和年代,是极具代表性的符号种类。ArcGIS提供了3种实现地质面符号的方法:基于矢量、基于图片和基于制图表达技...

ArcGIS地图符号制作教程

ArcGIS地图符号制作教程

什么是地图符号?地图符号是地图的语言,它以图形的方式描述地图中地理要素、标注、注记的形状、大小、位置、数量和质量特征。地图的符号的作用是什么?地图主要依据符号的形状、尺寸和色彩来反映地图内容。图形形状...