Layer

摘要

用于对基本图层属性和方法进行访问。

说明

使用地图类中的 listLayers 方法可引用工程中的图层,或使用 LayerFile 类中的 listLayers 方法引用存储于磁盘上的图层文件(.lyr.lyrx)中的图层。

Layer 对象以单一通用方式进行设计,以便处理所有图层。图层类型千差万别,所支持的属性集也并不都一样。例如,要素图层支持定义查询,而栅格图层不支持,但栅格目录支持。某些有用的属性可使您获取关于图层及其支持的属性的信息,而无需在各种不同的图层对象中查找所有可能的图层类型与属性的组合。许多 is 属性都使您能够确定图层是否属于常规类别:is3DLayerisFeatureLayerisGroupLayerisRasterLayerisServiceLayer

还有少数专题图层和数据集并不属于这些常规类别:注记子类、尺寸要素、terrain 数据集、拓扑数据集等。这种情况下,对所关注的图层执行操作前,您需要先测试其他属性以分离该图层。supports 方法可帮助确定哪一特定图层支持何种特定图层属性。此方法可用于在尝试获取或设置值之前测试该图层是否支持这一属性,从而可减少不必要的错误信息。例如,请查看以下代码:

if lyr.supports("BRIGHTNESS"):
    lyr.brightness = 10

地图类中的 listLayers 方法将返回按图层在内容列表中的显示顺序或在图层文件中的显示顺序从上至下生成的索引值。以上规则也适用于嵌套的图层组。例如,如果地图中包含一个内含三个子图层的图层组,则它将返回一个包含四个图层名的列表,图层组的名称作为第一项,子图层的名称依次为第二、第三、第四项。有两种方式用于确定某个图层是否为图层组。第一种方式,可以查看该图层是否支持 isGroupLayer 属性。第二种方式,可以评估 longName 属性。图层的 longName 值除了图层名称外还包括组名称。例如,在一个名称为 Group1 的组图层中,名称为 Layer1 的图层将具有 Group1\Layer1longName 值。如果 name 值等于 longName 值,则该图层不在图层组中。处理复合图层的子图层时,longName 属性将包含子图层和顶级图层的名称。

ArcGIS Pro 可读取旧的 .lyr 文件类型,但仅可将其保存到 .lyrx 文件类型。如果正在引用 .lyr 文件类型且已调用 save 方法,则会将其转换为 .lyrx 文件类型,但文件名保持不变。

通常会需要您更改图层的数据源。Layer 对象中的方法和属性可帮助解决此问题。有关详细说明、参数信息、案例和代码示例,请参阅更新和修复数据源帮助主题。

属性

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

图层的亮度值。 默认正常亮度为 0%。 输入 +100% 和 -100% 之间的任意值。 在值的左侧输入加号或减号以指定该值是大于零还是小于零。

Integer
connectionProperties
(只读)

图层数据源连接信息作为 Python 字典返回。

Dictionary
contrast
(可读写)

图层的对比度值。 默认中性对比度为 0%。 输入 +100% 和 -100% 之间的任意值。 在值的左侧输入加号或减号以指定该值是大于零还是小于零。

Integer
dataSource
(只读)

返回图层数据源的完整路径。 其中包括完整的工作空间路径和数据集的名称。 对于企业级地理数据库图层,将返回包含图层连接信息的字符串。

提示:

ArcGIS Pro 工程中的企业级地理数据库图层不保留用于创建图层的数据库连接文件的路径 (.sde)。

String
definitionQuery
(可读写)

图层的定义查询。

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
(可读写)

图层的透明度值。 这样即可看透图层。 使用 0100 之间的值。 值 0 表示不透明。 大于 90% 的透明度值经常导致图层几乎未被绘制。

Integer
visible
(可读写)

控制图层的显示。 如果设置为 True,则绘制图层;如果设置为 False,则不绘制图层。

Boolean

方法概述

方法说明
enableTime ({startTimeField}, {endTimeField}, {autoCalculateTimeRange})

如果图层在字段中存储了时间信息,则在该图层上启用时间。

extrusion ({extrusion_type}, {expression})

在图层中对 2D 要素进行拉伸以显示 3D 符号系统。

getDefinition (cim_version)

获取图层 CIM 定义。

getSelectionSet ()

以 Python 对象 ID 集的形式返回图层选择。

listLabelClasses ({wildcard})

返回图层中的 LabelClass 对象的 Python 列表。

