ArcGIS Desktop

  • ArcGIS Pro
  • ArcMap

  • My Profile
  • 帮助
  • Sign Out
ArcGIS Desktop

ArcGIS Online

专为贵组织打造的制图平台

ArcGIS Desktop

全面的专业性 GIS

ArcGIS Enterprise

面向企业的 GIS

ArcGIS for Developers

用于构建位置感知应用程序的工具

ArcGIS Solutions

适用于行业的免费模板地图和应用程序

ArcGIS Marketplace

获取适用于组织的应用程序和数据

  • 文档
  • 支持
Esri
  • 登录
user
  • 我的个人资料
  • 登出

ArcMap

  • 主页
  • 入门
  • 地图
  • 分析
  • 管理数据
  • 工具
  • 扩展模块

构建标注表达式

  • 表达式示例

可以使用标注表达式来调整标注的格式。除了插入字符和脚本函数以外,您还可以使用标注表达式中的 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;
    }
    
  • 创建堆叠文本。例如,以下表达式创建一个标注,该标注中的“Name”字段和两个地址字段都在单独的行上:
    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]);
    }
    
注:
要标注一个基于字段值的要素子集,请以在标注分类中创建 SQL 查询(而不是通过标注表达式)的方式进行。
  • Python 语言参考
  • Microsoft VBScript 语言参考
  • Microsoft JScript 语言参考

(该信息存放在并非 Esri 创建、拥有和维护的网页上。Esri 不能保证这些网页的可用性,也不对网页中的内容负责。)

相关主题

  • 标注的基本概念
  • 关于显示标注
  • 关于为标注指定文本
  • 使用文本格式化标签

ArcGIS Desktop

  • 主页
  • 文档
  • 支持

ArcGIS 平台

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS for Developers
  • ArcGIS Solutions
  • ArcGIS Marketplace

关于 Esri

  • 关于我们
  • 招贤纳士
  • Esri 博客
  • 用户大会
  • 开发者峰会
Esri
分享您的想法。
Copyright © 2020 Esri. | 隐私政策 | 法律声明