Начало работы с arcpy.mapping (arcpy.mapping)

Уровень сложности: Начальный Требования к данным: Используйте собственные данные

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

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

Единственное требование — необходим файл векторного слоя (.lyr).

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

окно Python

Самый простой способ научиться работать с arcpy.mapping – использовать окно Python. Окно Python является частью платформы ArcMap и предоставляет возможности автозавершения, чтобы вы могли легко читать имена и видеть порядок параметров функций. Далее показано, как настроить окно Python для обеспечения удобства работы пользователей и достижения целей, описанных в этом документе.

Шаги:
  1. В ArcMap откройте новый, пустой документ карты.
  2. Щелкните Геообработка (Geoprocessing) > Python.
  3. Если вы открываете окно Python впервые, оно будет отображено поверх приложения. Далее требуется закрепить окно Python и изменить расположение справки.

  4. Щелкните заголовок окна Python и удерживайте левую кнопку мыши.
  5. Перетащите окно Python к элементу закрепления в нижней части приложения ArcMap и отпустите кнопку.
  6. Щелкните область кода (с символами >>>) окна Python. В области справки справа должен появиться текст справки.
  7. Щелкните область кода правой кнопкой мыши и выберите Размещение справки (Help Placement) > Снизу (Bottom). Теперь справка должна отображаться под областью кода. Может потребоваться отрегулировать разделитель двух областей, чтобы было достаточно пространства для ввода кода и просмотра справки.
  8. Теперь введите следующий оператор (помните, что Python учитывает регистр):
  9. >>> arcpy.mapping.ExportToPDF(
    
    Окно Python должно выглядеть как на рисунке ниже. Выделяется первый обязательный параметр, map_document. Если ввести запятую, выделяется второй параметр. Доступно всего два обязательных параметра: map_document и out_pdf. Необязательные параметры заключены в фигурные скобки ({}).
    Снимок экрана синтаксиса ExportToPDF
  10. Щелкните правой кнопкой мыши область кода и выберите команду Очистить все (Clear All), чтобы очистить область кода.

Указание ссылки на существующий документ карты

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

Существует два способа указания ссылки на документ карты. Первый заключается в выборе ссылки на документ на диске за счет указания пути к файлу .mxd. Если вы создаете скрипт, который будет выполняться за пределами среды ArcGIS, ссылку на документ карты необходимо указать с помощью пути. Второй способ ArcMap – указать ссылку на документ карты, который в данный момент загружен в приложение ArcMap (в этом случае это untitled.mxd). При работе в окне Python в ArcMap указание ссылки на загруженный документ карты более удобно, так как внесенные в него изменения можно видеть непосредственно в приложении. Далее показано, как указать ссылку на документ карты, загруженный в ArcMap.

Шаги:
  1. В окне Python введите следующую строку и нажмите клавишу ВВОД.
  2. >>> mxd = arcpy.mapping.MapDocument("CURRENT")
    
    Функция MapDocument возвращает ссылку на объект MapDocument в переменной mxd. Строка CURRENT – это ключевое слово, используемое для указания ссылки на текущий загруженный документ карты. Вместо CURRENT можно указать путь на документ карты.
  3. В окне Python введите следующее:
  4. >>> mxd.
    
    После ввода точки должен появиться длинный список методов и свойств, доступных для объекта MapDocument.
  5. В окне Python введите следующую строку и нажмите клавишу ВВОД.
  6. >>> mxd.author = "YOUR NAME GOES HERE"
    
    У объекта MapDocument есть свойство author. Просто задайте его значение как строку.
  7. В ArcMap щелкните Файл (File) > Свойства документа карты (Map Document Properties).
  8. После этого свойство author будет задано как строка. Вы только что непосредственно взаимодействовали с объектом MapDocument с помощью переменной mxd. В объекте MapDocument есть много других методов и свойств. Теперь вы сохраните внесенные изменения.
  9. Нажмите кнопку Отмена после завершения работы в диалоговом окне Свойства документа карты (Map Document Properties).
  10. В окне Python введите следующую строку и нажмите клавишу ВВОД.
  11. >>> mxd.save()
    
    Так как это несохраненный документ карты, откроется диалоговое окно с запросом для указания пути и имени файла. У метода save() нет параметров, но так как это метод, необходимо указать скобки. В реальности вы бы работали с уже существующим документом карты и вам не потребовалось бы использовать диалоговое окно сохранения. Чтобы проверить расположение сохраненного документа карты, попробуйте следующее:
  12. В окне Python введите следующую строку и нажмите клавишу ВВОД.
  13. >>> print mxd.filePath
    
    В области кода должен отобразиться путь:
    Снимок экрана результатов mxd.filePath в окне Python

Добавление файла слоя в документ карты

Теперь после получения ссылки на документ карты необходимо добавить файл слоя (.lyr) в документ карты. Это можно сделать с помощью функции AddLayer arcpy.mapping.

Шаги:
  1. В окне Python введите следующее:
  2. >>> arcpy.mapping.AddLayer(
    
    Снимок экрана синтаксиса AddLayer в окне Python
    Функция автозаполнения покажет, что существует два обязательных параметра. Первый из них – это ссылка на фрейм данных в документе карты. Второй – ссылка на добавляемый слой. Это может быть слой в документе карты или файле слоя. Третий параметр не является обязательным и он управляет расположением слоя в таблице содержания. Так как это первый и единственный слой, игнорируйте третий параметр и используйте значение по умолчанию.
    Перед добавлением слоя необходимо указать ссылку на соответствующие объекты. Сначала указывается фрейм данных.
  3. В окне Python нажмите клавишу BACKSPACE, чтобы удалить функцию AddLayer, введите следующую строку и нажмите клавишу ВВОД.
  4. >>> df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]
    
    Для функции ListDataFrames требуется ссылка на документ карты и, при необходимости, фильтр с групповым символом. Вы указываете полное имя фрейма данных для поиска. Вы также могли бы ввести такую строку, как "lay*".
    Все функции списка ArcPy возвращают объекты списка Python. Индекс элементов, возвращаемых в списке, начинается с нуля. Так как вы хотите, чтобы переменная df ссылалась на объект DataFrame, а не объект списка Python, необходимо добавить номер индекса после функции. Если добавить в конец функции [0], возвращается первый фрейм данных в списке. В нашем случае это единственный фрейм данных в списке. Если вы задаете уникальные имена для фреймов данных в документе карты и используете соответствующий групповой символ для изоляции элемента, всегда следует возвращать список только с одним элементом, тогда индекс [0] будет работать. Если в документе карты два фрейма данных и вы хотите сослаться на второй фрейм данных без использования группового символа, используйте [1] в конце функции, например df2 = arcpy.mapping.ListDataFrames(mxd)[1].
    Перед использованием функции AddLayer необходимо указать файл слоя. Процесс указания файла слоя аналогичен указанию документа карты с использованием полного пути к файлу .mxd, только здесь применяется функция Layer вместо функции MapDocument.
    ПримечаниеПримечание:

    Для выполнения следующих действий необходимо найти существующий файл слоя. Если у вас нет файла слоя, его нужно создать.

  5. В окне Python введите следующую строку и нажмите клавишу ВВОД. Указанный путь, скорее всего, будет отличаться от примера, приведенного ниже.
  6. >>> lyrFile = arcpy.mapping.Layer(r"C:\Project\data\Rivers.lyr")
    
    В предыдущем действии была создана ссылка на существующий файл слоя, которая была сохранена в переменной lyrFile.
    Обратите внимание на то, что буква r размещена перед строкой. Это специальный символ Python, который означает необработанные данные. Он указывает, что строку необходимо обрабатывать так, как она представлена, при этом игнорировать любые другие специальные символы в строке. Символ r используется потому, что путь содержит обратные слеши. Обратные слеши в Python являются специальными символами. Например, \t в строке преобразуется в символ табуляции, а \n преобразуется в новую строку. В примере выше не требуется использовать специальные символы, необходима необработанная буквенная строка. Существует два других эквивалентных способа ввода одинакового пути в Python. Во-первых, используйте обычный слеш (например, "C:/Project/States.lyr"). Python не пытается интерпретировать обычныеслеши, они являются кросс-платформенным стандартом. Во-вторых, используйте двойные обратные слеши (например, "C:\\Project\\Lakes.lyr"). Первый обратный слеш отменяет второй. Важно запомнить применение символа r, так как при копировании системных путей в платформе Windows обратные слеши включаются в путь.
    Созданы все необходимые переменные. Затем функция AddLayer используется для добавления файла слоя в текущий документ карты.
  7. В окне Python введите следующую строку и нажмите клавишу ВВОД.
  8. >>> arcpy.mapping.AddLayer(df, lyrFile)
    
    Слой будет добавлен в таблицу содержания и представление таблицы, а окно Python будет выглядеть так, как на рисунке ниже:
    Снимок экрана результатов выполнения функции AddLayer в окне Python

Экспорт документа карты в PDF

Экспорт документа карты в PDF - очень простая операция, требующая всего одной строки кода. Вы уже видели синтаксис функции ExportToPDF в начале данного руководства. Теперь вы изучите полный синтаксис.

Шаги:
  1. В окне Python введите следующую строку и нажмите клавишу ВВОД. Указанный путь, скорее всего, будет отличаться от примера, приведенного ниже.
  2. >>> arcpy.mapping.ExportToPDF(mxd, r"C:\Project\Doc1.pdf")
    
    Существует множество параметров, совпадающих с настройками, доступными в ArcMap. Всего два параметра являются обязательными: map_document и out_pdf.
    Будет создан документ PDF в указанном местоположении, а окно Python будет выглядеть так, как на рисунке ниже:
    Снимок экрана результатов выполнения функции ExportToPDF в окне Python

Укажите слой с помощью функции ListLayers, измените свойства слоя

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

Шаги:
  1. В окне Python введите следующее:
  2. >>> lyrFile.
    
    После ввода точки отображаются свойства и методы объекта Layer. С помощью переменной lyrFile вы можете изменить эти свойства в документе карты, а при вызове метода save() изменения будут сохранены в файл слоя (.lyr) на диске.
    Не все возможные свойства доступны в объекте Layer, а только те свойства, которые чаще всего используются для сценариев автоматизации карт. Многие другие свойства можно изменить, создав их в файле слоя и используя функцию UpdateLayer arcpy.mapping.
    Вы не всегда будете добавлять файлы слоя. Чаще всего документ карты уже будет содержать слои. Далее вы опять укажете ссылку на слой, будто он уже содержится в документе карты. Указание слоя в документе карты очень похоже на указание фрейма данных.
  3. В окне Python нажмите клавишу BACKSPACE, введите следующую строку и нажмите клавишу ВВОД:
  4. >>> lyr = arcpy.mapping.ListLayers(mxd)[0]
    
    Для функции ListLayers требуется указать ссылку на документ карты. У функции два дополнительных параметра: один для выполнения поиска с групповым символом, а второй для указания фрейма данных. Так как у вас всего один слой и один фрейм данных, другие параметры указывать необязательно. Опять же, значение индекса [0] необходимо добавить в конец выражения, чтобы возвращался объект Layer вместо объекта списка Python.
    С помощью новой переменной lyr вы обновите некоторые свойства слоя.
  5. В окне Python введите следующие две строки и нажмите клавишу ВВОД после каждой из них:
  6. >>> lyr.name = "Some New Name"
    >>> lyr.visible = False
    
    Изменение не будет заметно сразу же. Не все изменения свойств или методов автоматически обновляют приложение. Это сделано специально, чтобы приложение не обновлялось постоянно. При использовании тега CURRENT для указания на текущий загруженный документ карты ArcMap иногда требуется обновить таблицу содержания или активное представление (представление данных или вид компоновки).
  7. В окне Python введите следующие две строки и нажмите клавишу ВВОД после каждой из них:
  8. >>> arcpy.RefreshTOC()
    >>> arcpy.RefreshActiveView()
    
    Таблица содержания и представление данных будут обновлены.
    ПримечаниеПримечание:

    Если вы выполняете автономные скрипты вне ArcMap, эти дополнительные функции не требуются.

    Окно Python должно выглядеть так, как на рисунке ниже:
    Снимок экрана результатов обновления в окне Python

Изменение экстента фрейма данных

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

Шаги:
  1. В окне Python введите следующие три строки и нажмите клавишу ВВОД после каждой из них:
  2. >>> lyr.visible = True
    >>> arcpy.RefreshTOC()
    >>> arcpy.RefreshActiveView()
    
  3. В ArcMap графически выберите один или несколько объектов в слое.
  4. Затем вы создаете переменную, которая хранит экстент выбранных объектов, и применяете его к параметру extent объекта DataFrame, на который вы уже указали ссылку.
  5. В окне Python введите следующие две строки и нажмите клавишу ВВОД после каждой из них:
  6. >>> lyrExtent = lyr.getSelectedExtent()
    >>> df.extent = lyrExtent
    
    Окно Python должно выглядеть так, как на рисунке ниже:
    Снимок экрана результатов df.extent в окне Python

Экспорт документа карты в PDF (повтор)

Вы собираетесь экспортировать документ в PDF еще раз. На этот раз вы создаете второй документ PDF, который будет в итоге добавлен к новому документу вместе с первым документом.

Шаги:
  1. В окне Python введите следующую строку и нажмите клавишу ВВОД. Указанный путь, скорее всего, будет отличаться от примера, приведенного ниже.
  2. >>> arcpy.mapping.ExportToPDF(mxd, r"C:\Project\Doc2.pdf")
    
    Окно Python должно выглядеть так, как на рисунке ниже:
    Снимок экрана результатов выполнения функции ExportToPDF в окне Python

Создание документа PDF и добавление двух страниц

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

В этой части руководства симулируется создание многостраничного отчета. Сначала необходимо создать новый документ PDF и затем добавить ранее созданные PDF. Представьте, что эти PDF — отдельные документы, из которых состоит атлас. Doc1.pdf может быть многостраничным документом PDF с титульной страницей, таблицей содержания и т. д. Второй документ PDF может быть результатом экспорта всех страниц многостраничной компоновки в один многостраничный документ PDF.

Первый шаг – создание нового документа PDF.

Шаги:
  1. В окне Python введите следующую строку и нажмите клавишу ВВОД:
  2. >>> PDFdoc = arcpy.mapping.PDFDocumentCreate(r"C:\Project\Final.pdf")
    
    Переменная PDFdoc ссылается на объект PDFDocument в памяти. Он не будет записан на диск до сохранения и закрытия документа.
    Дальнейшие действия добавляют соответствующие страницы.
  3. В окне Python введите следующие три строки и нажмите клавишу ВВОД после каждой из них:
  4. >>> PDFdoc.appendPages(r"C:\Project\Doc1.pdf")
    >>> PDFdoc.appendPages(r"C:\Project\Doc2.pdf")
    >>> PDFdoc.saveAndClose()
    
    Первые две строки добавляют каждый PDF в созданный документ PDF. Последняя строка сохраняет изменения и создает конечный PDF на диске.
    Будет создан документ PDF в указанном местоположении, а окно Python будет выглядеть так, как на рисунке ниже:
    Снимок экрана результатов saveAndClose в окне Python

Связанные разделы

Введение в модуль arcpy.mapping

Руководство по использованию arcpy.mapping

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

5/10/2014