MapSeries

摘要

提供对 ArcGIS Pro 工程中布局的空间地图系列的访问权限。

说明

必须先在 ArcGIS Pro 工程的布局中创作和启用地图系列,然后才能在 arcpy.mp 中进行引用。

注:

无法使用 arcpy.mp 创建地图系列。

除了为布局中的地图系列提供方法和属性外,MapSeries 类还可用于访问地图系列中的各个页面。例如,您可能遇见以下情况,即需要使用自定义逻辑格式化或基于多个字段构造文本元素的字符串信息。在此情况中,可在启用地图系列的情况下创作布局,arcpy.mp 可在处理每个页面时处理自定义文本元素字符串需求。

可以使用 exportToPDF 方法将地图系列中的页面导出为 PDF。导出地图系列时,将支持与地图系列关联的所有动态元素。例如,文本元素图例表格框图表框等。要创建完整的地图册,可使用 PDFDocument 类将输出 PDF 文件插入其他 PDF 文件(例如,标题页面或报表)。

有时,需要将地图系列导出为 PDF 以外的其他输出格式,例如 PNG。请参阅下面的第二个代码样本,其中展示了如何循环遍历地图系列中的每个页面并导出为 .png 文件。

ArcGIS Pro 支持两种类型的地图系列:空间地图和书签。MapSeries 类仅支持与空间地图系列搭配使用。如果针对布局启用了书签地图系列,mapSeries 属性将返回 NoneType。要模拟书签地图系列的行为,请参阅下面的代码示例 4。

属性

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

表示已启动地图系列的布局的活动页面或当前页面。

注:

如果使用字符串定义的字段来设置页码,则可以将 currentPageNumber 设置为字符串,例如 currentPageNumber ='iv'

Long
enabled
(可读写)

表示地图系列的启动状态。

提示:

在更改地图系列属性之前,应检查已启用是否设置为 True

Boolean
indexLayer
(只读)

返回对启用了地图系列的布局中索引图层的引用。

Layer
mapFrame
(只读)

返回对索引图层所在的地图框的引用。

MapFrame
pageCount
(只读)

返回已启用地图系列的布局的总页数。 这与索引图层中的要素数量相对应。

Long
pageNameField
(只读)

返回字段对象,它表示设置地图系列时在索引要素类中使用的字段。

Field
pageRow
(只读)

返回提供当前索引要素属性的访问权限的对象。 要返回属性值,请输入一个点,后跟字段名称。 例如,value = lyt.mapSeries.pageRow.FIELD_NAME

Row
selectedIndexFeatures
(只读)

返回排序页码的 Python 列表,它们表示启用了地图系列的布局中选定的索引图层要素。

List

方法概述

方法说明
exportToPDF (out_pdf, {page_range_type}, {page_range_string}, {multiple_files}, {resolution}, {image_quality}, {compress_vector_graphics}, {image_compression}, {embed_fonts}, {layers_attributes}, {georef_info}, {jpeg_compression_quality}, {clip_to_elements}, {show_selection_symbology}, {output_as_image}, {embed_color_profile})

将启用了地图系列的布局的一组指定页面导出为便携式文档格式 (PDF) 文件。

getPageNumberFromName (page_name)

基于页面名称返回“地图系列”页码。

refresh ()

刷新现有地图系列

方法

exportToPDF (out_pdf, {page_range_type}, {page_range_string}, {multiple_files}, {resolution}, {image_quality}, {compress_vector_graphics}, {image_compression}, {embed_fonts}, {layers_attributes}, {georef_info}, {jpeg_compression_quality}, {clip_to_elements}, {show_selection_symbology}, {output_as_image}, {embed_color_profile})
参数说明数据类型
out_pdf

用于表示输出导出文件的路径和文件名的字符串。

String
page_range_type

指定页面将如何打印的字符串值。

  • ALL导出所有页面。
  • CURRENT导出活动页面或当前页面。
  • RANGE仅导出 page_range_string 参数中列出的页面。
  • SELECTED导出选定的索引图层要素/页面。

(默认值为 ALL)

String
page_range_string

