getDefinition
汇总
用于访问图层的标注类属性。
讨论
LabelClass 对象用于管理与图层的单个标注类相关联的标注属性(如标注表达式或 SQL 查询)。 Layer 对象上的 listLabelClasses 方法将返回现有 LabelClass 对象列表。 Layer 对象上的 createLabelClass 方法将返回对新 LabelClass 的参考。
并非所有图层都支持标注,因此在 Layer 对象上使用 supports 方法提前进行测试是十分有用的。 例如:
if lyr.supports("SHOWLABELS"):
如果此语句为 True ,则您能够修改所有标注类属性。
注:
在 Windows 11 版本 24H2 中,VBScript 将成为一项按需特性,并且需要 VBScript 功能。
执行以下操作之一:
将表达式类型转换为 Python 或 Arcade。 请参阅以下 LabelClass 示例 4。
在 Windows 系统设置中启用 VBScript 可选功能。
语法
getDefinition()
属性
| 名称 | 说明 | 数据类型 |
|---|---|---|
|
expression (读取和写入) |
图层的单个标注类表达式(使用与标注类相关的 VBScript、JScript 或 Python 分析程序)。 |
String |
|
name (读取和写入) |
图层的单个标注类名称。 |
String |
|
SQLQuery (读取和写入) |
图层的单个标注类 SQLQuery。这在将标注限制为某些要素方面十分有用。 |
String |
|
visible (读取和写入) |
如果为 |
Boolean |
方法
getDefinition(cim_version)
返回标注类的 CIM 定义。
| 名称 | 说明 | 数据类型 |
|---|---|---|
|
cim_version |
A string that represents the major version of the CIM that will be used.
|
String |
返回值
| 数据类型 | 说明 |
|---|---|
|
Object |
返回 |
setDefinition(definition_object)
设置标注类的 CIM 定义。
| 名称 | 说明 | 数据类型 |
|---|---|---|
|
definition_object |
A modified CIM definition object originally retrieved using |
Object |
代码示例
以下脚本仅会打印已打开标注并支持 showLabels 属性的图层的标注类属性。
import arcpy
aprx = arcpy.mp.ArcGISProject(r"C:\Projects\YosemiteNP\Yosemite.aprx")
m = aprx.listMaps("Yosemite National Park")[0]
for lyr in m.listLayers():
if lyr.supports("SHOWLABELS"):
if lyr.showLabels:
print("Layer name: " + lyr.name)
for lblClass in lyr.listLabelClasses():
print("\t Class Name: \t" + lblClass.name)
print("\t Expression: \t" + lblClass.expression)
print("\t SQL Query: \t" + lblClass.SQLQuery)
del aprx
以下脚本会查找名为 Points of Interest 的图层并会更改名为 Summit 的特定标注类的标注类属性,从而不会对所有山峰进行标注。 仅会对高程超过 2,000 米的山峰进行标注。
import arcpy
aprx = arcpy.mp.ArcGISProject(r"C:\Projects\YosemiteNP\Yosemite.aprx")
m = aprx.listMaps("Yosemite National Park")[0]
lyr = m.listLayers("Points of Interest")[0]
if lyr.supports("SHOWLABELS"):
lblClass = lyr.listLabelClasses("Summit")[0]
lblClass.expression = "Name"
lblClass.SQLQuery = "Type_ = 'summit' And Elevation > 2000"
lblClass.visible = True
aprx.save()
del aprx
以下脚本使用 Python 和 Arcade 语言选项创建两个新的标注类。
p = arcpy.mp.ArcGISProject('current')
m = p.listMaps('Map')[0]
l = m.listLayers('GreatLakes')[0]
#Enable layer labels but toggle off all existing label classes
l.showLabels = True
for lc in l.listLabelClasses():
lc.visible = False
#Create new Label classes and toggle those on
lc1 = l.createLabelClass(name = 'Small Lakes - Python',
expression = '[AREA]',
sql_query = 'AREA < 10000',
labelclass_language = 'Python')
lc1.visible = True
lc2 = l.createLabelClass(name = 'Large Lakes - Arcade',
expression = '$feature.AREA',
sql_query = 'AREA > 10000',
labelclass_language = 'Arcade')
lc2.visible = True
以下脚本将表达式引擎语言从 Arcade 更改为 Python。 更改表达式同样非常重要,否则新指定的表达式引擎语言将无法正常处理该表达式。
p = arcpy.mp.ArcGISProject('current')
m = p.listMaps('GreatLakes')[0]
l = m.listLayers('GreatLakes')[0]
l_cim = l.getDefinition('V3') #Get Layer CIM definition
lc = l_cim.labelClasses[0] #Get the first label class
lc.expressionEngine = 'Python' #From 'Arcade' to Python
lc.expression = '[NAME]' #From '$feature.NAME' to Python syntax
l.setDefinition(l_cim) #Set Layer CIM definition