解析ArcGis的标注(一)——先看看分数式、假分数式标注是怎样实现的
该“标注”系列博文的标注引擎使用“标准标注引擎(standard label engine)”,这个概念如不知道,可不理会,ArcGis默认标注引擎就是它。
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)/) '(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([分子字段]) '博客园 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的标注(一)——先看看分数式、假分数式标注是怎样实现的的更多相关文章
- 解析ArcGis的标注(二)——认识ArcGis标注标签
该“标注”系列博文的标注引擎使用“标准标注引擎(standard label engine)”,这个概念如不知道,可不理会,ArcGis默认标注引擎就是它. 本篇的标注语句解析使用VBScript,注 ...
- 解析ArcGis的标注(三)——标注的放置 与 转注记修改
该“标注”系列博文的标注引擎使用“标准标注引擎(standard label engine)”,这个概念如不知道,可不理会,ArcGis默认标注引擎就是它. 写着写着发现ArcGis标注的破事儿好多啊 ...
- 解析ArcGis的字段计算器(三)——文本型字段计算,编号那些事儿
实际操作中我们一般会将编号字段定义为文本型,因为编号不是序号,序号是一个递增数值,而编号往往是一个数字串代码. 本篇无说明的均使用VBScript语句1.怎么编号?最简单的编号—>直接在编号字段 ...
- 扩展ArcGIS API for Silverlight/WPF 中的TextSymbol支持角度标注
原文 http://blog.csdn.net/esricd/article/details/7587136 在ArcGIS API for Silverlight/WPF中原版的TextSymbol ...
- 解析ArcGis的字段计算器(一)——数值型数据计算,从“面积计算”开始
先来点儿背景知识铺垫: ArcMap的字段计算器提供了两种脚本语言的支持用以计算,两种脚本语言是VBScript与Python. 多数人选择使用前者,因为它的基本函数和Excel的函数貌似一样.注意我 ...
- 解析ArcGis拓扑——根据拓扑错误记录提取shp文件、导出Excel表格
在ArcGis拓扑检查的流程——以面重叠检查为例中讲述了如何在ArcGis进行拓扑检查与修改. 在实际操作中,有时我们还需要将ArcGis拓扑检查的结果制作成报告或者提取错误信息反馈作业方. 本文仍然 ...
- 解析ArcGis的字段计算器(二)——有玄机的要素Geometry属性,在属性表标记重复点线面
这里所说的重复是指完成重复的,不是叠在一起的两个或多个要素,这种应该叫做“压盖”或“重叠”.重复往往是在合并多Shpfile文件时不小心重复导入造成的. 这里提供一种可能的解决办法,数据无价,请备份! ...
- 解析ArcGis拓扑——检查的流程,以面重叠检查为例
最简单的面重叠错误检查是使用“地理处理”——“面相交”进行检查,其结果是重叠部分提取而成的新面要素类.本例不讲述此种方法. step1 准备待拓扑检查数据 名词: 数据库 DataBase→顾名思义, ...
- ArcGis辅助编号(半自动)功能的插件式实现
应邀写了一个ArcGis(ArcMap更确切一些)的辅助编号功能,其实只要想通了实现逻辑,实现的过程蛮简单的.相比挨个儿点要素写进编号或者借助“按键精灵”写入,直接操作宿主真是爽快得不能自已.无图言屌 ...
随机推荐
- Hdoj 1233.还是畅通工程 题解
Problem Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直 ...
- 【LOJ#6073】距离(主席树)
[LOJ#6073]距离(主席树) 题面 LOJ 题解 两点间的距离是\(dep[x]+dep[y]-2dep[LCA]\). 那么题目要求的东西拆开维护,唯一不好做的就是\(2dep[LCA]\). ...
- rt-thread中软件定时器组件超时界限的一点理解
@2019-01-15 [小记] 对 rt-thread 中的软件定时器组件中超时界限的一点理解 rt_thread_timer_entry(void *parameter)函数中if ((next_ ...
- IT项目管理——《人月神话》读后感
这也许是和候红老师的最后的几节课了吧,侯老师是一个很有思想深度,很关心同学的好老师. 一开学就布置了阅读<人月神话>的作业,说实话,我没有看,以我的速度可能2.3个小时就看完了,但是我觉得 ...
- 「ZJOI2016」大森林 解题报告
「ZJOI2016」大森林 神仙题... 很显然线段树搞不了 考虑离线操作 我们只搞一颗树,从位置1一直往后移动,然后维护它的形态试试 显然操作0,1都可以拆成差分的形式,就是加入和删除 因为保证了操 ...
- 通俗易懂的来理解Iaas,Paas,SaaS
首先我们先来了解一下这几个单词的意思和完全的英文 Iaas:Infrastructure as a service 基础设施即服务 Paas:Platform as a service 平台 ...
- JavaWeb基础之Servlet简单实现用户登陆
学习javaweb遇到了一些坑,一些问题总结下来,记个笔记. 学习servlet遇到的一些坑: servlet实现用户登陆遇到的坑解决办法: https://www.cnblogs.com/swxj/ ...
- Python基础教程2#练习使用参数的疑难杂点分析
在书上120页,一个案例是练习使用参数,有可能新手朋友们有可能对有些地方看不懂,在这里讲解出来,仅供大家学习. 这是代码,注释部分是我的解释: #coding:utf-8 #练习使用参数实例.py d ...
- Up-to-date cache with EclipseLink and Oracle
Up-to-date cache with EclipseLink and Oracle One of the most useful feature provided by ORM librarie ...
- A1136. Delayed Palindrome
Consider a positive integer N written in standard notation with k+1 digits ai as ak⋯a1a0 ...