ConvertWebMapToMapDocument (arcpy.mapping)

Резюме

Конвертирует веб-карту (в формате JSON), которую вы хотите напечатать или экспортировать, в документ карты. Документ карты затем можно изменить перед печатью или экспортом.

Обсуждение

ArcGIS обеспечивает поддержку печати веб-карт с помощью веб-API ArcGIS. Функция ConvertWebMapToMapDocument конвертирует веб-карту, которую вы хотите напечатать или экспортировать, в документ карты. После преобразования карты документ содержит все элементы веб-карты. Например, свойства сервисных подслоев переносятся в подслои картографического сервиса в документе. Затем, документ карты, перед печатью или экспортом в распространенные форматы, такие как PDF, можно изменить.

Функция ConvertWebMapToMapDocument в основном предназначена для рабочих процессов, в которых необходимо изменить веб-карту с помощью функций arcpy.mapping. Она удобна для экспорта веб-карты с разными разрешениями или для печати страниц разных размеров, т.е. при использовании опций, которые не доступны в инструменте геообработки Экспорт веб-карты. Несколько примеров использования функции ConvertWebMapToMapDocument в рабочих процессах:

Если у вас есть скрипт Python, который готовит карту для печати, вы можете включить его в инструмент-скрипт геообработки. Теперь вы можете опубликовать инструмент-скрипт в качестве сервиса геообработки ArcGIS Server. Каждый веб-интерфейс API ArcGIS имеет задачу печати, которую вы можете использовать в веб-приложении. Задача печати имеет свойство url, которое указывает REST url созданного вами сервиса геообработки. Чтобы получить более подробную информацию об использовании веб-API ArcGIS, обратитесь к справочной системе платформы разработки по адресу http://resources.arcgis.com/content/web/web-apis. Более подробные сведения о сервисах геообработки см. в:

Более подробные сведения о печати в веб-приложениях см. в:

При использовании ConvertWebMapToMapDocument в сервисе геообработки в веб-API ArcGIS, имена параметров инструмента-скрипта должны совпадать с параметрами веб-API задачи Печать (Print Task):

Имя параметра

Тип данных

Описание

Web_Map_as_JSON

Строка

Представление JSON состояния карты для экспорта, как она отобразится в веб-приложении. См. спецификацию ExportWebMap, чтобы понять, как этот текст должен быть отформатирован. Веб-интерфейсы API ArcGIS (для JavaScript, Flex, Silverlight и т. д.) позволяют разработчикам легко получить эту строку JSON из карты.

Output_File

Файлы

Имя выходного файла. Расширение файла зависит от параметра Формат (Format).

Формат

Строка

Формат, в котором будет предоставлено изображение карты для печати. Приемлемы следующие строки.

Например:

  • PNG8 (является значением умолчанию, если параметр оставлен пустым)
  • PNG
  • PDF
  • PNG32
  • JPG
  • GIF
  • EPS
  • SVG
  • SVGZ

Layout_Template

Строка

Имя шаблона из списка или ключевое слово MAP_ONLY. Когда выбрано MAP_ONLY или передается пустая строка, выходная карта не содержит никаких окружающих объектов компоновки страницы (например, название, легенды, масштабную линейку и т. д.).

ПодсказкаПодсказка:

Кроме того, можно добавить любое количество дополнительных пользовательских параметров. Возможность передачи дополнительных параметров в пользовательскую задачу печати позволяет вам собрать любое количество дополнительных параметров из веб-приложения и передать их в скрипт Python.

ConvertWebMapToMapDocument обычно используется при печати карт из веб-приложений. Если вы используете ArcGIS веб-API Печать, создавать JSON веб-карты не нужно; это сделает API. Однако прежде чем скрипт будет опубликован и использован в веб-API, его необходимо запустить локально. При локальном запуске скрипта можно использовать любую допустимую строку JSON. Строка JSON, похожая на то, что возвращает веб-приложение, может потребоваться для успешного выполнения скрипта. См. спецификацию ExportWebMap, чтобы понять, как этот текст должен быть отформатирован. Пример строки показан ниже:

{
    "layoutOptions": {
        "titleText": "Simple WebMap JSON example"
    },
    "operationalLayers": [
        {
            "url": "http://maps1.arcgisonline.com/ArcGIS/rest/services/USA_Federal_Lands/MapServer",
            "visibility": true
        }
    ],
    "exportOptions": {
        "outputSize": [
            1500,
            1500
        ]
    },
    "mapOptions": {
        "extent": {
            "xmin": -13077000,
            "ymin": 4031000,
            "xmax": -13023000,
            "ymax": 4053000
        }
    },
    "version": "1.4"
}

При запуске инструмента-скрипта, строку JSON можно скопировать и вставить во входной параметр Web_Map_as_JSON. Однако переносы строк необходимо удалить. Пример строки JSON с удаленными переносами строк:

{"layoutOptions": {"titleText": "Simple WebMap JSON example"},"operationalLayers": [{"url": "http://maps1.arcgisonline.com/ArcGIS/rest/services/USA_Federal_Lands/MapServer","visibility": true}],"exportOptions": {"outputSize": [1500,1500]},"mapOptions": {"extent": {"xmin": -13077000,"ymin": 4031000,"xmax": -13023000,"ymax": 4053000}},"version": "1.4"}

ПодсказкаПодсказка:

Для публикации вы можете оставить входной параметр Web_Map_as_JSON пустым, поскольку веб-web ArcGIS передаст в веб-приложение JSON веб-карты. Входной параметр Web_Map_as_JSON может быть оставлен пустым при условии, что скрипт Python был написан таким образом, чтобы он мог работать и при пустом входном параметре. Например, скрипт не ищет слои веб-карт по имени. Если скрипт не работает на сервере из-за ошибки, ее необходимо исправить локально, затем снова опубликовать его на сервере. Поэтому, перед публикацией рекомендуется убедиться, что скрипт работает локально, проверив его со строкой JSON подходящей веб-карты или использовав отладочный документ карты, который содержит все элементы, присутствующие в JSON веб-карты.

ПодсказкаПодсказка:

Как упоминалось выше, строка JSON, которая возвращается из веб-API ArcGIS, содержит полное описание состояния веб-карты. Объект layoutOptions в строке JSON требует дополнительного описания, поскольку он автоматически обновляет элементы компоновки, находящиеся в template_mxd. Например, если JSON имеет параметр titleText, а template_mxd имеет элемент динамического текста Title (заголовок), заголовок в компоновке шаблона документа карты будет обновлен значением titleText. Подробнее, см. раздел layoutOptions в спецификации ExportWebMap.

Когда вы включаете скрипт Python, использующий ConvertWebMapToMapDocument, в сервис геообработки, следует убедиться, что ArcGIS for Server имеет доступ к документам шаблонов карт, использующихся в веб-приложении. Лучше всего использовать папку, зарегистрированную в ArcGIS for Server. Дополнительные сведения о регистрации данных см. в:

При создании шаблонов документов карт в зарегистрированной папке лучше всего использовать относительные пути. Таким образом, ArcGIS for Server сможет найти данные в зарегистрированной папке относительно положения документов карты. Дополнительная информация приведена в разделе Как карта ссылается на данные.

ВниманиеВнимание:

При использовании ConvertWebMapToMapDocument, относительные пути к слоям должны указывать на данные в, ниже, или на один уровень выше пути template_mxd.

ВниманиеВнимание:

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

По умолчанию наложенные заметки или графика со стороны клиента из веб-приложения хранится в рабочей области в памяти. Рабочая область в памяти является временной и удаляется при закрытии приложения. Чтобы получить постоянную копию выходного документа карты, содержащего заметки, задайте notes_gdb; затем используйте инструмент геообработки Собрать карту (Consolidate Map) или Упаковать карту (Package Map), чтобы сделать копию выходного документа карты. Задавать параметр notes_gdb необходимо только в том случае, если вы планируете создать постоянную копию выходного документа карты. См. код в Примере 3 ниже. Если веб-карта не содержит заметок, можно использовать метод saveACopy из класса MapDocument, чтобы получить постоянную копию выходного документа карты.