listLayers ({wildcard})

返回图层组或复合图层中的图层对象的 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})

使用工作空间字典或路径替换连接属性。

updateLayerFromJSON (json_data)

从 JSON 字符串更新图层。

方法

enableTime ({startTimeField}, {endTimeField}, {autoCalculateTimeRange})
参数说明数据类型
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

enableTime 方法的所有参数均为可选参数。 如果未指定 startTimeFieldendTimeField,则该方法将评估数据并尝试提供适当的默认值。

运行 enableTime 方法后,可以使用图层上的 time 属性返回 LayerTime 对象。 如果布局上的 MapFrame 包含启用时间的图层,则可以使用 MapTime 类访问地图时间设置。

extrusion ({extrusion_type}, {expression})
参数说明数据类型
extrusion_type

用于指定拉伸方法的字符串。默认值为 NONE,即关闭图层拉伸。

  • ABSOLUTE_HEIGHT无论要素的 z 值是多少,要素都将被拉伸到指定的 z 值以形成平整的顶部。
  • BASE_HEIGHT为表示要素基本高度的每个折点计算 z 值,要素将被拉伸到各 z 值的高度,以创建多面顶部。
  • MAX_HEIGHT向要素的最小 z 值添加拉伸高度,要素将被拉伸到处于该值高度的平面。
  • MIN_HEIGHT向要素的最小 z 值添加拉伸高度,要素将被拉伸到处于该值高度的平面。
  • NONE要素未被拉伸。

(默认值为 NONE)

String
expression

用于定义拉伸表达式的字符串,该表达式为每个要素提供一个绝对拉伸高度。

(默认值为 None)

String

拉伸是通过垂直拉伸 2D 平面形状来创建 3D 对象的过程。这是一种基于二维要素创建三维符号系统的方法。面要素和线要素均具有五个可用的 extrusion_type 选项;点要素不使用 MAX_HEIGHTMIN_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 ()

提供检索图层当前选择的简便方式。

listLabelClasses ({wildcard})
参数说明数据类型
wildcard

通配符基于标注类名称且不区分大小写。星号 (*) 和字符的组合可用于帮助限制生成的列表。

(默认值为 None)

String
返回值
数据类型说明
List

返回图层中的 LabelClass 对象的 Python 列表。

返回图层中的 LabelClass 对象的 Python 列表。

listLayers ({wildcard})
参数说明数据类型
wildcard

通配符基于图层名称且不区分大小写。星号 (*) 和字符的组合可用于帮助限制生成的列表。

(默认值为 None)

String
返回值
数据类型说明
List

返回图层组或复合图层中的图层对象的 Python 列表。

返回图层组或复合图层中的图层对象的 Python 列表。

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

用于指定要使用的选择方法的字符串。

  • NEWoidList 创建一个新的要素选择。
  • DIFFERENCE选择不在当前选择中但在 oidList 中的要素。
  • INTERSECT选择当前选择和 oidList 中均含有的要素。
  • SYMDIFFERENCE选择当前选择或 oidList 不含的要素。
  • UNION选择当前选择和 oidList 中的全部要素。

(默认值为 NEW)

String

利用此方法可方便管理图层选择。要清空选择,请使用包含空列表的 NEW 选择方法或不设置任何参数。

注意:Python 列表可用于设置 oidList,但可通过 Layer 对象的 getSelectionSet 方法返回 Python 集。

supports (layer_property)
参数说明数据类型
layer_property

The name of a particular layer property that will be tested.

  • BRIGHTNESSA raster layer's brightness value.
  • CONNECTIONPROPERTIESA Layer's connection information.
  • CONTRASTA raster layer's contrast value
  • DATASOURCEA layer's file path or connection file.
  • DEFINITIONQUERYA layer's definition query string.
  • LONGNAMEA layer's path including the group layers it may be nested within.
  • MAXTHRESHOLDA layer's maximum threshold to display the features.
  • MINTHRESHOLDA layer's minimum threshold to display the features.
  • NAMEA layer's name.
  • TIMEA layer's time properties.
  • TRANSPARENCYA layer's transparency value.

(默认值为 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

有关详细说明、参数信息、案例和代码示例,请参阅更新和修复数据源帮助主题。

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

代码示例

图层示例 1

以下脚本打印了工程中每个地图的名称以及每个地图中图层名称的列表。如果图层的数据源损坏,脚本还会向图层名称追加 (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
图层示例 2

以下脚本将清除名为 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