如果使用 page_range_type 参数中的 RANGE 选项,用于标识要导出的页面的字符串(例如:1、3、5-12)。如果使用任何其他 page_range_type 值,则将忽略 page_range_string 值。

String
multiple_files

用于控制如何创建输出 PDF 文件的字符串。默认情况下,所有页面都将导出为单个多页文档。默认设置为 PDF_SINGLE_FILE

  • PDF_MULTIPLE_FILES_PAGE_NAME将每个地图系列页面导出到单个文件,并将页面名称追加到文件名称。例如,Output.PDF 将变为 Output_LakeErie.PDF
  • PDF_MULTIPLE_FILES_PAGE_NUMBER将每个地图系列页面导出到单个文件,并将页码追加到文件名称。例如,Output.PDF 将变为 Output_1.PDF
  • PDF_SINGLE_FILE导出为多页、单个文件文档。

(默认值为 PDF_SINGLE_FILE)

String
resolution

用于定义导出文件分辨率的整数值,单位为每英寸点数 (dpi)。

(默认值为 96)

Integer
image_quality

定义输出图像质量的字符串。

  • BEST输出图像质量的重采样比为 1
  • BETTER输出图像质量的重采样比为 2
  • NORMAL输出图像质量的重采样比为 3
  • FASTER输出图像质量的重采样比为 4
  • FASTEST输出图像质量的重采样比为 5

(默认值为 BEST)

String
compress_vector_graphics

用于控制输出文件的矢量和文本部分压缩的布尔值。图像压缩单独定义。

(默认值为 True)

Boolean
image_compression

用于定义在输出文件中压缩图像或栅格数据时使用的压缩方案的字符串。

  • ADAPTIVE自动为页面中的每个图像选择最佳压缩类型。JPEG 适用于包含许多唯一颜色的较大图像。DEFLATE 适用于所有其他图像。
  • JPEG有损数据压缩。
  • DEFLATE无损数据压缩。
  • LZWLempel-Ziv-Welch 为无损数据压缩。
  • NONE不应用压缩。
  • RLE游程编码压缩。

(默认值为 ADAPTIVE)

String
embed_fonts

用于控制导出文件中的字体嵌入的布尔值。当在未安装所需字体的计算机上查看文档时,可通过字体嵌入正确显示文本和字符标记。

(默认值为 True)

Boolean
layers_attributes

用于控制导出文件中包含的 PDF 图层和 PDF 对象数据(属性)的字符串。

  • LAYERS_ONLY仅导出 PDF 图层。
  • LAYERS_AND_ATTRIBUTES导出 PDF 图层和要素属性。
  • NONE不应用设置。

(默认值为 LAYERS_ONLY)

String
georef_info

用于将每个地图框的坐标系信息导出到输出 PDF 文件中的布尔值。

(默认值为 True)

Boolean
jpeg_compression_quality

image_compression 设置为 ADAPTIVEJPEG 时,用于控制压缩质量值的数字。有效范围为 1 到 100。jpeg_compression_quality 为 100 时可提供最佳图像质量,但会创建较大的导出文件。推荐范围为 70 到 90。

(默认值为 80)

Integer
clip_to_elements

如果设置为 True,则布局将被裁剪为包含所有布局元素的最小边界框。

(默认值为 False)

Boolean
show_selection_symbology

用于控制选择符号系统是否应显示在输出中的布尔值。

(默认值为 False)

Boolean
output_as_image

如果设置为 True,则矢量内容可以另存为图像。如果地图或布局包含具有高密度顶点的矢量图层,则选择此选项可减小输出文件的大小。如果导出为 PDF 并将此选项设置为 True,则无法在输出中查看 PDF 图层。

(默认值为 False)

Boolean
embed_color_profile

如果设置为 True,则颜色配置文件信息将嵌入在图像的元数据中。

(默认值为 True)

Boolean

PDF 文件可在不同的平台上实现一致的查看和打印效果。它们通常用于在 Web 上分发文档,并且此格式现在为内容传送的标准交换格式。PDF 文件在许多图形应用程序中均可编辑,并且它还保留了地图图层的注记、标注和属性数据。PDF 导出支持字体嵌入,即使在用户尚未安装 Esri 字体时,也可以正确显示符号系统。

getPageNumberFromName (page_name)
参数说明数据类型
page_name