Кроме того, см. обзор группы инструментов Печать (Printing), чтобы узнать о печати малых форматов (например, формата Letter). Эта группа инструментов содержит инструмент геообработки Экспорт веб-карты (Export Web Map). Задача, которая использует этот инструмент, устанавливается вместе с ArcGIS for Server. Экспорт веб-карты (Export Web Map) также поддерживает наложение заметок.

Прочтите следующие руководства. В них описывается весь процесс высококачественной печати/экспорта с помощью рабочего процесса ConvertWebMapToMapDocument: создание документов шаблонов карт, написание скрипта Python, создание сервиса геообработки и создание веб-приложения.

Синтаксис

ConvertWebMapToMapDocument (webmap_json, {template_mxd}, {notes_gdb}, {extra_conversion_options})
ПараметрОбъяснениеТип данных
webmap_json

The web map for printing in JavaScript Object Notation (JSON). See the ExportWebMap JSON Specifications for more information.

String
template_mxd

A string representing the path and file name to a map document (.mxd) to use as the template for the page layout. The contents of the web map will be inserted into the data frame that was active at the time the template_mxd was saved. Layers in the template_mxd's active data frame (and all other data frames) will be preserved in the output mapDocument.

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

String
notes_gdb

A string representing the path to a new or existing file geodatabase or an existing enterprise geodatabase connection where graphic features should be written. This parameter should only be used if graphic features from the web map JSON need to be preserved permanently. In most cases this parameter is not required as a temporary in-memory workspace will be used to store graphic features. This parameter lets you save graphic features to persistent storage, which is essential if you plan to use the map document for operations that require saving or loading from disk (for example, packaging or consolidating). The path must end with a .gdb or .sde extension.

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

String
extra_conversion_options

A dictionary of credentials for secured services. This parameter is required if the services in the web map JSON require a user name and password to view. Keys accepted in the dictionary are as follows:

  • SERVER_CONNECTION_FILE
  • WMS_CONNECTION_FILE
  • WMTS_CONNECTION_FILE

An example of key value pairs is as follows:

dict = {"SERVER_CONNECTION_FILE":r"Z:\ArcGIS2 on MyServer (user).ags", 
        "WMS_CONNECTION_FILE":r"Z:\USA on MyServer.wms"}
result = arcpy.mapping.ConvertWebMapToMapDocument(json, 
                                                  extra_conversion_options=dict)

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

Dictionary
Возвращено значение
Тип данныхОбъяснение
tuple

Возвращает именованный кортеж Python веб-карты и запрашивает свойства:

  • mapDocumentОбъект документа карты создается в результате работы функции.
  • DPI (разрешение)Разрешение экспортированных данных.
  • outputSizeHeightВысота изображения, как указано во входной веб-карте. Используется при экспорте вида данных.
  • outputSizeWidthШирина изображения, как указано во входной веб-карте. Используется при экспорте вида данных.
ВниманиеВнимание:

ConvertWebMapToMapDocument создает временные документы карты (.mxd) в системной папке temp. В системах Windows Vista и Windows 7 она находится в C:\Users\<user name>\AppData\Local\Temp. Пользователи работают с документами карты в этой папке под свою ответственность. Чтобы удалить эти временные документы карты с помощью скрипта, см. раздел очистка в примерах кодов, приведенных ниже.

Пример кода

ConvertWebMapToMapDocument пример 1

В этом примере, скрипт считывает JSON веб-карты, выходной формат и шаблон документа карты. Затем, выходной документ карты экспортируется в PDF или PNG.

import arcpy
import os
import uuid

# The template location in the registered folder
templatePath = '//MyMachine/Austin/WebMap'

# Input web map json
Web_Map_as_JSON = arcpy.GetParameterAsText(0)

# Format for output
Format = arcpy.GetParameterAsText(1)
if Format == '#' or not Format:
    Format = "PDF" 

# Input Layout template
Layout_Template = arcpy.GetParameterAsText(2)
if Layout_Template == '#' or not Layout_Template:
    Layout_Template = "Landscape11x17" 

# Get the requested map document
templateMxd = os.path.join(templatePath, Layout_Template + '.mxd')

