LabelClass (arcpy.mapping)

摘要

用于访问图层的标注类属性

讨论

对于管理与图层的单个标注类相关联的属性(如标注表达式或 SQL 查询)而言,LabelClass 对象至关重要。

例如,当地图文档的图层重定向至新的工作空间时,对这些属性的访问权限非常重要。对于标注类的 SQL 查询所针对执行的新数据库,可能需要使用相应的语法进行更新。例如,个人地理数据库中的字段名称会放在方括号中,而文件地理数据库中的字段名称则放在双引号中。除字段名称外,其他 SQL 属性(通配符、其他特殊字符、运算符等)可能也需要更改。如果 SQL 查询未更新,可能无法绘制图层。有关这些特殊情况的详细信息,请参阅使用 arcpy.mapping 更新和修复数据源主题。

标注表达式使用 VBScript、JScript 或 Python 解析程序。不应更改解析程序的语法和/或特殊字符(例如,VBScript 始终使用方括号),但应了解的是,可以更改字段名称。面积周长是表达式中常用的字段,并且在各数据源之间,这些字段的名称不同。

并非所有图层都支持 labelClasses 属性,所以,使用支持方法(例如,layer.supports("SHOWLABELS")layer.supports("LABELCLASSES"))提前进行测试十分有用。如果图层支持标注,则也会支持 labelClasses 属性,因此,无需同时测试这两者。

labelClasses 属性将会返回 LabelClass 对象的列表。要引用具体的 LabelClass 对象,则需要对列表中的每个项目进行循环,或提供具体的索引编号。

属性

属性说明数据类型
className
(读写)

用于获取或设置图层的单个标注类名称。

String
expression
(读写)

用于获取或设置图层的单个标注类表达式。这可以简单到只有一个字段,也可以使用 VBScript、JScript 或 Python 表达式来进行更高级的表达。

String
SQLQuery
(读写)

用于获取或设置图层的单个标注类 SQLQuery。这在将标注限制为某些要素方面十分有用。

String
showClassLabels
(读写)

用于获取或设置单个标注类的可见性。

Boolean

代码实例

LabelClass 示例 1

以下脚本仅会打印已打开标注和单个标注类的图层的标注类属性。该脚本先确认图层支持 labelClasses 属性。

import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")
for lyr in arcpy.mapping.ListLayers(mxd):
    if lyr.supports("LABELCLASSES"):
        if lyr.showLabels:
            print "Layer name: " + lyr.name
            for lblClass in lyr.labelClasses:
                if lblClass.showClassLabels:
                    print "    Class Name:  " + lblClass.className
                    print "    Expression:  " + lblClass.expression
                    print "    SQL Query:   " + lblClass.SQLQuery
del mxd
LabelClass 示例 2

以下脚本会修改之前指向个人地理数据库的 SQL 查询,现在,它的图层引用文件地理数据库。方括号将会更改为双引号,而通配符将会从星号 (*) 更改为百分号 (%)。即会保存新的输出地图文档,从而保留原始地图文档。

import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")
for lyr in arcpy.mapping.ListLayers(mxd):
    if lyr.supports("LABELCLASSES"):
        for lblClass in lyr.labelClasses:
            lblClass.SQLQuery = lblClass.SQLQuery.replace("[", "\"")
            lblClass.SQLQuery = lblClass.SQLQuery.replace("]", "\"")
            lblClass.SQLQuery = lblClass.SQLQuery.replace("*", "%")
mxd.saveACopy("c:/project/project2.mxd")
del mxd
5/10/2014