DataDrivenPages (arcpy.mapping)

Резюме

Предоставляет доступ к методам и свойствам для управления отдельными страницами документа карт с включенной многостраничной компоновкой.

Обсуждение

Серии карт можно создавать без скриптов с помощью набора инструментов Многостраничные компоновки (Data Driven Pages) в ArcMap. Можно сказать и наоборот: серии карт можно создать полностью с помощью скриптов arcpy.mapping без применения пользовательского интерфейса многостраничной компоновки в ArcMap, но есть причины для объединения обоих способов. Панель инструментов многостраничной компоновки ArcMap может не предоставлять достаточно опций для создания "идеальной" серии карт, но наследуемое поведение документа карта с поддержкой многостраничной компоновки может сэкономить множество строк кода, так как экстенты страницы, масштабы, динамический и текст и другое управляются в документе карты автоматически, и вам не нужно писать для этого код.

В качестве примера можно привести сценарий, в котором строковые данные текстового элемента нужно отформатировать с помощью пользовательской логики или сформировать на основе нескольких полей. Может быть необходимо реализовать все в arcpy.mapping просто из-за такого простого требования. В этом случае документ карты все равно можно создать с включенной многостраничной компоновки, а arcpy.mapping может обработать пользовательский текстовый элемент. В примере кода ниже представлен данный сценарий.

Для указания ссылки на многостраничные компоновки в arcpy.mapping их сначала нужно создать в документе карты (.mxd) с помощью панели инструментов многостраничной компоновки в ArcMap.

В классе DataDrivenPages всего один метод, exportToPDF, но это не значит, что нельзя создать другие файлы экспорта. См. первый пример кода ниже.

Дополнительную информацию о многостраничной компоновке см. в следующих разделах:

Свойства

СвойствоОбъяснениеТип данных
currentPageID
(чтение и запись)

Свойство currentPageID представляет активную или текущую страницу документа карты (.mxd) с включенной многостраничной компоновкой. Это значение отображается в панели инструментов многостраничной компоновки, если выбрана опция Показать страницу (Show Page). Оно представляет x от x от y.

Long
dataFrame
(только чтение)

Возвращает ссылку на фрейм данных, в котором расположен индексный слой в документе карты с многостраничной компоновкой.

DataFrame
indexLayer
(только чтение)

Возвращает ссылку на индексный слой в документе карты с многостраничной компоновкой.

Layer
pageCount
(только чтение)

Свойство pageCount возвращает общее число страниц документа карты (.mxd) с включенной многостраничной компоновкой. Это значение отображается в панели инструментов многостраничной компоновки, если выбрана опция Показать страницу (Show Page). Оно представляет y от x от y.

Long
pageNameField
(только чтение)

Возвращает объект поля, представляющий поле, используемое в классе индексных объектов при настройке многостраничной компоновки.

Field
pageRow
(только чтение)

Используйте pageRow для получения объекта строки индексного слоя для активной или текущей страницы. Поля индексного слоя можно читать и/или изменять при необходимости.

Row
selectedPages
(только чтение)

Возвращает список Python индексных номеров, представляющий выбранные объекты индексного слоя в документе карты с многостраничной компоновкой.

List

Обзор метода

МетодОбъяснение
exportToPDF (out_pdf, {page_range_type}, {page_range_string}, {multiple_files}, {resolution}, {image_quality}, {colorspace}, {compress_vectors}, {image_compression}, {picture_symbol}, {convert_markers}, {embed_fonts}, {layers_attributes}, {georef_info}, {jpeg_compression_quality}, {show_selection_symbology})

Экспортирует указанные страницы в многостраничный документ PDF для документа карты (.mxd) с многостраничной компоновкой (Data Driven Pages)

getPageIDFromName (page_name)

Возвращает значения индекса Многостраничной компоновки (Data Driven Pages) на основе имени страницы

printPages ({printer_name}, {page_range_type}, {page_range_string}, {out_print_file}, {show_selection_symbology})

Печатает указанные страницы из документа карты с Data Driven Pages (.mxd) на заданном принтере

