摘要
Map 对象是参考和管理 ArcGIS Pro 工程中的图层和表的主要对象。
说明
ArcGIS Pro 中的 Map 用于表示表格与符号化地理图层的集合,同时用于保留坐标系、默认数据视图和其他各种元数据的信息。 对地图内容进行可视化的唯一方式是在地图视图(即在具有自己的内容列表的应用程序中作为选项卡)或在布局上的地图框中进行。 可在多个地图视图或地图框中显示同一地图。 如果已将图层添加到地图,则所有引用此地图的地图视图和地图框将显示已添加的图层。 如果希望在不同视图中显示其他图层或表集合,则需要构建和使用不同的地图。
地图使用 ArcGISProject 对象中的 listMaps 函数进行访问,该函数将返回 Map 对象的 Python 列表。 需要对每个地图进行唯一命名,以轻松在使用 name 属性的 wildcard 参数中参考特定地图。 地图还可以从 MapFrame 对象使用 map 属性进行访问。
ArcGISProject 类上的 createMap 方法用于在工程中创建地图。 如果在应用程序中运行脚本,则将采用底图设置。 如果在应用程序外部运行脚本,将会自动添加地形底图并且您需要移除不需要的底图图层。
还可通过 openView 方法打开地图视图。 您可能希望在调用 openView 之前执行一些操作。 首先,在打开新视图之前设置 defaultCamera 可控制初始范围。 其次,您可能希望在打开新视图之前,使用 ArcGISProject 类上的 closeViews 方法关闭其他视图。 下面的第三个示例演示了此工作流程。
Map 对象上有许多可用方法,用于管理其表格和符号化地理图层集合。 图层和表可以在现有图层和表列表中进行添加(addLayer、addLayerToGroup、addTable 或 insertLayer)、移除(removeLayer 或 removeTable)和重新排列 (moveLayer)。 listLayers 和 listTables 方法为如何在地图中引用图层和表。
所有地图都具有 mapType 属性。 该属性可以具有值 MAP(表示 2D 地图)或值 SCENE(表示 3D 地图)。 需要知道 mapType 属性的示例之一为要设置 defaultCamera 属性时。 不能将 3D Camera 对象应用于 2D 地图,反之亦然。 因此,您需要提前检查 mapType 值。
地图类还支持 getDefinition 和 setDefinition 方法。 有关更详细的帮助,请参阅 Python CIM 访问。
属性
属性 | 说明 | 数据类型 |
defaultCamera (可读写) | 用于获取或设置地图的默认照相机设置。 | Camera |
defaultView (只读) | 与 Web 地图打印 Web 工具中的 ConvertWebMapToArcGISProject 一起使用,以返回要打印或导出的地图视图。 | MapView |
mapType (只读) | 返回用于报告 Map 对象类型信息的字符串值。 如果 Map 是 2D,则返回 MAP。 如果 Map 是 3D,则返回 SCENE。 | String |
mapUnits (只读) | 返回用于表示为 Map 设置的地图单位的字符串值。 | String |
metadata (可读写) | 获取或设置地图的元数据类信息。 注:设置元数据取决于 isReadOnly 属性值。 | Metadata |
name (可读写) | 用于在 Map 对象出现在内容列表中时获取或设置其名称,同时还用于获取或设置布局内的实际元素名称。 | String |
referenceScale (可读写) | 用于获取或设置 Map 的参考比例。 要清除最小比例,请将值设置为 0.0 | Double |
spatialReference (可读写) | 用于获取或设置与地图相关联的 SpatialReference。 | SpatialReference |
transformations (只读) | 将与地图关联的水平和垂直变换作为 Python 字典返回。 水平变换的字典键为 2D,垂直变换的字典键为 3D。 要修改现有变换,使用 updateTransformations。 | Dictionary |
URI (只读) | 地图的统一资源指示符。 这是项目中地图的唯一标识符,使用 Python CIM 访问时有时需要它。 添加地图并建立 URI 后,该值不会随时间变化。 例如,如果您修改地图的名称,则 URI 不会更改。 | String |
方法概述
方法 | 说明 |
addBasemap (basemap_name) | addBasemap 可用于在地图内添加或替换底图图层。 |
addDataFromPath (data_path, {web_service_type}, {custom_parameters}) | addDataFromPath 允许通过提供本地路径或 URL 向工程 (.aprx) 中的地图添加图层。 |
addLayer (add_layer_or_layerfile, {add_position}) | |
addLayerToGroup (target_group_layer, add_layer_or_layerfile, {add_position}) | |
addTable (add_table) | 用于向工程 (.aprx) 内的地图中添加 Table。 |
addTableToGroup (target_group_layer, add_table) | 用于向工程 (.aprx) 内的地图中现有图层组添加 Table。 |
clearSelection () | 清除地图中所有图层和表的选择。 |
createGroupLayer (name, {group_layer}) | 允许您在工程 (.aprx) 内的地图中创建图层组。 |
exportToMAPX (out_mapx) | 用于将 Map 导出至地图文件。 |
getDefinition (cim_version) | 获取地图的 CIM 定义。 |
getWebLayerSharingDraft (server_type, service_type, service_name, {layers_and_tables}) | 在可配置并共享到 ArcGIS Enterprise 或 ArcGIS Online 的地图中创建共享草稿。 |
insertLayer (reference_layer, insert_layer_or_layerfile, {insert_position}) | |
listBookmarks ({wildcard}) | 返回 Map 中的 bookmark 对象的 Python 列表。 |
listBrokenDataSources () | |
listLayers ({wildcard}) | 返回存在于地图中的 Layer 对象的 Python 列表。 |
listTables ({wildcard}) | 返回存在于地图中的 Table 对象的 Python 列表。 |
moveLayer (reference_layer, move_layer, {insert_position}) | 用于在图层堆叠中将地图中的图层或图层组移动到特定位置。 |
openView () | 在应用程序中打开并激活一个新的地图视图窗格。 |
removeLayer (remove_layer) | 用于从工程内的地图中移除图层。 |
removeTable (remove_table) | 用于从工程内的地图中移除表。 |
setDefinition (definition_object) | 设置地图的 CIM 定义。 |
updateConnectionProperties (current_connection_info, new_connection_info, {auto_update_joins_and_relates}, {validate}, {ignore_case}) | updateConnectionProperties 方法使用工作空间字典或路径替换连接属性。 |
updateTransformations (transformations) | updateTransformations 方法使用字典替换地图的变换。 |
方法
addBasemap (basemap_name)
参数 | 说明 | 数据类型 |
basemap_name | The name of the basemap as it appears in the basemap gallery. | String |
addBasemap 方法的工作方式与地图功能区上底图控件的工作方式相同。 如果底图不存在,则将添加一个新底图。 如果已存在一个或多个底图,它们则会被正在添加的底图替代。
如果要向地图添加多个底图,请将底图保存为图层文件,然后使用 LayerFile 和 addLayer 方法进行添加。
addDataFromPath (data_path, {web_service_type}, {custom_parameters})
参数 | 说明 | 数据类型 |
data_path | A string that represents a local path or URL. (默认值为 None) | String |
web_service_type | A string that represents the type of web service connection. When you are working with a service URL that is hosted on a third-party server and the URL is not deterministic, you must specify the service type from the list to add the data. The default value of AUTOMATIC will not work if the custom_parameters dictionary is provided.
(默认值为 AUTOMATIC) | String |
custom_parameters | A Python dictionary of custom connection parameters. The KML data_service_type does not support custom properties. (默认值为 None) | Dictionary |
数据类型 | 说明 |
Layer | 一个图层对象。 |
addDataFromPath 方法提供了一种向地图添加图层的方法,这与从路径添加数据按钮在应用程序中的工作方式相似,即根据图层权重规则和几何类型放置图层。 有关更精确的图层放置控制,请参阅 moveLayer 方法。
添加 ArcGIS Server 服务、矢量切片服务或 WMS 服务时,可以添加自定义请求参数。 这些键值对可追加到受支持服务图层获取的所有资源和操作的 URL。 这些通常是访问键,以允许访问受限制的数据。 在某些情况下,您必须指定访问键值对以添加数据。 如果您要使用受限的访问服务,请联系服务的管理员获取访问密钥。
有关详细信息,请参阅将图层添加至地图或场景。
addLayer (add_layer_or_layerfile, {add_position})
参数 | 说明 | 数据类型 |
add_layer_or_layerfile | Layer | |
add_position | 此常数用于确定在地图中添加的单个或多个图层的放置位置。
(默认值为 AUTO_ARRANGE) | String |
数据类型 | 说明 |
List | Layer 对象的 Python 列表。 |
addLayer 方法用于向地图添加图层或图层集合。默认 add_position 可以使用自动排列逻辑添加图层,将图层放置在地图中,这与添加数据按钮在应用程序中的工作方式相似;add_position 根据图层权重规则和几何类型放置图层。其他放置选择为放置在图层堆叠的 TOP 或 BOTTOM。有关更精确的图层放置控制,请参阅 insertLayer 方法。
已添加的图层可以引用同一工程或单独工程中的现有图层,或引用磁盘上的图层文件(.lyr 或 .lyrx)。图层可以引用单个图层、含有多个子图层的图层组,或根级别的图层或图层组的集合(如果引用 .lyrx 文件)。有关图层文件的详细信息,请参阅 LayerFile。
添加图层后,图层在内容列表 (TOC) 中的显示方式取决于源图层及其显示方式。例如,在 TOC 中,有些图层完全折叠且不显示其符号。此设置内置在图层中。如果图层折叠且保存在图层文件中,然后被添加到地图中,则通过 addLayer 添加该图层时,图层在新地图中将显示为折叠状态。
addLayerToGroup (target_group_layer, add_layer_or_layerfile, {add_position})
参数 | 说明 | 数据类型 |
target_group_layer | 对现有 Layer 对象组的引用。 | Layer |
add_layer_or_layerfile | Layer | |
add_position | 此常数用于确定在 target_group_layer 中添加的单个或多个图层的放置位置。
(默认值为 AUTO_ARRANGE) | String |
addLayerToGroup 方法仅会向地图中现有的空图层组添加图层或图层集合。默认 add_position 可以使用自动排列逻辑添加图层,将图层放置在地图中,这与添加数据按钮在应用程序中的工作方式相似;add_position 根据图层权重规则和几何类型放置图层。其他放置选择为放置在图层堆叠的 TOP 或 BOTTOM。有关更精确的图层放置控制,请参阅 insertLayer 方法。
已添加的图层可以引用同一工程或单独工程中的现有图层,或引用磁盘上的图层文件(.lyr 或 .lyrx)。图层可以引用单个图层、含有多个子图层的图层组,或根级别的图层或图层组的集合(如果引用 .lyrx 文件)。有关图层文件的详细信息,请参阅 LayerFile。
添加图层后,图层在内容列表 (TOC) 中的显示方式取决于源图层及其显示方式。例如,在 TOC 中,有些图层完全折叠且不显示其符号。此设置内置在图层中。如果图层折叠且保存在图层文件中,然后被添加到地图中,则通过 addLayerToGroup 添加该图层时,图层在新地图中将显示为折叠状态。
addTableToGroup (target_group_layer, add_table)
参数 | 说明 | 数据类型 |
target_group_layer | A reference to an existing group layer. | Layer |
add_table | A reference to a Table object. | Table |
addTableToGroup 方法是向地图中的现有图层组添加表的唯一方法。 已添加的表可以引用同一工程中的现有表、单独工程中的表,或磁盘上图层文件 (.lyrx) 中的表。
如果您在同一地图中引用表并将表添加到组中,将创建一个重复的表,您可能需要删除原始表引用。
clearSelection ()
清除地图中所有图层和表的选择。
createGroupLayer (name, {group_layer})
参数 | 说明 | 数据类型 |
name | A string that represents the name of the new group layer. | String |
group_layer | A reference to an existing group layer into which to insert the new group layer. Use this parameter to create nested group layers. | Layer |
数据类型 | 说明 |
Layer | 对新图层组的引用。 |
createGroupLayer 方法允许您在地图中创建图层组。 图层组将创建在地图内容列表的第一个位置。 图层组也可以在现有图层组中创建以创建嵌套图层组。 图层组创建完成后,可以使用 moveLayer 方法将图层组移动到地图内容列表中的其他位置。
exportToMAPX (out_mapx)
参数 | 说明 | 数据类型 |
out_mapx | 用于将 Map 保存至地图文件 (.mapx) 的字符串。 | String |
如果您希望将地图保存至地图文件,以供日后使用 ArcGISProject importDocument 方法将其导入到工程中,则此方法将非常有用。
getDefinition (cim_version)
参数 | 说明 | 数据类型 |
cim_version | A string that represents the major version of the CIM. | String |
在 ArcGIS Pro 2.4 中引入了对其他对象属性的 CIM 级别访问权限。 要返回对象的 CIM 定义,必须指定 cim_version。 Esri 遵循语义版本规范。 这意味着在主要版本(例如 3.0)中允许突破性 API 更改。 如果可能在新版本中引入突破性更改,Python 脚本作者可通过该值控制脚本运行期间使用的 CIM 版本。 如果您正在为 ArcGIS Pro 2.x 创作脚本,可将 cim_version 指定为 'V2'。 如果您正在为 ArcGIS Pro 3.x 创作脚本,可将 cim_version 指定为 'V3'。 使用 cim_version 'V2' 创作的脚本可继续在 ArcGIS Pro 3.x 中使用。
有关使用 CIM 和示例的详细信息,请参阅 Python CIM 访问。
getWebLayerSharingDraft (server_type, service_type, service_name, {layers_and_tables})
参数 | 说明 | 数据类型 |
server_type | A string representing the server type. The following server types are supported:
提示:The getWebLayerSharingDraft function does not support publishing map services to ArcGIS Server. Instead, use the arcpy.sharing.CreateSharingDraft function. | String |
service_type | A string representing the service type. The following service types are supported:
| String |
service_name | A string that represents the name of the service. This is the name people will see and use to identify the service. The name can contain alphanumeric characters, spaces, and underscores. No special characters are allowed. The name cannot be more than 120 characters in length. | String |
layers_and_tables | A list of layers and tables from the map. If left blank, the entire map will be published. This parameter allows you to choose a subset of layers and tables from the map to publish. The layers and tables must be from the same map that is being published. 注:If you specify a layer or table that participates in a relationship class when publishing a web feature layer or a map image layer, all layers or tables involved in the relationship class will be published. | List |
数据类型 | 说明 |
Object | 返回 FeatureSharingDraft、TileSharingDraft 或 MapImageSharingDraft 类对象。 |
getWebLayerSharingDraft 函数可基于 ArcGIS Pro 工程中的地图创建共享草稿。 共享草稿是适用于 web 图层的可配置属性集。 共享草稿配置完成后,可以使用 FeatureSharingDraft、TileSharingDraft 或 MapImageSharingDraft 类中的 exportToSDDraft 函数将其保存到服务定义草稿 (.sddraft) 文件。 随后即可使用过渡服务和上传服务定义工具将其过渡和共享给 ArcGIS Enterprise 或 ArcGIS Online。 有关详细信息,请参阅共享模块简介。
insertLayer (reference_layer, insert_layer_or_layerfile, {insert_position})
参数 | 说明 | 数据类型 |
reference_layer | 表示可确定新图层插入位置的现有图层的 Layer 对象。 | Layer |
insert_layer_or_layerfile | Layer | |
insert_position | 此常数用于确定相对于 reference_layer 的单个或多个图层的放置位置。
(默认值为 BEFORE) | String |
因使用了 reference_layer 来指定准确位置,insertLayer 方法可在地图或图层组中更为精确地定位图层。可将该图层添加到 reference_layer 的 before 或 after。
如果 reference_layer 引用的是地图根级别的图层,则所插入的图层会添加到根级别。如果 reference_layer 引用的是图层组中的图层,则所插入的图层将添加到该图层组中。因为 reference_layer 为必需参数,所以无法使用 insert_layer 将图层添加到空地图或空图层组中。使用 addLayer 或 addLayerToGroup 方法将图层或图层集合分别添加到空地图或空图层组中。
已插入的图层可以引用同一工程或单独工程中的现有图层,或引用磁盘上的图层文件(.lyr 或 .lyrx)。图层可以引用单个图层、含有多个子图层的图层组,或根级别的图层或图层组的集合(如果引用 .lyrx 文件)。有关图层文件的详细信息,请参阅 LayerFile。
添加图层后,图层在内容列表 (TOC) 中的显示方式取决于源图层及其显示方式。例如,在 TOC 中,有些图层完全折叠且不显示其符号。此设置内置在图层中。如果图层折叠且保存在图层文件中,然后被添加到地图中,则通过 insertLayer 添加该图层时,图层在新地图中将显示为折叠状态。
listBookmarks ({wildcard})
参数 | 说明 | 数据类型 |
wildcard | 通配符基于书签名称且不区分大小写。星号 (*) 和字符的组合可用于帮助限制生成的列表。 (默认值为 None) | String |
数据类型 | 说明 |
List | listBookmarks 方法始终返回 Python 列表对象,即使仅返回一个已损坏图层或表。 |
返回 Map 中的 bookmark 对象的 Python 列表。
listBrokenDataSources ()
数据类型 | 说明 |
List |
listBrokenDataSources 方法始终返回 Python 列表对象,即使仅返回一个已损坏图层或表。
listLayers ({wildcard})
参数 | 说明 | 数据类型 |
wildcard | 通配符基于图层名称且不区分大小写。星号 (*) 和字符的组合可用于帮助限制生成的列表。 (默认值为 None) | String |
数据类型 | 说明 |
List | 返回地图中的 Layer 对象的 Python 列表。 |
返回存在于地图中的 Layer 对象的 Python 列表。ListLayers 始终返回列表对象,即使仅返回一个表。
地图中可以存在名称相同的图层。在这种情况下,可能需要使用其他属性来隔离特定图层。例如,图层的 datasource 或 definitionQuery 属性可用来执行此操作。理想状态为地图中的所有图层名称均唯一。
listTables ({wildcard})
参数 | 说明 | 数据类型 |
wildcard | 通配符基于图层名称且不区分大小写。星号 (*) 和字符的组合可用于帮助限制生成的列表。 (默认值为 None) | String |
数据类型 | 说明 |
List | 地图中的 Table 对象的 Python 列表。 |
返回存在于地图中的 Table 对象的 Python 列表。ListTables 始终返回列表对象,即使仅返回一个表。
地图中可以存在名称相同的表。在这种情况下,可能需要使用其他属性来隔离特定图层。例如,表的 datasource 或 definitionQuery 属性可用来执行此操作。理想状态为地图中的所有表名称均唯一。
moveLayer (reference_layer, move_layer, {insert_position})
参数 | 说明 | 数据类型 |
reference_layer | 表示可确定新图层移动位置的现有图层的 Layer 对象。 | Layer |
move_layer | 对 Layer 对象(表示要移动的图层)的引用。 | Layer |
insert_position | 此常数用于确定移动的图层相对于参考图层的放置位置。
(默认值为 BEFORE) | String |
moveLayer 方法将用于移动地图中的图层,同时还可以用于在同一地图内将图层移入或移出图层组。move_layer 和 reference_layer 必须位于同一地图内。不能将图层从一个地图移动到另一个地图中,即使在同一工程中也不可以。使用 addLayer、addLayerToGroup 或 insertLayer 代替。
openView ()
如果地图视图尚未打开,或者应用程序中的另一个视图处于活动状态,则此方法将非常有用。 该方法将创建一个缩放至其默认范围的地图视图并将其激活。 在打开新视图之前,要关闭其他现有视图,请使用 ArcGISProject closeViews 方法。
可以通过以下两种技术来控制地图视图的所需范围: 首先,在打开视图之前,可以为地图设置 defaultCamera。 其次,在打开视图之后,可以更改 MapView 照相机范围。
注:
此方法旨在使用脚本工具、Notebook 或 Python 窗口在应用程序中运行。 如果在应用程序之外运行该方法,则其将无效。
removeLayer (remove_layer)
RemoveLayer 将从特定地图中移除单个图层或图层组。如果有多个图层满足条件,则仅移除第一个图层,除非脚本会遍历返回列表中的每个图层。
removeTable (remove_table)
RemoveTable 将从特定地图中移除单个表。如果有多个表满足条件,则仅移除第一个表,除非脚本会遍历返回列表中的每个表。
setDefinition (definition_object)
参数 | 说明 | 数据类型 |
definition_object | 使用 getDefinition 最初检索的已修改 CIM 定义对象。 | Object |
有关使用 CIM 和示例的详细信息,请参阅 Python CIM 访问。
updateConnectionProperties (current_connection_info, new_connection_info, {auto_update_joins_and_relates}, {validate}, {ignore_case})
参数 | 说明 | 数据类型 |
current_connection_info | A string that represents the workspace path or a Python dictionary that contains connection properties to the source you want to update. If an empty string or None is used in current_connection_info, all connection properties will be replaced with the new_workspace_info, depending on the value of the validate parameter. | String |
new_connection_info | A string that represents the workspace path or a Python dictionary that contains connection properties with the new source information. | String |
auto_update_joins_and_relates | If set to True, the updateConnectionProperties method will also update the connections for associated joins or relates. (默认值为 True) | Boolean |
validate | If set to True, the connection properties will only be updated if the new_connection_info value is a valid connection. If it is not valid, the connection will not be replaced. If set to False, the method will set all connections to match the new_connection_info value, regardless of a valid match. In this case, if a match does not exist, the data sources would be broken. (默认值为 True) | Boolean |
ignore_case | Determines whether searches will be case sensitive. By default, queries are case sensitive. To perform queries that are not case sensitive, set ignore_case to True. (默认值为 False) | Boolean |
有关更详细的说明、参数信息、情景和代码示例,请参阅更新和修复数据源。
updateTransformations (transformations)
参数 | 说明 | 数据类型 |
transformations | The dictionary keys are defined below.
| Dictionary |
要更新地图的变换,必须设置整个变换集。 不能一次添加、移除或更新单一变换。 可以从头开始构建新字典,或可以修改 transformations 属性返回的字典,然后使用 updateTransformations 方法将整个字典推送回地图。
代码示例
下面的脚本引用了图层文件并将图层插入地图中已存在的图层上方:
import arcpy
aprx = arcpy.mp.ArcGISProject(r"C:\Projects\YosemiteNP\Yosemite.aprx")
insertLyr = arcpy.mp.LayerFile(r"C:\Projects\YosemiteNP\LayerFiles\Ranger Stations.lyrx")
m = aprx.listMaps("Yosemite National Park")[0]
refLyr = m.listLayers("Points of Interest")[0]
m.insertLayer(refLyr, insertLyr, "BEFORE")
aprx.saveACopy(r"C:\Projects\YosemiteNP\Yosemite_updated.aprx")
以下脚本将设置当前位于工程中的所有地图和场景的 defaultCamera 属性。 将从具有所需查看器设置的现有地图框中复制照相机属性。 所有地图将从 2D 地图框中进行复制,所有场景查看器设置将从 3D 地图框中进行复制。
import arcpy
aprx = arcpy.mp.ArcGISProject(r"C:\Projects\YosemiteNP\Yosemite.aprx")
lyt = aprx.listLayouts("Main Attractions*")[0]
mpFrm2D = lyt.listElements("mapframe_element", "Yose*")[0]
mpFrm3D = lyt.listElements("mapframe_element", "Inset1")[0]
for m in aprx.listMaps():
if m.mapType == "MAP":
m.defaultCamera = mpFrm2D.camera
elif m.mapType == "SCENE":
m.defaultCamera = mpFrm3D.camera
aprx.save()
del aprx
下面的脚本使用了关键字 current,因此可从 Python 窗口运行此脚本。 该脚本用于新建地图并向其添加新图层。 将更新地图的默认照相机属性,该属性用于控制新打开的视图的范围。 然后将地图视图导出为 PDF。 新建的地图随即从工程中移除。
aprx = arcpy.mp.ArcGISProject("CURRENT")
#Create a copy of an existing map
newMap = aprx.createMap("Ranger Stations", "Map")
#Add ranger stations layer file
lyrx1 = arcpy.mp.LayerFile(r"C:\Projects\YosemiteNP\LayerFiles\Park Boundary.lyrx")
newMap.addLayer(lyrx1)
lyrx2 = arcpy.mp.LayerFile(r"C:\Projects\YosemiteNP\LayerFiles\Ranger Stations.lyrx")
newMap.addLayer(lyrx2)
#Close any current map or layout views
aprx.closeViews("MAPS_AND_LAYOUTS")
#Set the default map camera to the extent of the park boundary before opening the new view
#default camera only affects newly opened views
lyr = newMap.listLayers("*Park Boundary")[-1]
newMap.defaultCamera.setExtent(arcpy.Describe(lyr).extent)
newMap.openView()
#export the newly opened active view to PDF, then delete the new map
mv = aprx.activeView
mv.exportToPDF(r"C:\Temp\RangerStations.pdf", width=700, height=500, resolution=96)
aprx.deleteItem(newMap)