构建标注表达式
可以使用标注表达式来调整标注的格式。除了插入字符和脚本函数以外,您还可以使用标注表达式中的 ArcGIS 格式化标签。这些是用来更改全部或部分标注外观的特殊字符。例如,您可能使用粗体格式化标签使第一条线在一个堆叠、多行的标注中显示为粗体。
如果未选中标注表达式 对话框上的高级框,则标注表达式的作用将限制为单行代码。如果选中高级框,您可以输入包含编程逻辑并跨多个代码行的函数。
步骤:
- 单击标注 工具条上的标注管理器按钮 。
- 单击标注分类列表中的标注类别。
- 单击表达式按钮。
- 选择解析程序菜单中的一种语言。
- 输入 VBScript 或 JScript 表达式。或者,在表达式框中输入 ArcGIS 文本格式化标签,将格式设置应用到一部分标注文本上。
如果表达式要跨多个代码行,请选中高级复选框并输入标注表达式。
- 单击验证以确保没有语法错误。
- 在每个对话框上单击确定。
表达式示例
以下是标注表达式示例:
- 将字符串串联到字段的值上。例如,以下表达式将创建一个标注,其中 PARCELNO 字段值的前面会加上文本 "Parcel no:":
VBScript
"Parcel no: " & [PARCELNO]
"Parcel no: " + [PARCELNO]
- 将小数四舍五入至设定的小数数位。例如,以下表达式可将“Area”字段的值四舍五入为保留一个小数位:
VBScript
Round ([AREA], 1)
function FindLabel ( [AREA] ) { var ss; var num= parseFloat([AREA]); ss = num.toFixed(1); return (ss); }
- 将文本注记全部转换为大写形式或小写形式。例如,以下表达式可将“Name”字段中的文本全部转换为小写形式:
VBScript
LCase ([NAME])
[NAME].toLowerCase()
- 将标注文本转换为正确的大小写形式。例如,以下表达式会处理全部以大写字母显示的“Name”字段并将其转换为正确的大小写形式:
VBScript
Function FindLabel ( [NAME] ) FindLabel = UCase(Left([NAME],1)) & LCase(Right([NAME], Len([NAME]) -1)) End Function
function FindLabel ( [NAME] ) { var str = [NAME]; var iLen = String(str).length; var upper = (str.substring(0,1)).toUpperCase(); var lower = (str.substring(1, iLen)).toLowerCase() return upper + lower; }
- 创建堆叠文本。例如,以下表达式创建一个标注,该标注中的“名字”字段和两个地址字段都在单独的行上:
VBScript
"Name: " & [NAME] & vbCrLf& [ADDRESS_1] & vbCrLf& [ADDRESS_2]
"Name: " + [NAME] + "\r" + [ADDRESS_1] + "\r" + [ADDRESS_2]
- 创建基于某字段文本的堆叠文本。例如,以下表达式用逗号来指定堆叠之处:
VBScript
Function FindLabel ( [LABELFIELD] ) FindLabel = replace([LABELFIELD], ", ", vbnewline) End Function
function FindLabel ( [LABELFIELD] ) { var r, re; var str = [LABELFIELD]; re = /,/g; r = str.replace(re, "\r"); return r; }
- 格式化标注。例如,以下表达式将以货币格式显示标注:
VBScript
"Occupancy Revenue: " & FormatCurrency ([MAXIMUM_OC] * [RATE])
function FindLabel ( [MAXIMUM_OC], [RATE] ) { var ss; var num1 = parseFloat([MAXIMUM_OC]); var num2 = parseFloat([RATE]); var num3 = num1 * num2 ss = num3.toFixed(2); return ("$" + ss); }
- 指定 if-else 条件语句。如果城市人口等于或超过 25 万,这些函数会用大的红色字体标注该城市名称,如果城市人口少于 25 万,则用默认标注字体标注该城市名称:
VBScript
Function FindLabel ([NAME], [POPULATION]) if ([POPULATION] >= 250000) then FindLabel = "<CLR red='255'><FNT size = '14'>" + [NAME] + "</FNT></CLR>" else FindLabel = [NAME] end if End Function
function FindLabel ( [NAME], [POPULATION] ) { if ([POPULATION] >= 250000){ return ("<CLR red='255'><FNT size = '14'>" + [NAME] + "</FNT></CLR>"); } else return ([NAME]); }
注:要标注一个基于字段值的要素子集,请以在标注分类中创建 SQL 查询(而不是通过标注表达式)的方式进行。
了解有关 Microsoft VBScript 语言参考的详细信息
了解有关 Microsoft VBScript 语言参考的详细信息
(该信息存放在 Microsoft Corporation 创建、拥有和维护的网页上。ESRI 不能保证这些网页的可用性,也不对网页中的内容负责。)
ArcGIS 文本格式化标签
使用标注管理器 或图层属性 对话框中标注选项卡指定的符号绘制标注。您可以将 ArcGIS 文本格式化标签以文本字符串形式插入到表达式中,来修改或覆盖表达式中特定部分的该符号外观。这样,您可以创建具有混合格式的标注,例如,为标注中的某个字段加下划线。
下表列出了可用的标签。颜色 (RGB) 的可接受值为红色、绿色、蓝色 = 0–255,颜色 (CMYK) 的可接受值为青色、洋红色、黄色、黑色 = 0–100;缺失的颜色属性假定为 0。
字体 |
"<FNT name='Arial' size='18'>" & [LABELFIELD] & "</FNT>" "<FNT name='Arial' scale='200'>" & [LABELFIELD] & "</FNT>" |
颜色 |
"<CLR red='255' green='255' blue='255'>" & [LABELFIELD] & "</CLR>" "<CLR cyan='100' magenta ='100' yellow='100' black='100'>" & [LABELFIELD] & "</CLR>" |
粗体 |
"<BOL>" & [LABELFIELD] & "</BOL>" |
斜体 |
"<ITA>" & [LABELFIELD] & "</ITA>" |
下划线 |
"<UND>" & [LABELFIELD] & "</UND>" |
全部大写 |
"<ACP>" & [LABELFIELD] & "</ACP>" |
小型大写字母 |
"<SCP>" & [LABELFIELD] & "</SCP>" |
上标 |
"<SUP>" & [LABELFIELD] & "</SUP>" |
下标 |
"<SUB>" & [LABELFIELD] & "</SUB>" |
字符间距(0%= 正常) |
"<CHR spacing='25'>" & [LABELFIELD] & "</CHR>" |
字符宽度(100%= 正常) |
"<CHR width='150'>" & [LABELFIELD] & "</CHR>" |
词间距(100%= 正常) |
"<WRD spacing='150'>" & [LABELFIELD] & "</WRD>" |
行间距(磅) |
"<LIN leading='12'>" & [LABELFIELD] & "</LIN>" |
不加粗 |
"<_BOL>" & [LABELFIELD] & "</_BOL>" |
不倾斜 |
"<_ITA>" & [LABELFIELD] & "</_ITA>" |
不加下划线 |
"<_UND>" & [LABELFIELD] & "</_UND>" |
不加上标 |
"<_SUP>" & [LABELFIELD] & "</_SUP>" |
不加下标 |
"<_SUB>" & [LABELFIELD] & "</_SUB>" |
标签语法
以下语法规则适用于标注表达式中的标签:
- 格式化标签必须用双引号括起并使用 & 运算符将其串连到表达式的其他部分:
"<BOL>" & [LABELFIELD] & "</BOL>"
"Current <BOL>status</BOL> of parcel: " & [LABELFIELD]
- ArcMap 文本格式化标签遵守 XML 语法规则。每个起始标签必须有对应的结束标签。标签可以嵌套,但必须先结束内部标签,然后再结束外部标签:
"<BOL><UND>" & [LABELFIELD] & "</UND></BOL>"
- 标签对的大小写必须完全一致。所以 <BOL>...</BOL> 是有效的,<bol>..</bol> 也有效,但是 <Bol>...</bol> 是无效的。
- 在标注表达式中,标签属性必须用单引号或两组双引号括起。以下的表达式是等效的:
"<FNT name=""Arial"" size=""18"">" & [LABELFIELD] & "</FNT>"
"<FNT name='Arial' size='18'>" & [LABELFIELD] & "</FNT>"
- 在使用格式化标签时,特殊字符 & 和 < 在文本中是无效的。可改用相应的字符代码 & 和 <。例如,以下表达式将显示位于 < > 字符之间的标注字段的值:
"<ITA><" & [LABELFIELD] & "></ITA>"
Function FindLabel ([LABELFIELD]) NewString = Replace([LABELFIELD],"&","&") FindLabel = "<ITA>" & NewString & "</ITA>" End Function
- 无论是否使用标注表达式,您都可以将格式化标签嵌入到用于标注图层要素的字段值中。这样一来,对于标注字段中的特定值,您可以更改其任意部分的格式。只有字符串类型的标注字段支持嵌入格式化标签。字段值中使用的标签和标签属性不必用引号括起,因此以下标签字段值有效:
<ITA>Rochester</ITA> <FNT size='18'>C</FNT>Colorado
构建标注表达式的提示
以下提示有助于构建标注表达式:
- 要检查包含文本格式化标签的表达式是否有效,请单击检验按钮或应用更改并在地图中查看标注。如果格式化标签或语法无效,则标签会在检验 窗口和地图标注中显示为纯文本。
- 地图中或地图周围任何放置文本的位置几乎都可以使用文本格式化标签。