摘要
用于对基本图层属性和方法进行访问。
说明
使用地图类中的 listLayers 方法可引用工程中的图层,或使用 LayerFile 类中的 listLayers 方法引用存储于磁盘上的图层文件(.lyr 或 .lyrx)中的图层。
Layer 对象以单一通用方式进行设计,以便处理所有图层。 图层类型千差万别,所支持的属性集也并不都一样。 例如,要素图层支持定义查询,而栅格图层不支持,但栅格目录支持。 一些有用的属性允许您获取有关图层及其支持的属性的信息,从而无需在各种不同的图层对象中查找所有可能的图层类型与属性的组合。 许多 is 属性都使您能够确定图层是否属于常规类别,例如 is3DLayer、isFeatureLayer、isGroupLayer、isRasterLayer、isWebLayer 等等。
还有少数专题图层和数据集并不属于这些常规类别:注记子类、尺寸要素、terrain 数据集、拓扑数据集等。 这种情况下,对所关注的图层执行操作前,您需要先测试其他属性以分离该图层。 supports 方法可帮助确定哪一特定图层支持何种特定图层属性。 此方法可用于在尝试获取或设置值之前测试该图层是否支持这一属性,从而可减少不必要的错误信息。 例如,请查看以下代码:if lyr.supports("BRIGHTNESS"):
lyr.brightness = 10
地图类中的 listLayers 方法将返回按图层在内容列表中的显示顺序或在图层文件中的显示顺序从上至下生成的索引值。 如果图层组在另一个图层组内,则同样适用。 例如,具有包含三个子图层的单个图层组的地图将返回包含四个图层名称的列表,图层组为第一个,三个子图层为第二、第三和第四。 有两种方法可以确定图层是否为图层组。 第一种方式,可以查看该图层是否支持 isGroupLayer 属性。 第二种方式,可以评估 longName 属性。 图层的 longName 值除了图层名称外还包括组名称。 例如,在一个名称为 Layer1 的图层组中,名称为 Group1 的图层将具有 Group1\Layer1 的 longName 值。 如果 name 值等于 longName 值,则该图层不在图层组中。 处理复合图层的子图层时,longName 属性将包含子图层和顶级图层的名称。
ArcGIS Pro 可读取旧的 .lyr 文件类型,但仅可将其保存到 .lyrx 文件类型。 如果正在引用 .lyr 文件类型且已调用 save 方法,则会将其转换为 .lyrx 文件类型,但文件名保持不变。
要素图层可以支持零到多个定义查询,但只能激活一个定义查询。 也有可能存在一个或多个定义查询但没有一个是活动的。 有几种方法可以管理定义查询。 第一种方式,可以使用 definitionQuery 属性。 如果在不具有定义查询的图层或具有多个定义查询的图层上设置唯一 SQL 字符串,则会添加新定义查询并将其设置为活动查询。 如果在具有相同查询的图层上设置 SQL 字符串,则会将其设置为活动定义查询(如果它尚未处于活动状态)。 管理定义查询的第二种方法是结合使用 listDefinitionQueries 和 updateDefinitionQueries 函数。 listDefinitionQueries 函数返回 Python 字典列表,这些字典表示与每个查询关联的属性。 字典关键字是 name、sql 和 isActive。 可以使用核心 Python 从 Python 列表中添加、修改或删除定义查询。 可以将字典 isActive 值设置为 True 以设置活动查询。 同样,只有一个查询可以处于活动状态。 如果您尝试将多个查询设置为活动状态,则会返回错误。 更改完成后,使用 updateDefinitionQueries 函数设置新的更改。
更改图层的数据源是一项常见要求。 Layer 对象中的方法和属性可帮助解决此问题。 有关详细说明、参数信息、案例和代码示例,请参阅更新和修复数据源帮助主题。
属性
属性 | 说明 | 数据类型 |
brightness (可读写) | 图层的亮度值。 默认正常亮度为 0%。 输入 +100% 和 -100% 之间的任意值。 在值的左侧输入加号或减号以指定该值是大于零还是小于零。 | Integer |
connectionProperties (只读) | 图层数据源连接信息作为 Python 字典返回。 | Dictionary |
contrast (可读写) | 图层的对比度值。 默认中性对比度为 0%。 输入 +100% 和 -100% 之间的任意值。 在值的左侧输入加号或减号以指定该值是大于零还是小于零。 | Integer |
dataSource (只读) | 返回图层数据源的完整路径。 其中包括完整的工作空间路径和数据集的名称。 对于企业级地理数据库图层,将返回包含图层连接信息的字符串。 提示:ArcGIS Pro 工程中的企业级地理数据库图层不保留用于创建图层的数据库连接文件的路径 (.sde)。 | String |
definitionQuery (可读写) | 图层的定义查询。 如果在不具有定义查询的图层或具有多个定义查询的图层上设置唯一 SQL 字符串,则会添加新定义查询并将其设置为活动查询。 如果在具有相同查询的图层上设置 SQL 字符串,则仅会将其设置为活动定义查询(如果它尚未处于活动状态)。 | String |
is3DLayer (只读) | 如果图层是 3D 图层,则返回 True。 | Boolean |
isBasemapLayer (只读) | 如果图层是底图图层,则返回 True。 | Boolean |
isBroken (只读) | 如果图层的数据源损坏,则返回 True。 | Boolean |
isFeatureLayer (只读) | 如果图层是要素图层,则返回 True。 | Boolean |
isGroupLayer (只读) | 如果图层是图层组,则返回 True。 | Boolean |
isNetworkAnalystLayer (只读) | 如果图层是 True 图层,则返回 ArcGIS Network Analyst extension。 | Boolean |
isNetworkDatasetLayer (只读) | 如果图层是 ArcGIS Network Analyst extension 网络数据集图层,则返回 True。 | Boolean |
isRasterLayer (只读) | 如果图层是栅格图层,则返回 True。 | Boolean |
isSceneLayer (只读) | 如果图层是场景图层,则返回 True。 | Boolean |
isTimeEnabled (只读) | 指示在图层上是否启用时间。 如果 isTimeEnabled 返回 True,可以使用图层上的 time 属性返回 LayerTime 对象。 使用 enableTime 方法以在包含时间信息的图层上启用时间。 | Boolean |
isWebLayer (只读) | 如果图层是 GIS 服务图层,则返回 True。 GIS 服务是自动化的地理信息服务,可以使用标准技术和协议在 Web 上对其进行发布和访问。 Esri 底图就是一个示例。 | Boolean |
longName (只读) | 包含图层组和复合图层结构的图层全名。 | String |
maxThreshold (可读写) | 图层的 2D 地图的最大比例阈值及其 3D 地图的地上最大距离。 如果图层被放大的比例超过了最大比例,则不会显示出来。 要清除最大比例,请将值设置为 0。 | Double |
metadata (可读写) | 获取或设置图层的元数据类信息。 注:设置元数据取决于 isReadOnly 属性值。 | Metadata |
minThreshold (可读写) | 图层的 2D 地图的最小比例阈值及其 3D 地图的地上最大距离。 如果图层被缩小的比例超过了最小比例,则不会显示出来。 要清除最小比例,请将值设置为 0。 | Double |
name (可读写) | 图层在内容列表中显示的名称。 可包含空格。 有必要确保地图上的所有图层都具有唯一的名称,因为这样便可通过这些唯一名称轻松对其进行引用。 | String |
showLabels (可读写) | 控制图层标注的显示。 如果设置为 True,则显示标注;如果设置为 False,则不会绘制标注。 | Boolean |
symbology (可读写) | 用于访问图层的符号系统。 | Object |
time (只读) | 如果在图层上启用了时间,则返回一个 LayerTime 对象。 | LayerTime |
transparency (可读写) | 图层的透明度值。 这样即可看透图层。 使用 0 和 100 之间的值。 值 0 表示不透明。 大于 90% 的透明度值经常导致图层几乎未被绘制。 | Integer |
URI (只读) | 图层的统一资源指示符。 这是项目中图层的唯一标识符,使用 Python CIM 访问时有时需要它。 添加图层并建立 URI 后,该值不会随时间变化。 例如,如果您修改图层的名称,则 URI 不会更改。 | String |
visible (可读写) | 控制图层的显示。 如果设置为 True,则绘制图层;如果设置为 False,则不绘制图层。 | Boolean |
方法概述
方法 | 说明 |
enableTime ({startTimeField}, {endTimeField}, {autoCalculateTimeRange}, {timeDimension}) | 如果图层具有时间信息,则在该图层上启用时间。 |
extrusion ({extrusion_type}, {expression}) | 在图层中对 2D 要素进行拉伸以显示 3D 符号系统。 |
getDefinition (cim_version) | 获取图层 CIM 定义。 |
getSelectionSet () | 以 Python 对象 ID 集的形式返回图层选择。 |
listDefinitionQueries ({wildcard}) | 返回与图层关联的定义查询的 Python 列表。 |
listLabelClasses ({wildcard}) | 返回图层中的 LabelClass 对象的 Python 列表。 |
listLayers ({wildcard}) | 返回图层组或复合图层中的图层对象的 Python 列表。 |
listTables ({wildcard}) | 返回存在于图层组中的 Table 对象的 Python 列表。 |
saveACopy (file_name) | 将图层保存为图层文件 (.lyrx)。 |
setDefinition (definition_object) | 设置图层的 CIM 定义。 |
setSelectionSet ({oidList}, {method}) | 使用 Python 对象 ID 列表设置图层选择。 |
supports (layer_property) | 用于确定特定图层类型是否支持图层对象的属性。 并非所有图层都支持同一组属性;尝试设置属性前可使用 supports 属性测试图层是否支持该属性。 |
updateConnectionProperties (current_connection_info, new_connection_info, {auto_update_joins_and_relates}, {validate}, {ignore_case}) | 使用工作空间字典或路径替换连接属性。 |
updateDefinitionQueries (definitionQueries) | 更新图层的定义查询集合。 |
updateLayerFromJSON (json_data) | 从 JSON 字符串更新图层。 |
方法
enableTime ({startTimeField}, {endTimeField}, {autoCalculateTimeRange}, {timeDimension})
参数 | 说明 | 数据类型 |
startTimeField | The name of the field containing the start time values. If each feature has a single time field, specify that field name in the startTimeField and leave endTimeField blank. If each feature has a start and end time field, specify both the startTimeField and endTimeField. (默认值为 None) | String |
endTimeField | The name of the field containing the end time values. Not all layers use an end time field. If each feature has a single time field, specify that field name in the startTimeField and leave endTimeField blank. If each feature has a start and end time field, specify both the startTimeField and endTimeField. (默认值为 None) | String |
autoCalculateTimeRange | If set to True, the start and end time attribute information is used to calculate the layer's time extent. (默认值为 True) | Boolean |
timeDimension | The name of the dimension containing time values when using netCDF data. (默认值为 None) | String |
extrusion ({extrusion_type}, {expression})
参数 | 说明 | 数据类型 |
extrusion_type | 用于指定拉伸方法的字符串。默认值为 NONE,即关闭图层拉伸。
(默认值为 NONE) | String |
expression | 用于定义拉伸表达式的字符串,该表达式为每个要素提供一个绝对拉伸高度。 (默认值为 None) | String |
拉伸是通过垂直拉伸 2D 平面形状来创建 3D 对象的过程。这是一种基于二维要素创建三维符号系统的方法。面要素和线要素均具有五个可用的 extrusion_type 选项;点要素不使用 MAX_HEIGHT 或 MIN_HEIGHT 选项。
getDefinition (cim_version)
参数 | 说明 | 数据类型 |
cim_version | 用于表示 CIM 的主要版本的字符串。 | String |
在版本 2.4 中引入了对其他对象属性的 CIM 级别访问权限。Esri 遵循语义版本规范。这意味着,在允许突破性 API 更改的下一个主要版本(例如,3.0)之前,与 cim_version 搭配使用的值为 V2。发布 3.0 之后,新 V3 选项将可用。如果可能在新版本中引入突破性更改,Python 脚本作者可通过该选项控制执行期间将使用的 CIM 版本。
有关使用 CIM 和示例的详细信息,请参阅 Python CIM 访问。
getSelectionSet ()
提供检索图层当前选择的简便方式。
listDefinitionQueries ({wildcard})
参数 | 说明 | 数据类型 |
wildcard | A wildcard is based on the query name and is not case sensitive. A combination of asterisks (*) and characters can be used to limit the resulting list. (默认值为 None) | String |
数据类型 | 说明 |
List | 表示与每个查询关联的属性的 Python 字典列表。 字典关键字是 name、sql 和 isActive。 |
可以使用标准做法从 Python 列表中添加、修改或删除定义查询。 可以将字典 isActive 值设置为 True 以设置活动查询。 同样,只有一个查询可以处于活动状态。 如果您尝试将多个查询设置为活动状态,则会返回错误。 更改完成后,使用 updateDefinitionQueries 函数设置新的更改。
listLabelClasses ({wildcard})
参数 | 说明 | 数据类型 |
wildcard | 通配符基于标注类名称且不区分大小写。星号 (*) 和字符的组合可用于帮助限制生成的列表。 (默认值为 None) | String |
数据类型 | 说明 |
List | 返回图层中的 LabelClass 对象的 Python 列表。 |
返回图层中的 LabelClass 对象的 Python 列表。
listLayers ({wildcard})
参数 | 说明 | 数据类型 |
wildcard | 通配符基于图层名称且不区分大小写。星号 (*) 和字符的组合可用于帮助限制生成的列表。 (默认值为 None) | String |
数据类型 | 说明 |
List | 返回图层组或复合图层中的图层对象的 Python 列表。 |
返回图层组或复合图层中的图层对象的 Python 列表。
listTables ({wildcard})
参数 | 说明 | 数据类型 |
wildcard | A wildcard is based on the table name and is not case sensitive. A combination of asterisks (*) and characters can be used to limit the resulting list. (默认值为 None) | String |
数据类型 | 说明 |
List | 图层中 Table 对象的 Python 列表。 |
返回存在于图层组中的 Table 对象的 Python 列表。 ListTables 始终返回列表对象,即使仅返回一个表。
图层组中可能存在同名的表。 在这种情况下,可能需要使用其他属性来隔离特定图层。 例如,表的 datasource、definitionQuery 或 URI 属性可用来执行此操作。 理想状态为所有表名称均唯一。
saveACopy (file_name)
参数 | 说明 | 数据类型 |
file_name | 包含输出图层文件 (.lyrx) 的位置和名称的字符串。 | String |
保存图层组时,TOC 中该组下所有的图层都将被保存到图层文件 (.lyrx) 中。
setDefinition (definition_object)
参数 | 说明 | 数据类型 |
definition_object | 使用 getDefinition 最初检索的已修改 CIM 定义对象。 | Object |
有关使用 CIM 和示例的详细信息,请参阅 Python CIM 访问。
setSelectionSet ({oidList}, {method})
参数 | 说明 | 数据类型 |
oidList [oidList,...] | 与相应的选择方法一起使用的 Python 对象 ID 列表。 (默认值为 None) | Integer |
method | 用于指定要使用的选择方法的字符串。
(默认值为 NEW) | String |
利用此方法可方便管理图层选择。要清空选择,请使用包含空列表的 NEW 选择方法或不设置任何参数。
注意:Python 列表可用于设置 oidList,但可通过 Layer 对象的 getSelectionSet 方法返回 Python 集。
supports (layer_property)
参数 | 说明 | 数据类型 |
layer_property | The name of a particular layer property that will be tested.
(默认值为 name) | String |
数据类型 | 说明 |
Boolean |
图层类型千差万别,所支持的属性也并不都一样。 例如,要素图层支持定义查询,而栅格图层不支持,但栅格目录支持。 supports 方法主要用于协助识别哪些图层类型支持哪些属性,而不是创建所有可能图层类型和属性组合的各个图层对象。 如果您不知道图层类型是否支持此属性,在获得或设置属性值前,您可以使用 support 方法对其进行测试。 如果图层支持该属性,则 supports 属性将返回 True。
不需要使用 supports 测试布尔属性,这是因为如果该图层类型不支持图层属性,则将返回 False 值。
updateConnectionProperties (current_connection_info, new_connection_info, {auto_update_joins_and_relates}, {validate}, {ignore_case})
参数 | 说明 | 数据类型 |
current_connection_info | 用于表示工作空间路径或 Python 字典(包含要更新的源的连接属性)的字符串。 | String |
new_connection_info | 用于表示包含连接属性与新源信息的工作空间路径或 Python 字典的字符串。 | String |
auto_update_joins_and_relates | 如果设置为 True,则 updateConnectionProperties 方法还将更新相关连接或关联的连接。 (默认值为 True) | Boolean |
validate | 如果设置为 True,则仅在 new_connection_info 值为有效连接时,才会更新连接属性。如果为无效连接,则不会替换连接。如果设置为 False,则无论匹配是否有效,此方法都会将所有连接设置为匹配 new_connection_info。在这种情况下,如果匹配不存在,则将损坏数据源。 (默认值为 True) | Boolean |
ignore_case | 确定搜索是否区分大小写。默认情况下,查询区分大小写。要执行不区分大小写的查询,请将 ignore_case 设置为 True。 (默认值为 False) | Boolean |
有关详细说明、参数信息、案例和代码示例,请参阅更新和修复数据源帮助主题。
updateDefinitionQueries (definitionQueries)
参数 | 说明 | 数据类型 |
definitionQueries [definitionQueries,...] | Updates a list of dictionaries that represent the properties of each definition query. | List |
此函数通常用于应用对 listDefinitionQueries 函数返回的结果所做的更改。
updateLayerFromJSON (json_data)
参数 | 说明 | 数据类型 |
json_data | The layer definition in JavaScript Object Notation (JSON) format. See the ExportWebMap JSON specification for more information. ArcGIS API for JavaScript and ArcGIS Web AppBuilder allow you to get this JSON string from the web app. The layer definition is a subset of the webmap_json used in the ConvertWebMapToArcGISProject function. You don't need to create the web map JSON; the APIs take care of it for you. However, you need to extract the layer definition from the full webmap_json. | String |
此函数可在 Web 工具中使用,此工具会在支持更改动态 Web 服务图层中的渲染器(或其他属性)的 Web 地图打印应用程序中使用 ConvertWebMapToArcGISProject 函数。 如果 Web 工具在运行 ConvertWebMapToArcGISProject 后将服务图层替换为过渡的矢量图层,则 updateLayerFromJSON 将按照 webmap_json 中指定的渲染器(或其他图层属性)应用于在布局模板中过渡的相应矢量图层。 有关详细信息和代码示例,请参阅 ConvertWebMapToArcGISProject。
代码示例
以下脚本打印工程中每个地图的名称并列出每个地图中的图层名称。 如果数据源损坏,脚本还会在图层名称后附加一个 (BROKEN) 前缀。
import arcpy
aprx = arcpy.mp.ArcGISProject(r"C:\Projects\YosemiteNP\Yosemite.aprx")
for m in aprx.listMaps():
print("Map: {0} Layers".format(m.name))
for lyr in m.listLayers():
if lyr.isBroken:
print("(BROKEN) " + lyr.name)
else:
print(" " + lyr.name)
del aprx
以下脚本将清除名为 Yosemite National Park 的地图中的所有图层定义查询并关闭所有图层的标注:
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("DEFINITIONQUERY"):
lyr.definitionQuery = ""
if lyr.supports("SHOWLABELS"):
lyr.showLabels = False
aprx.save()
del aprx
以下脚本向图层添加新的定义查询,或者如果 SQL 字符串已存在,则将相同的查询设置为活动定义查询:
p = arcpy.mp.ArcGISProject('current')
m = p.listMaps()[0]
l = m.listLayers()[0]
if l.supports('DefinitionQuery'):
l.definitionQuery = "AREA > 3000000"
以下脚本通过将 Python 字典附加到现有列表查询来创建新的定义查询。 因为查询可能已经处于活动状态,所以在设置新的活动查询之前首先清除现有的活动查询很重要。
p = arcpy.mp.ArcGISProject('current')
m = p.listMaps()[0]
l = m.listLayers()[0]
if l.supports('DefinitionQuery'):
#Get the list of definition queries
dql = l.listDefinitionQueries()
#Clear active definition queries otherwise the update will fail if there is already an active query
for dq in dql:
dq['isActive'] = False
#Create a new definition query and append it to the list
dql.append({'name': 'Appended Query', 'sql': "name = 'Lake Superior'", 'isActive': True})
#Update the definition queries with the newly modified list
l.updateDefinitionQueries(dql)