多语言展示
当前在线:1624今日阅读:60今日分享:41

谈ArcGIS分数标注的问题

ArcGIS是大多数做GIS行业的人不可或缺的一个软件,但是在标注,尤其是分数形势的标注困扰了很多人。
工具/原料
1

计算机

2

ArcGIS软件

方法/步骤
1

经常被朋友问到分数标注的问题,如林班的标注。在坛子里搜索,大伙给出了很多方案。最常见的是勾选advance后,用VBA语言,利用“—”来划那条横线,或者利用对分子加下划线的形式加横线。下边看下具体例子。

2

1)如只想简单的标注成分数形式,那是很easy的,如以shape_length作分子,shape_area作分母,则其设置方式为: 试验1:

3

即,对分子[Shape_Length]字段加下划线,然后用vbnewline换行,再加上[Shape_Area]字段即可。1.  ''&[Shape_Length]&''&vbnewline&[Shape_Area]此时存在的问题是,有可能分子的长度小于分母,导致下划线长度不够,缺少美观,改进方式为,增加长度判断,并以'—'代替下划线,则此时将分子、横线和分母,作三行显示。其设置如下:试验2

4

用len([字段])来获取字段值的长度,如12.34,其长度为4,而123.45,其长度为5。用if..then..end if条件判断语句,使max取得最长字段的长度,作为'—'长度计算值。string(int(max/2),'—')的作用为:绘制int(max/2)个'—',而int(max/2)是因为一个中文输入法下的'—'占据了2个英文字符的长度,因此要除2取整。1.  Function FindLabel ( [Shape_Length], [Shape_Area], [DM] )2.  max=len( [Shape_Length] )3.  if max

5

完成上述设置,则纯粹的分子/分母的标注形式就完成了。但往往我们的需求不止于此,还需要在分数的左边再加一个字段,如图:试验3:

6

即,在上一步的基础上,对分子,分母前分别加上与[DM]字段等长的空格,用s=string(len([DM]),' ')表示。然后把[DM]字面放在横线所在行即可。1.  Function FindLabel ( [Shape_Length], [Shape_Area], [DM] )2.  max=len( [Shape_Length] )3.  if max

7

在label expression界面,切换到maplex选项卡,发现有一个叫remove extra space from label的功能项,默认设置是勾选的。它的作用为:去除标注中无效的空格,所谓无效,是指标注行开始和末尾处的空格。即,我们不论在分子或分母(因为此时分子、分母都是单独成行的)的前或后任意加多少空格,都会被忽视掉。因此,去除勾选后,查看效果图如下:试验4:

8

注意,此时为了对齐,做了很多小改动,如增加了s0变量,以及对s变量的修改,s=string(len([DM])*2+s0,' '),对[DM]长度*2的目的,也在于中文字符占两个字节长度而英文字符占一上字节长度。S0是取的是分子分母长度差的一半。则上述效果其实已经很好了,不需要再调试。1.  Function FindLabel ( [Shape_Length], [Shape_Area], [DM] )2.  max=len( [Shape_Length] )3.  s0=int((max-len([Shape_Area]))/2)4.  if max

9

果然,分子和分母被移到右边去了。但显然这个效果并不是我们想要的。 依照这个思路,最终的解决方案为:把标注对齐方式改为右对齐,并在末尾处添加横线。1)修改标注的对齐方式为右对齐:

10

2)修改标注代码:

11

发现除了末尾有一无法去掉的下划线外,效果基本满意。代码如下:1.  Function FindLabel( [DM], [Shape_Length] , [Shape_Area] )2.  max=len([Shape_Area])3.  if max&s1&'',将下划线颜色赋成白色使其隐形,结果发现无效,遂放弃。【不知道是否代码复杂的时候,该语句就无法识别导致。尝试过简易代码,一个标注中呈现两种颜色是可行的】

推荐信息