# Convert the web map to a map document
result = arcpy.mapping.ConvertWebMapToMapDocument(Web_Map_as_JSON, templateMxd)
mxd = result.mapDocument

# Use the uuid module to generate a GUID as part of the output name
# This will ensure a unique output name
output = 'WebMap_{}.{}'.format(str(uuid.uuid1()), Format)
Output_File = os.path.join(arcpy.env.scratchFolder, output)

# Export the web map
if Format.lower() == 'pdf':
    arcpy.mapping.ExportToPDF(mxd, Output_File) 
elif Format.lower() == 'png':
    arcpy.mapping.ExportToPNG(mxd, Output_File)

# Set the output parameter to be the output file of the server job
arcpy.SetParameterAsText(3, Output_File)

# Clean up - delete the map document reference
filePath = mxd.filePath
del mxd, result
os.remove(filePath)
ConvertWebMapToMapDocument пример 2

В этом примере, скрипт считывает JSON веб-карты, выходной формат, шаблон документа карты и существующий документ PDF, к которому будет присоединена веб-карта. Выходной документ карты из функции ConvertWebMapToMapDocument экспортируется как PDF, затем включается в другой PDF с помощью класса PDFDocument.

import arcpy
import os
import uuid

# The template location in the registered folder
templatePath = '//MyMachine/Austin/WebMap'

# Input web map json
Web_Map_as_JSON = arcpy.GetParameterAsText(0)

# Format for output
Format = arcpy.GetParameterAsText(1)
if Format == '#' or not Format:
    Format = "PDF" 

# Input Layout template
Layout_Template = arcpy.GetParameterAsText(2)
if Layout_Template == '#' or not Layout_Template:
    Layout_Template = "Landscape11x17" 
    
PDF_Document = arcpy.GetParameterAsText(3)
if PDF_Document == '#' or not PDF_Document:
    PDF_Document = "EmergencyEvacuationRoute.PDF"

# Get the requested map document
templateMxd = os.path.join(templatePath, Layout_Template + '.mxd')

# Get the requested PDF file 
PDF_File = os.path.join(templatePath, PDF_Document)

# Convert the web map to a map document
result = arcpy.mapping.ConvertWebMapToMapDocument(Web_Map_as_JSON, templateMxd)
mxd = result.mapDocument

# Export the web map to PDF
WebMapPDF = os.path.join(arcpy.env.scratchFolder, 'WebMap.pdf')
arcpy.mapping.ExportToPDF(mxd, WebMapPDF)

# Create a new output PDF Document and append pages
Output_Name = os.path.join(arcpy.env.scratchFolder, 'EvacuationRouteWithWebMap.pdf')
pdfDoc = arcpy.mapping.PDFDocumentCreate(Output_Name)
pdfDoc.appendPages(PDF_File)
pdfDoc.appendPages(WebMapPDF)
pdfDoc.appendPages(os.path.join(templatePath, 'ContactInfo.pdf'))

# Set the output parameter to be the output PDF
arcpy.SetParameterAsText(4, Output_Name)

# Clean up - delete the map document reference
filePath = mxd.filePath
del mxd, result
os.remove(filePath)
ConvertWebMapToMapDocument пример 3

В этом примере, инструмент геообработки Собрать карту (Consolidate Map) используется для получения постоянной копии выходного документа карты, включая наложенные заметки.

import arcpy
import os
import uuid

# The template location in the registered folder
templatePath = '//MyMachine/Austin/WebMap'

# Input web map json
Web_Map_as_JSON = arcpy.GetParameterAsText(0)

# Format for output
Format = arcpy.GetParameterAsText(1)
if Format == '#' or not Format:
    Format = "PDF" 

# Input Layout template
Layout_Template = arcpy.GetParameterAsText(2)
if Layout_Template == '#' or not Layout_Template:
    Layout_Template = "Landscape11x17" 

# Get the requested map document
templateMxd = os.path.join(templatePath, Layout_Template + '.mxd')
    
# Since we are making a permanent copy of the notes overlays, 
# we need to specify a notes geodatabase
notes = os.path.join(arcpy.env.scratchFolder, 'mynotes.gdb')

