ArcGIS构建标注表达式

时间:2024-03-07 21:15:22

在ArcGIS构建标注表达式,有时虽然可以在字段中调整好,但直接用表达式标注更方便,特别是格式化文本

字段值自动转换为文本字符串。因此,如果想要使用算数运算中的数值或要进行比较时,需要将其转换回数值数据类型。下面的实例添加了两个整型字段:

Python
int([FIELD1]) + int([FIELD2])
VBScript
cint([FIELD1]) + cint([FIELD2])
JScript
parseInt([FIELD1]) + parseInt([FIELD2])

 

步骤:

  1. 单击标注工具条上的标注管理器按钮 标注管理器
  2. 单击标注分类列表中的标注分类。
  3. 单击表达式按钮。
  4. 选择解析程序菜单中的一种语言。
  5. 输入 Python、VBScript 或 JScript 表达式。也可以创建一个表达式,方法是双击相应字段,将其添加到表达式中,或选择相应字段并单击追加按钮将该字段追加到表达式的末尾,并用空格隔开。

    字段用方括号 [ ] 括起来,无需考虑图层数据源的数据类型。

    或者,在表达式框中输入 ArcGIS 文本格式化标签,将格式设置应用到一部分标注文本上。

    如果表达式要跨多个代码行,请选中高级复选框,然后输入标注表达式。

  6. 单击验证以确保没有语法错误。
  7. 单击每个对话框上的确定。
提示:
常规和高级的标注表达式可以标注表达式文件 (.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 True
    TristateFalse 0 False
    TristateUseDefault -2 使用计算机区域设置中的设置。
     
    说明
    当省略一个或多个可选项参数时,由计算机区域设置提供被省略参数的值。 与货币值相关的货币符号的位置由系统的区域设置决定。
     
    注意 除“显示起始的零”设置来自区域设置的“数字”附签外,所有其他设置信息均取自区域设置的“货币”附签。
     
    下面例子利用 FormatCurrency 函数把 expression 格式化为 currency 并且赋值给 MyCurrency:
     
    Dim MyCurrency
    MyCurrency = 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 Function
     
    FormatNumber 函数
    返回表达式,此表达式已被格式化为数值。
     
    FormatNumber(
    expression [,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]]
    )
     
    Arguments
    Expression
     
    必选项。要被格式化的表达式。
     
    NumDigitsAfterDecimal
     
    可选项。指示小数点右侧显示位数的数值。默认值为 -1,指示使用的是计算机的区域设置。
     
    IncludeLeadingDigit
     
    可选项。三态常数,指示是否显示小数值小数点前面的零。有关数值,请参阅“设置”部分。
     
    UseParensForNegativeNumbers
     
    可选项。三态常数,指示是否将负值置于括号中。有关数值,请参阅“设置”部分。
     
    GroupDigits
     
    可选项。三态常数,指示是否使用计算机区域设置中指定的数字分组符号将数字分组。有关数值,请参阅“设置”部分。
     
    设置
    IncludeLeadingDigit、UseParensForNegativeNumbers 和 GroupDigits 参数可以有以下值:
     
    常数 值 描述 TristateTrue -1 True TristateFalse 0 False TristateUseDefault -2 使用计算机区域设置中的设置。
    说明
    当省略一个或多个可选项参数时,由计算机区域设置提供被省略参数的值。
     
    注意 所有设置信息均取自区域设置的“数字”附签。
     
    下面例子利用 FormatNumber 函数把数值格式化为带四位小数点的数:
     
     Function FormatNumberDemo 
      Dim MyAngle, MySecant, MyNumber
      MyAngle = 1.3                \' 用弧度定义角。
      MySecant = 1 / Cos(MyAngle)  \' 计算正割值。
      FormatNumberDemo = FormatNumber(MySecant,4) \' 把 MySecant 格式化为带四位小数点的数。
    End Function
     
    FormatPercent 函数
    返回表达式,此表达式已被格式化为尾随有 % 符号的百分比(乘以 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 MyPercent
    MyPercent = FormatPercent(2/32) \'MyPercent 包含 6.25%。
     
     

------------恢复内容结束------------