ArcGIS构建标注表达式
在ArcGIS构建标注表达式,有时虽然可以在字段中调整好,但直接用表达式标注更方便,特别是格式化文本
字段值自动转换为文本字符串。因此,如果想要使用算数运算中的数值或要进行比较时,需要将其转换回数值数据类型。下面的实例添加了两个整型字段:
Python
int([FIELD1]) + int([FIELD2])
VBScript
cint([FIELD1]) + cint([FIELD2])
JScript
parseInt([FIELD1]) + parseInt([FIELD2])
步骤:
- 单击标注工具条上的标注管理器按钮 。
- 单击标注分类列表中的标注分类。
- 单击表达式按钮。
- 选择解析程序菜单中的一种语言。
- 输入 Python、VBScript 或 JScript 表达式。也可以创建一个表达式,方法是双击相应字段,将其添加到表达式中,或选择相应字段并单击追加按钮将该字段追加到表达式的末尾,并用空格隔开。
字段用方括号 [ ] 括起来,无需考虑图层数据源的数据类型。
或者,在表达式框中输入 ArcGIS 文本格式化标签,将格式设置应用到一部分标注文本上。
如果表达式要跨多个代码行,请选中高级复选框,然后输入标注表达式。
- 单击验证以确保没有语法错误。
- 单击每个对话框上的确定。
提示:
常规和高级的标注表达式可以标注表达式文件 (.lxp) 的形式保存,该文件可加载到其他图层或地图中。
表达式示例
以下是标注表达式示例:
- 将字符串串联到字段的值上。例如,以下表达式将创建一个标注,其中 PARCELNO 字段值的前面会加上文本 "Parcel no:":
Python
"Parcel no: " + [PARCELNO]
VBScript
"Parcel no: " & [PARCELNO]
JScript
"Parcel no: " + [PARCELNO]
- 将小数四舍五入至设定的小数数位。例如,以下表达式可将“Area”字段的值四舍五入为保留一个小数位:
Python
round(float([AREA]), 1)
VBScript
Round ([AREA], 1)
JScript
function FindLabel ( [AREA] ) { var ss; var num= parseFloat([AREA]); ss = num.toFixed(1); return (ss); }
- 将文本注记全部转换为大写形式或小写形式。例如,以下表达式可将“Name”字段中的文本全部转换为小写形式:
Python
def FindLabel ( [NAME] ): S = [NAME] S = S.lower() return S
VBScript
LCase ([NAME])
JScript
[NAME].toLowerCase()
- 将标注文本转换为正确的大小写形式。例如,以下表达式会处理全部以大写字母显示的“Name”字段并将其转换为正确的大小写形式:
Python
def FindLabel ( [NAME] ): S = [NAME] S = S.title() return S
VBScript
Function FindLabel ( [NAME] ) FindLabel = UCase(Left([NAME],1)) & LCase(Right([NAME], Len([NAME]) -1)) End Function
JScript
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; }
- 创建堆叠文本。例如,以下表达式创建一个标注,该标注中的“名字”字段和两个地址字段都在单独的行上:
Python
"Name: " + [NAME] + '\n' + [ADDRESS_1] + '\n' + [ADDRESS_2]
VBScript
"Name: " & [NAME] & vbCrLf& [ADDRESS_1] & vbCrLf& [ADDRESS_2]
JScript
"Name: " + [NAME] + "\r" + [ADDRESS_1] + "\r" + [ADDRESS_2]
- 创建基于某字段文本的堆叠文本。例如,以下表达式用逗号来指定堆叠之处:
Python
def FindLabel ( [LABELFIELD] ): S = [LABELFIELD] S = S.replace(', ', '\n') return S
VBScript
Function FindLabel ( [LABELFIELD] ) FindLabel = replace([LABELFIELD], ", ", vbnewline) End Function
JScript
function FindLabel ( [LABELFIELD] ) { var r, re; var str = [LABELFIELD]; re = /,/g; r = str.replace(re, "\r"); return r; }
- 格式化标注。例如,以下表达式将以货币格式显示标注:
Python
def FindLabel ( [MAXIMUM_OC], [RATE] ): import locale locale.setlocale(locale.LC_ALL, '') S = locale.currency(float([MAXIMUM_OC]) * float([RATE])) return S
VBScript
"Occupancy Revenue: " & FormatCurrency ([MAXIMUM_OC] * [RATE])
JScript
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 万,则用默认标注字体标注该城市名称:
Python
def FindLabel ( [NAME], [POPULATION] ): if long([POPULATION]) >= 250000: return "<CLR red='255'><FNT size = '14'>" + [NAME] + "</FNT></CLR>" else: return [NAME]
VBScript
Function FindLabel ([NAME], [POPULATION]) if (cLng([POPULATION]) >= 250000) then FindLabel = "<CLR red='255'><FNT size = '14'>" + [NAME] + "</FNT></CLR>" else FindLabel = [NAME] end if End Function
JScript
function FindLabel ( [NAME], [POPULATION] ) { if (parseFloat([POPULATION]) >= 250000){ return ("<CLR red='255'><FNT size = '14'>" + [NAME] + "</FNT></CLR>"); } else return ([NAME]); }
格式化文本其他类型,摘自网上PHP一篇文档,在ArcGIS同样适用:
FormatCurrency 函数返回表达式,此表达式已被格式化为货币值(使用系统控制面板中定义的货币符号)。FormatCurrency(expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])参数Expression必选项。要被格式化的表达式。NumDigitsAfterDecimal可选项。指示小数点右侧显示位数的数值。默认值为 -1,指示使用的是计算机的区域设置。IncludeLeadingDigit可选项。三态常数,指示是否显示小数值小数点前面的零。有关数值,请参阅“设置”部分。UseParensForNegativeNumbers可选项。三态常数,指示是否将负值置于括号中。有关数值,请参阅“设置”部分。GroupDigits可选项。三态常数,指示是否使用计算机区域设置中指定的数字分组符号将数字分组。有关数值,请参阅“设置”部分。设置IncludeLeadingDigit、UseParensForNegativeNumbers 和 GroupDigits 参数可以有以下值:常数 值 描述TristateTrue -1 TrueTristateFalse 0 FalseTristateUseDefault -2 使用计算机区域设置中的设置。说明当省略一个或多个可选项参数时,由计算机区域设置提供被省略参数的值。 与货币值相关的货币符号的位置由系统的区域设置决定。注意 除“显示起始的零”设置来自区域设置的“数字”附签外,所有其他设置信息均取自区域设置的“货币”附签。下面例子利用 FormatCurrency 函数把 expression 格式化为 currency 并且赋值给 MyCurrency:Dim MyCurrencyMyCurrency = FormatCurrency(1000) 'MyCurrency包含$1000.00。FormatDateTime 函数返回表达式,此表达式已被格式化为日期或时间。FormatDateTime(Date[, NamedFormat])参数Date必选项。要被格式化的日期表达式。NamedFormat可选项。指示所使用的日期/时间格式的数值,如果省略,则使用 vbGeneralDate。设置NamedFormat 参数可以有以下值:常数 值 描述vbGeneralDate 0 显示日期和/或时间。如果有日期部分,则将该部分显示为短日期格式。如果有时间部分,则将该部分显示为长时间格式。如果都存在,则显示所有部分。vbLongDate 1 使用计算机区域设置中指定的长日期格式显示日期。vbShortDate 2 使用计算机区域设置中指定的短日期格式显示日期。vbLongTime 3 使用计算机区域设置中指定的时间格式显示时间。vbShortTime 4 使用 24 小时格式 (hh:mm) 显示时间。说明下面例子利用 FormatDateTime 函数把表达式格式化为长日期型并且把它赋给 MyDateTime:Function GetCurrentDate'FormatDateTime把日期型格式化为长日期型。GetCurrentDate = FormatDateTime(Date, 1)End FunctionFormatNumber 函数返回表达式,此表达式已被格式化为数值。FormatNumber(expression [,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])ArgumentsExpression必选项。要被格式化的表达式。NumDigitsAfterDecimal可选项。指示小数点右侧显示位数的数值。默认值为 -1,指示使用的是计算机的区域设置。IncludeLeadingDigit可选项。三态常数,指示是否显示小数值小数点前面的零。有关数值,请参阅“设置”部分。UseParensForNegativeNumbers可选项。三态常数,指示是否将负值置于括号中。有关数值,请参阅“设置”部分。GroupDigits可选项。三态常数,指示是否使用计算机区域设置中指定的数字分组符号将数字分组。有关数值,请参阅“设置”部分。设置IncludeLeadingDigit、UseParensForNegativeNumbers 和 GroupDigits 参数可以有以下值:常数 值 描述 TristateTrue -1 True TristateFalse 0 False TristateUseDefault -2 使用计算机区域设置中的设置。说明当省略一个或多个可选项参数时,由计算机区域设置提供被省略参数的值。注意 所有设置信息均取自区域设置的“数字”附签。下面例子利用 FormatNumber 函数把数值格式化为带四位小数点的数:Function FormatNumberDemoDim MyAngle, MySecant, MyNumberMyAngle = 1.3 ' 用弧度定义角。MySecant = 1 / Cos(MyAngle) ' 计算正割值。FormatNumberDemo = FormatNumber(MySecant,4) ' 把 MySecant 格式化为带四位小数点的数。End FunctionFormatPercent 函数返回表达式,此表达式已被格式化为尾随有 % 符号的百分比(乘以 100 )。FormatPercent(expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])FormatPercent 函数的语法有以下参数:参数Expression必选项。要被格式化的表达式。NumDigitsAfterDecimal可选项。指示小数点右侧显示位数的数值。默认值为 -1,指示使用的是计算机的区域设置。IncludeLeadingDigit可选项。三态常数,指示是否显示小数值小数点前面的零。有关数值,请参阅“设置”部分。UseParensForNegativeNumbers可选项。三态常数,指示是否将负值置于括号中。有关数值,请参阅“设置”部分。GroupDigits可选项。三态常数,指示是否使用计算机区域设置中指定的数字分组符号将数字分组。有关数值,请参阅“设置”部分。设置IncludeLeadingDigit、UseParensForNegativeNumbers 和 GroupDigits 参数可以有以下值:常数 值 描述 TristateTrue -1 True TristateFalse 0 False TristateUseDefault -2 使用计算机区域设置中的设置。说明当省略一个或多个可选项参数时,由计算机区域设置提供被省略参数的值。注意 所有设置信息均取自区域设置的“数字”附签。下面例子利用 FormatPercent 函数把表达式格式化为百分数:Dim MyPercentMyPercent = FormatPercent(2/32) 'MyPercent 包含 6.25%。
------------恢复内容结束------------