# Convert the web map to a map document
result = arcpy.mapping.ConvertWebMapToMapDocument(Web_Map_as_JSON, templateMxd, notes)
mxd = result.mapDocument

# Save the web map and notes overlays to a new map document using ConsolidateMap 
arcpy.ConsolidateMap_management(mxd.filePath, 
                                os.path.join(arcpy.env.scratchFolder, 'ConsolidateWebMap'))

# Clean up - delete the map document reference
filePath = mxd.filePath
del mxd, result
os.remove(filePath)
ConvertWebMapToMapDocument пример 4

В этом примере используется промежуточный шаблон документа карты, который содержит векторные эквиваленты всех возможных сервисных слоев. После выполнения функции ConvertWebMapToMapDocument, скрипт просматривает все слои выходного документа карты и удаляет все слои, кроме векторных, которые соответствуют сервисным слоям в JSON веб-карты. Затем, выходной документ карты экспортируется в PDF или PNG.

import arcpy
import os
import uuid

# The template location in the registered folder (as UNC path)
templatePath = '//MyComputerName/MyDataStore/USA'

# Input web map json
Web_Map_as_JSON = arcpy.GetParameterAsText(0)

# Format for output
Format = arcpy.GetParameterAsText(1)
if Format == '#' or not Format:
    Format = "PDF" 

# Input Layout template
Layout_Template = arcpy.GetParameterAsText(2)
if Layout_Template == '#' or not Layout_Template:
    Layout_Template = "NorthwesternUSA" 
    
# Get the requested map document
templateMxd = os.path.join(templatePath, Layout_Template + '.mxd')

# Convert the web map to a map document
result = arcpy.mapping.ConvertWebMapToMapDocument(Web_Map_as_JSON, templateMxd)
mxd = result.mapDocument

# Reference the data frame that contains the web map
# Note: ConvertWebMapToMapDocument renames the active dataframe in the template_mxd to "Webmap"
df = arcpy.mapping.ListDataFrames(mxd, 'Webmap')[0]

# Get a list of all service layer names in the map
serviceLayersNames = [slyr.name for slyr in arcpy.mapping.ListLayers(mxd, data_frame=df) 
                      if slyr.isServiceLayer and slyr.visible and not slyr.isGroupLayer]

# Create a list of all possible vector layer names in the map that could have a 
# corresponding service layer
vectorLayersNames = [vlyr.name for vlyr in arcpy.mapping.ListLayers(mxd, data_frame=df) 
                     if not vlyr.isServiceLayer and not vlyr.isGroupLayer]

# Get a list of all vector layers that don't have a corresponding service layer
removeLayerNameList = [vlyrName for vlyrName in vectorLayersNames 
                       if vlyrName not in serviceLayersNames]

# Remove all vector layers that don't have a corresponding service layer
for lyr in arcpy.mapping.ListLayers(mxd, data_frame=df):
    if not lyr.isGroupLayer \
    and not lyr.isServiceLayer \
    and lyr.name in removeLayerNameList \
    and lyr.name in vectorLayersNames:
        arcpy.mapping.RemoveLayer(df, lyr)
                
# Remove all service layers
# This will leave only vector layers that had corresponding service layers
for slyr in arcpy.mapping.ListLayers(mxd, data_frame=df):
    if slyr.isServiceLayer:
        arcpy.mapping.RemoveLayer(df, slyr)
        
# Use the uuid module to generate a GUID as part of the output name
# This will ensure a unique output name
output = 'WebMap_{}.{}'.format(str(uuid.uuid1()), Format)
Output_File = os.path.join(arcpy.env.scratchFolder, output)

# Export the web map
if Format.lower() == 'pdf':
    arcpy.mapping.ExportToPDF(mxd, Output_File) 
elif Format.lower() == 'png':
    arcpy.mapping.ExportToPNG(mxd, Output_File)

# Set the output parameter to be the output file of the server job
arcpy.SetParameterAsText(3, Output_File)

# Clean up - delete the map document reference
filePath = mxd.filePath
del mxd, result
os.remove(filePath)
9/11/2013