refresh ()

Обновляет существующий набор Многостраничных компоновок (Data Driven Pages)

Методы

exportToPDF (out_pdf, {page_range_type}, {page_range_string}, {multiple_files}, {resolution}, {image_quality}, {colorspace}, {compress_vectors}, {image_compression}, {picture_symbol}, {convert_markers}, {embed_fonts}, {layers_attributes}, {georef_info}, {jpeg_compression_quality}, {show_selection_symbology})
ПараметрОбъяснениеТип данных
out_pdf

Строка, представляющая путь и имя выходного файла для экспорта.

String
page_range_type

Строковое значение, указывающее, как страницы будут печататься (аналогично закладке Страницы (Pages) в диалоговом окне Экспорт карты (Export Map) ArcMap для документов PDF.

  • ALLЭкспортируются все страницы.
  • CURRENTЭкспортируется активная страница.
  • RANGEЭкспортируются только страницы, указанные в параметре page_range_string.
  • SELECTEDЭкспортируются выбранные объекты слоя индекса/страницы.

(Значение по умолчанию — ALL)

String
page_range_string

Строка, определяющая страницы для печати, если используется опция RANGE в параметре page_range_type (например, 1, 3, 5-12).

String
multiple_files

Опция для управления созданием PDF. По умолчанию все страницы экспортируются в один многостраничный документ. Можно также выбрать экспорт в отдельные одностраничные документы PDF с помощью двух различных опций.

  • PDF_MULTIPLE_FILES_PAGE_NAMEЭкспорт одностраничных документов с использованием имени страницы для имени выходного файла.
  • PDF_MULTIPLE_FILES_PAGE_INDEXЭкспорт одностраничных документов с использованием значения индекса для имени выходного файла.
  • PDF_SINGLE_FILEЭкспорт многостраничного документа.

(Значение по умолчанию — PDF_SINGLE_FILE)

String
resolution

Целое число, определяющее разрешение файла для экспорта в точках на дюйм (dpi).

(Значение по умолчанию — 300)

Integer
image_quality

Строка, определяющая качество выходного изображения.

  • BESTКачество выходного изображения с коэффициентом сжатия 1
  • BETTERКачество выходного изображения с коэффициентом сжатия 2
  • NORMALКачество выходного изображения с коэффициентом сжатия 3
  • FASTERКачество выходного изображения с коэффициентом сжатия 4
  • FASTESTКачество выходного изображения с коэффициентом сжатия 5

(Значение по умолчанию — BEST)

String
colorspace

Строка, определяющая пространство цвета файла для экспорта.

  • CMYKМодель CMYK
  • RGBМодель RGB

(Значение по умолчанию — RGB)

String
compress_vectors

Логический параметр, управляющий сжатием векторных и текстовых частей выходного файла. Сжатие изображения определяется отдельно.

(Значение по умолчанию — True)

Boolean
image_compression

Строка, которая определяет схему сжатия, используемую для сжатия изображения или растровых данных в выходном файле.

  • АдаптивноеАвтоматически выбирает лучший тип сжатия для каждого изображения на странице. JPEG используется для крупных изображений со множеством уникальных цветов. DEFLATE используется для всех других изображений.
  • JPEGСжатие данных с потерями.
  • DEFLATEСжатие данных без потерь.
  • LZWLempel-Ziv-Welch, сжатие данных без потерь
  • Нет сжатия (NONE)Нет сжатия данных
  • RLEСжатие с кодированием по длинам серий

(Значение по умолчанию — ADAPTIVE)

String
picture_symbol

Строка, определяющая, будут ли маркеры-рисунки и заполнения рисунком преобразованы в векторные или растровые данные.

  • RASTERIZE_BITMAP Растеризовать слои с маркерами/заливками на основе рисунков .bmp.
  • RASTERIZE_PICTUREРастеризовать слои с маркерами/заливками на основе любых рисунков.
  • VECTORIZE_BITMAPВекторизовать слои с маркерами/заливками на основе рисунков .bmp.

(Значение по умолчанию — RASTERIZE_BITMAP)

String
convert_markers

Логический параметр, управляющий преобразованием символов маркеров на основе символов в полигоны. Позволяет правильно отображать символы, если шрифт символов недоступен или не может быть внедрен. Но если установить для этого параметра значение True, внедрение шрифта отключается для всех маркеров символов на основе текстовых символов, что может привести к изменению их внешнего вида.

(Значение по умолчанию — False)

Boolean
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 задано значение ADAPTIVE или JPEG. Допустимый диапазон: от 1 до 100. Если значение jpeg_compression_quality равно 100, это обеспечивает наилучшее качество изображений, но при экспорте создаются крупные файлы. Рекомендованный диапазон находится между 70 и 90.

(Значение по умолчанию — 80)

Integer
show_selection_symbology

Логический параметр, управляющие тем, следует ли отображать символы выборки в выходных данных.

(Значение по умолчанию — False)

Boolean

Многостраничные компоновки экспортируются в многостраничный документ PDF. В документе карты должна быть включена многостраничная компоновка. PDF формат создан с учетом возможности работы на разных платформах. Эти файлы часто используются для распространения документов через Интернет и становятся стандартным форматом для обмена документацией. Файлы ArcMap PDF можно редактировать во многих графических приложениях, здесь сохраняются аннотации, надписи и данные атрибутов слоев карты из таблицы содержания ArcMap. Экспорт PDF из ArcMap поддерживает встроенные шрифты, поэтому даже если у пользователей не установлены шрифты Esri, символы все равно будут отображаться корректно. При экспорте из ArcMap в PDF можно задавать цвета в значениях CMYK или RGB.

Подробное описание экспорта карт см. в разделе Экспорт карты в справке ArcGIS for Desktop.

getPageIDFromName (page_name)
ПараметрОбъяснениеТип данных
page_name

Значение в индексном слое, соответствующее полю Имя (Name), которое использовалось при создании Многостраничной компоновки (Data Driven Pages)

String

Многие свойства и методы Многостраничной компоновки используют внутреннее значение индекса, а не буквенные имена страниц, которые использовались при создании индексного слоя. Значения индекса автоматически генерируются на основе полей Имя (Name) и Сортировать (Sort). Иногда бывает трудно понять, какое значение индекса представляет данную страницу. Метод getPageIDFromName позволяет соотнести индекс с именем.

pageID = mxd.dataDrivenPages.getPageIDFromName("HarborView")
mxd.dataDrivenPages.currentPageID = pageID
printPages ({printer_name}, {page_range_type}, {page_range_string}, {out_print_file}, {show_selection_symbology})
ПараметрОбъяснениеТип данных
printer_name

Строка, представляющая имя принтера на локальном компьютере.

(Значение по умолчанию — None)

String
page_range_type

Строковое значение, указывающее, как страницы будут печататься (аналогично закладке Страницы (Pages) в диалоговом окне Экспорт карты (Export Map) ArcMap для документов PDF.

  • ALLЭкспортируются все страницы.
  • CURRENTЭкспортируется активная страница.
  • RANGEЭкспортируются только страницы, указанные в параметре page_range_string.
  • SELECTEDЭкспортируются выбранные объекты слоя индекса/страницы.

(Значение по умолчанию — ALL)

String
page_range_string

Строка, определяющая страницы для печати, если используется опция RANGE в параметре page_range_type (например, 1, 3, 5-12).

String
out_print_file

Часть, содержащая имя выходного файла для печати. Создаваемый формат зависит от принтера. Если вы используете принтер PostScript, форматом будет PostScript, при этом рекомендуется указать расширение .ps. Если вы используете принтер Windows, укажите расширение .prn.

(Значение по умолчанию — None)

String
show_selection_symbology

Логический параметр, управляющие тем, следует ли отображать символы выборки в выходных данных.

(Значение по умолчанию — False)

Boolean

Функция ListPrinterNames() позволяет легко получить строку для параметра printer_name.

ПримечаниеПримечание:

Печать с использованием драйвера не поддерживается в ArcGIS for Server. Для задач печати Data Driven Pages в виде сервиса геообработки, используйте функцию exportToPDF из класса DataDrivenPages. Более подробная информация о печати в веб-приложениях находится в разделе Печать в веб-приложениях.

Следующий скрипт печатает определенный набор многостраничных компоновок на локальном принтере:

import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\ParcelAtlas.mxd")
mxd.dataDrivenPages.printPages(r"\\olyfile\OLYCanon", "RANGE", "1,3,5-12")
refresh ()

Метод обновления понадобится вам в следующих случаях: (1) в индексный слой добавлены или из индексного слоя удалены объекты; (2) в значения полей Сортировать (Sort) или Имя (Name) внесены изменения; (3) экстент фрейма данных изменен в результате смещения изображения или изменения масштаба карты или (4) изменено какое-либо поле, используемое Многостраничной компоновкой для объекта индексного слоя, на основании которого определяется текущий географический экстент. До тех пор, пока вы не примените метод обновления, Многостраничная компоновка будет сохранять в этих случаях исходный набор настроек.

Пример кода

Пример DataDrivenPages 1

Следующий скрипт экспортирует каждую страницу серии многостраничных компоновок в отдельный PNG-файл.

import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\ParcelAtlas.mxd")
for pageNum in range(1, mxd.dataDrivenPages.pageCount + 1):
    mxd.dataDrivenPages.currentPageID = pageNum
    print "Exporting page {0} of {1}".format(str(mxd.dataDrivenPages.currentPageID), str(mxd.dataDrivenPages.pageCount))
    arcpy.mapping.ExportToPNG(mxd, r"C:\Project\OutPut\ParcelAtlas_Page" + str(pageNum) + ".png")
del mxd
Пример DataDrivenPages 2

Следующий скрипт печатает только набор страниц карты с помощью списка имен страниц, а также изменяет текстовый элемент названия страницы с помощью логики, что можно реализовать только с использованием скриптов (другими словами, строка названия создается на основе значения атрибута). Скрипт проходит в цикле по каждой именованной странице и задает параметр currentPageID соответствующим образом. Затем он извлекает значение из поля в слое индексов с именем TRS. Затем обрабатываются значения, удаляются передние нули, формируется текстовый элемент строки названия, а результаты передаются на принтер.

import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\ParcelAtlas.mxd")
pageNameList = ["MPB", "PJB", "AFB", "ABB"]
for pageName in pageNameList:
    pageID = mxd.dataDrivenPages.getPageIDFromName(pageName)
    mxd.dataDrivenPages.currentPageID = pageID
    fieldValue = mxd.dataDrivenPages.pageRow.TSR  #example values from a field called TSR are "080102", "031400"
    TRSTitle = arcpy.mapping.ListLayoutElements(MXD, "TEXT_ELEMENT", "TRSTitle")[0]
    township, range, section = fieldValue[:2].strip("0"), fieldValue[2:-2].strip("0"), fieldValue[-2:].strip("0")
    if section != "": 
        TRSTitle.text = "Section {0} T.{1}N. R.{2}W. W.M.".format(section, township, range)
    else:
        TRSTitle.text = "T.{0}N. R.{1}W. W.M.".format(township, range)
    mxd.dataDrivenPages.printPages(r"\\olyfile\SUITE_303", "CURRENT")
del mxd
Пример DataDrivenPages 3

Следующий скрипт экспортирует только страницы с выбранными индексами (1-10) в отдельные файлы PDF. К имени полученных файлов PDF будет добавлен номер индекса.

import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\ParcelAtlas.mxd")
ddp = mxd.dataDrivenPages
indexLayer = ddp.indexLayer
arcpy.SelectLayerByAttribute_management(indexLayer, "NEW_SELECTION",  
                                        '"PageNumber" >= 1 AND "PageNumber" <= 10')
for indexPage in ddp.selectedPages:
  ddp.currentPageID = indexPage
  ddp.exportToPDF(r"C:\Project\Output\Page" + str(indexPage) + ".pdf", "CURRENT")

del mxd
9/11/2013