与用于设置“地图系列”的 Name 字段对应的索引图层中的页码。

String

许多“地图系列”属性和方法都使用页码值,而不使用用于创建索引图层的页面文字名称。getPageNumberFromName 方法提供了一种用于获取给定页面名称的页码的机制。

ms = layout.mapSeries
pageNumber = ms.getPageNumberFromName("HarborView")
ms.currentPageNumber = pageNumber
refresh ()

如果发生以下任何一种情况,请使用 refresh 方法:

  • 在索引图层中添加了或删除了要素。
  • 对索引字段值进行了更新。
  • 数据框范围因缩放、平移或更改地图比例而发生了变化。
地图系列将保留原始设置,直到执行了 refresh 方法,或工程被保存并重新打开。

代码示例

MapSeries 示例 1

下面的脚本将检查是否存在地图系列,然后将其中的两个页面导出为 PDF。

import arcpy
import os
import sys
relpath = os.path.dirname(sys.argv[0])

p = arcpy.mp.ArcGISProject(relpath + "\\MapSeries\\US_States.aprx")
l = p.listLayouts()[0]
if not l.mapSeries is None:
    ms = l.mapSeries
    if ms.enabled:
        ms.currentPageNumber = ms.getPageNumberFromName("Rhode Island") 
        ms.exportToPDF(relpath + "\\Output\\Ex1_RI.pdf", "CURRENT", resolution=300)
        ms.currentPageNumber = ms.getPageNumberFromName("Washington") 
        ms.exportToPDF(relpath + "\\Output\\Ex1_WA.pdf", "CURRENT")
MapSeries 示例 2

以下脚本将地图系列的每一页导出到单个 PNG 文件中,并将索引要素的页面名称作为输出文件名的一部分使用:

import arcpy, os, sys
relpath = os.path.dirname(sys.argv[0])

p = arcpy.mp.ArcGISProject(relpath + "\\MapSeries\\US_States.aprx")
l = p.listLayouts()[0]
if not l.mapSeries is None:
  ms = l.mapSeries
  if ms.enabled:
    for pageNum in range(1, ms.pageCount + 1):
      ms.currentPageNumber = pageNum
      print("Exporting {0}".format(ms.pageRow.STATE_NAME))
      pageName = ms.pageRow.STATE_NAME
      l.exportToPNG(os.path.join(relpath, "Output", f"Ex2_{ms.pageRow.STATE_NAME}.png"))
MapSeries 示例 3

以下脚本只会将所选页面导出为单独的多页 PDF 文件:

import arcpy
import os
import sys
relpath = os.path.dirname(sys.argv[0])

p = arcpy.mp.ArcGISProject(relpath + "\\MapSeries\\US_States.aprx")
l = p.listLayouts()[0]

if not l.mapSeries is None:
    ms = l.mapSeries
    if ms.enabled:
        ms = l.mapSeries
        indexLyr = ms.indexLayer
        arcpy.SelectLayerByAttribute_management(indexLyr, "NEW_SELECTION", "SUB_REGION = 'New England'")
        ms.exportToPDF(relpath + "\\Output\\Ex3_SelectedFeatures.pdf", "SELECTED")
MapSeries 示例 4(书签地图系列)

如前所述,MapSeries 类仅支持空间地图系列。但是,使用以下代码示例,无需使用 MapSeries 类即可模拟书签地图系列。首先,需要使用 listBookmarks 方法引用地图的书签。其次,可使用 zoomToBookmark 方法设置 MapFrame 的照相机信息。最后,需要使用其众多导出功能之一导出布局。将针对最终输出所需的每个页面重复此过程。

import arcpy, os, sys
relpath = os.path.dirname(sys.argv[0])

p = arcpy.mp.ArcGISProject(os.path.join(relpath, "Bookmarks.aprx"))
m = p.listMaps('Great Lakes')[0]
lyt = p.listLayouts('GreatLakes')[0]
mf = lyt.listElements('MAPFRAME_ELEMENT')[0]
for bk in m.listBookmarks():
    mf.zoomToBookmark(bk)
    lyt.exportToPNG(os.path.join(relpath, f'{bk.name}.png'))