摘要
用于访问图层的标注类属性
讨论
对于管理与图层的单个标注类相关联的属性(如标注表达式或 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