谈ArcGIS分数标注的问题

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

操作方法

  • 01

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

  • 02

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

  • 03

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

  • 04

    用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<len([Shape_Area]) then 4.  max=len([Shape_Area]) 5.  end if 6.  FindLabel =[Shape_Length] &vbnewline&[DM]&string(int(max/2),"—")&vbnewline& [Shape_Area] 7.  End Function 标注作如上设置,使其聚合:

  • 05

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

  • 06

    即,在上一步的基础上,对分子,分母前分别加上与[DM]字段等长的空格,用s=string(len([DM])," ")表示。然后把[DM]字面放在横线所在行即可。 1.  Function FindLabel ( [Shape_Length], [Shape_Area], [DM] ) 2.  max=len( [Shape_Length] ) 3.  if max<len([Shape_Area]) then 4.  max=len([Shape_Area]) 5.  end if 6.  s=string(len([DM])," ") 7.  FindLabel = s&[Shape_Length] &vbnewline&[DM]&string(int(max/2),"—")&vbnewline&s& [Shape_Area] 8.  End Function 理论上可行,但我们发现空格好像被忽略了,不论对变量s增加多少个空格长度,分子分母都总要往左挤。为此,我试验了很多方法,把代码修改来修改去,始终无法达以完美的效果。突然意识到,这个问题跟代码无关,而应该跟arcmap内部的设置有关。的确,仔细看上述所有试验的标注发现两点:1)标注是默认居中对齐的(试验1、2可以看以明显效果)2)系统默认把我加的空格给忽略掉了。(这是导致试验3无效的主因)从上述着手,我找到两种不同的解决方案。对于10.1及以后版本中,maplex增加了一个细小的新功能:

  • 07

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

  • 08

    注意,此时为了对齐,做了很多小改动,如增加了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<len([Shape_Area]) then 5.  max=len([Shape_Area]) 6.  s0=int((max-len([Shape_Length]))/2) 7.  end if 8.  s=string(len([DM])*2+s0," ") 9.  FindLabel = s&[Shape_Length]&vbnewline&[DM]&string(int(max/2),"—")&vbnewline&s&[Shape_Area] 10. End Function 但是,remove extra space from label作为10.1的新功能,那么在10.0及之前版本如何解决该问题呢?转Annotation再手动调试?麻烦得很。下边为10.0及之前版本的一个略有缺陷的解决方案:既然系统忽略的是空格,尝试把填充的空格改为其它字符,如"_"下划线,尽量使其与横线一致,是否可行?将remove extra...这一选项勾选上,并把试验4的代码修改s,效果图如下:

  • 09

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

  • 10

    2)修改标注代码:

  • 11

    发现除了末尾有一无法去掉的下划线外,效果基本满意。代码如下: 1.  Function FindLabel( [DM], [Shape_Length] , [Shape_Area] ) 2.  max=len([Shape_Area]) 3.  if max<len([Shape_Length]) then 4.  max=len([Shape_Length]) 5.  end if 6.  s1=String(int((max-len([Shape_Length]))/2),"_") 7.  FindLabel=[Shape_Length]&s1&vbnewline& [DM]&string(int(max/2),"—") &vbnewline& [Shape_Area] 8.  End Function PS:当然,考虑过用<CLR red='255' green='255' blue='255'>&s1&"</CLR>",将下划线颜色赋成白色使其隐形,结果发现无效,遂放弃。【不知道是否代码复杂的时候,该语句就无法识别导致。尝试过简易代码,一个标注中呈现两种颜色是可行的】

(0)

相关推荐

  • arcgis 实用教程系列:[1]设置标注为分数样式

    arcgis 是一个强大的工具,网络上的教程要么泛泛而谈,要么千篇一律,新人入手太难.本人从个人工作出发,以图文的形式分享个人. arcgis中arcmap默认标注是单一元素,即使追加多个元素也实现不 ...

  • ArcGis无法显示标注怎么办

    在使用Arcgis标注矢量数据要素的时候,可能会出现无法显示标注的情况,下面给大家介绍一下如何解决无法显示的标注的情况. 操作方法 01 首先,点击打开arcgis,并加载图层,如图所示 02 在图层 ...

  • ArcGis 属性字段标注转CAD注记的方法

    ArcGis 属性字段标注转CAD注记的方法. 本教程只阐述方法,不去刻意讲一些为什么,注意什么,因为有的时候讲的越多越乱. 自己学会了之后慢慢揣摩开发效果会更好. 操作方法 01 新建一个" ...

  • Arcgis多个属性字段进行标注

    本文将介绍Arcgis中如何多个属性字段进行标注,并以两个属性字段为例. 操作方法 01 在Arcmap中,右键点击图层,选择"属性" 02 在属性对话框中,选择"标注& ...

  • 如何在ArcGIS中加载卫星地图并作标注

    大部分使用水经注地图下载器的朋友都是为了下载卫星地图后与矢量数据叠加使用或者直接在下载的地图上进行设计和规划,常见的配套使用的软件有ArcGIS和CAD,这里介绍一下万能地图下载器下载的卫星地图如何加 ...

  • arcgis了解并标注图层属性

    标注是图层的另一种属性,首先要了解用到那一个属性,才能自己创建一套标注,便于制图. 操作方法 01 确认标注符号所在位置并单击 02 在图中找出想要读取属性的点并单击,打开对话框,查看属性,明确以哪个 ...

  • 智学网登录不上怎么办?智学网登录网址及查分数全面教程

    智学网是一款让学生们第一时间了解自己考试情况的软件,在智学网,你可以输入用户名和密码即可快速查询考试分数,那么智学网查分登录系统网址是什么?怎么登录?怎么查分数?下面小编就给大家具体分享下智学网统一登 ...

  • 如何给WPS Excel表格设置标注不及格成绩

    我们想要给Excel表格中记录的成绩设置不及格分数线,将不及格的分数全部标注出来,该怎么操作呢?今天就跟大家介绍一下如何给WPS Excel表格设置标注不及格成绩的具体操作步骤.1.首先打开电脑,找到 ...

  • excel如何按照条件标注颜色(如何在电子表格中标注数值区间)

    用Excel处理数据时,怎么快速标注数据区域符合条件的数据呢?举个简单的例子,需要在学生成绩册中快速标注出不及格学生的对应分数.第一种方法:条件格式首先选中数据所在的单元格区域,在菜单栏开始选项卡中, ...