Skip To Content

Публикация размещенных слоев листов

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

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

Вы можете автоматически построить кэш листов в процессе публикации, или сделать это в ручном режиме после публикации. Более подробно см. Советы и рекомендации по кэшу листов.

Для публикации размещенного слоя листов, на портале вы должны быть участником следующего:

Публикация из размещенного векторного слоя

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

Примечание:

  • Редактирование пространственных атрибутов, внесенное в размещенный векторный слой, не будет автоматически отражаться в размещенном слое листов. Вы должны будете повторно опубликовать размещенный векторный слой из обновленного размещенного векторного слоя.
  • Есть некоторые ограничения использования стилей для размещенного векторного слоя, которые могут не позволить опубликовать размещённый слой листов.
  • Вы не можете опубликовать размещенный слой сцены из размещенного векторного слоя мультипатч или облака точек.

Выполните следующие шаги для публикации размещенного слоя листов из размещенного векторного слоя:

  1. Войдите на портал и щелкните Ресурсы > Мои ресурсы.
  2. Для публикации выполните одно из следующих действий:
    • Щелкните размещенный векторный слой, который вы хотите опубликовать, и выберите Опубликовать.
    • Щелкните Создать > Слой листов и выберите Векторный слой, который нужно опубликовать как кэшированный сервис.
  3. Введите название, теги и описание для размещенного слоя листов.
  4. Если администратор вашего портала настроил категории содержания, нажмите Назначить категорию и выберите до 20 категорий, для облегчения поиска вашего элемента. Вы также можете использовать отметку Фильтр категорий для сокращения списка категорий.

    Категории доступны начиная с версии ArcGIS Enterprise 10.6.1.

  5. Выберите папку, в которой будет храниться размещенный слой листов.
  6. Дополнительно можно изменить экстенты, при которых слой будет отображаться, перетащив маркеры Видимого диапазона.
    Внимание:

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

  7. Щелкните OK.

    Как только слой листов будет создан, откроется его страница элемента.

Создание и публикация карты в ArcGIS Pro

Из карты в ArcGIS Pro вы можете опубликовать слой листов, который будет размещен на вашем портале.

Примечание:

Если к слоям ArcGIS Pro применен определяющий запрос, ArcGIS применяет определяющий запрос к опубликованному размещенному слою листов. Но все данные копируются в ArcGIS Enterprise. Если вы желаете опубликовать поднабор этих данных, необходимо экспортировать этот поднабор в другой класс объектов и опубликовать уже другой класс объектов.

Обратите внимание, что веб-браузеры не могут отображать некоторые более сложные картографические символы, которые вы, возможно, использовали при создании своей карты. Можно использовать большинство типов символов, но в некоторых случаях при публикации такие символы могут быть упрощены. Более подробно о поддерживаемых символах и об изменении символов карты перед публикацией см. в разделе Создание сервисов объектов Справки ArcGIS Server.

  1. Запустите ArcGIS Pro и откройте проект с картой, которую вы хотите опубликовать.
  2. Убедитесь, что ваше подключение к порталу активно и в том, что вы вошли в свою организацию под учетной записью, которой предоставлены права доступа для создания ресурсов и публикации размещенных слоев листов.
  3. Чтобы опубликовать слой листов, сделайте одно из следующего:
    • Выберите слой на панели Содержание. Щёлкните на выборке слоёв правой кнопкой мыши и выберите Опубликовать как веб-слой.
    • Чтобы опубликовать все слои карты, щелкните Веб-слой в группе Опубликовать как на вкладке Общий доступ и выберите Опубликовать веб-слой.

    Подсказка:

    Если опция меню Опубликовать как веб-слой не активна, возможно, причина в следующем:

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

  4. Введите имя слоя листов. По умолчанию слой будет сохранен в Мои ресурсы. Можно сохранить его в подпапку в Моих ресурсах, введя имя папки или указав путь к существующей папке.
  5. Выберите Копировать все данные.
  6. Выберите Листы в поле Тип слоя.

    Другие варианты опции Тип слоя будут автоматически отключены, поскольку при копировании одновременно может использоваться только одна опция.

  7. Введите краткое описание и теги слоя листов.
  8. Укажите, кто получит доступ к размещенному слою листов. Все слои, которые вы опубликуете, будут автоматически доступны в разделе Мои ресурсы вашей организации, который является персональной рабочей областью. Ваши ресурсы будут недоступны для других, пока вы не предоставите доступ к ним при помощи одной или нескольких следующих опций:
    • Имя вашего портала – при выборе этой опции доступ к слою будет разрешен всем авторизованным пользователям портала.
    • Все – при выборе данной опции слой будет доступен всем, у кого есть доступ на портал.
    • Группы – можно открыть общий доступ для участников групп, к которым вы принадлежите.
  9. Щелкните Конфигурация и нажмите на кнопку Настроить свойства веб-слоя, чтобы задать настройки кэша.
  10. Выберите Схема листов.
  11. Измените положение бегунка Уровни детализации, чтобы указать минимальный и максимальный масштаб для вашего слоя листов.

    Размер выходного кэша будет меняться с изменением минимального и максимального масштабов.

  12. Выберите, когда и где будет построен кэш листов.
    • Выберите Кэшировать автоматически на сервере, если вы хотите, чтобы листы строились на хост-сервере портала в процессе публикации слоя.
    • Если вы хотите сохранить построенный кэш на хост-сервере портала, но при этом хотите построить его самостоятельно после публикации, выберите Кэшировать вручную на сервере, откройте слой листов на вебсайте портала после публикации слоя, и вручную постройте кэш.
    • Выберите Кэшировать локально и укажите в качестве местоположения папку на компьютере с ArcGIS Pro для хранения временного пакета листов, если вы хотите построить кэш и упаковать его на компьютере с ArcGIS Pro. Пакет листов будет автоматически выгружен на хост-сервер портала для последующей распаковки и хранения кэша там же.
  13. Чтобы позволить клиентам загружать листы кэша для автономного использования, отметьте Разрешить клиентам экспортировать листы кэша.
  14. Если вы отметили Разрешить клиентам экспортировать листы кэша, используйте поле Ограничить экспорт до для указания максимального количества листов, которое клиент может загрузить одним запросом.
  15. Щелкните на вкладке Ресурсы, чтобы убедиться, что слой содержит нужные слои данных.
  16. Щелкните Анализировать для проверки на наличие ошибок и проблем.

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

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

По завершении публикации вы можете щелкнуть Управление веб-слоем, чтобы открыть веб-сайт портала.

Создание пакета листов в ArcGIS Pro и загрузка его в организацию

Воспользуйтесь инструментом геообработки Создать пакет листов карты для создания пакета листов, добавьте этот пакет в свою организацию и опубликуйте слой листов.

  1. Откройте проект, содержащий упаковываемые данные.
  2. Откройте и запустите инструмент геообработки Создать пакет листов карты.
  3. По окончании создания пакета листов войдите на портал под учетной записью с правами на создание ресурсов и публикацию размещенных слоев листов и щелкните Ресурсы > Мои ресурсы.
  4. Добавить пакет листов С моего компьютера.
  5. Установите отметку напротив опции Опубликовать этот файл как размещенный слой.
  6. Введите имя.
  7. Если администратор вашего портала настроил категории содержания, нажмите Назначить категорию и выберите до 20 категорий, для облегчения поиска вашего элемента. Вы также можете использовать отметку Фильтр категорий для сокращения списка категорий.

    Категории доступны начиная с версии ArcGIS Enterprise 10.6.1.

  8. Введите теги, разделенные запятыми.

    Теги представляют собой слова или короткие фразы, описывающие элемент и облегчающие его поиск. Федеральная земля считается одним тегом, когда как Федеральная, земля рассматривается как два тега.

  9. Нажмите кнопку Добавить элемент.

Листы распакованы, а на вашем портале создан размещенный слой листов. Листы карты и пакет листов должны появиться на странице Мои ресурсы.

Создание и публикация карты в ArcMapArcMap

Из ArcMap вы можете опубликовать слой листов, который будет размещен на портале.

Примечание:

Если к слоям ArcMap применен определяющий запрос, ArcGIS применяет определяющий запрос к опубликованному размещенному слою листов. Но все данные копируются в ArcGIS Enterprise. Если вы желаете опубликовать поднабор этих данных, необходимо экспортировать этот поднабор в другой класс объектов и опубликовать уже другой класс объектов.

Перед запуском ArcGIS Desktop убедитесь в том, что ArcMap подключен к вашему порталу.

  1. Запустите ArcMap и откройте карту, которую вы хотите опубликовать.
  2. Войдите на портал с использованием учетной записи организации, у которой есть права на создание ресурсов и публикацию размещенных слоев листов.
    1. Щелкните Файл > Подключиться.
    2. Введите имя пользователя и пароль для портала и щелкните Войти.
  3. Теперь опубликуйте карту.
  4. Щелкните Файл > Опубликовать как > Сервис.
  5. Выберите Опубликовать сервис и нажмите Далее.
    Внимание:

    Если вместо этого вы выбираете перезапись сервиса, то элемент листа карты удаляется с портала, а новый элемент создается с тем же именем. Новый элемент создается в корневой папке, и ему будет присвоен новый ID. Вам требуется перенастроить параметры доступа и при необходимости переместить элемент обратно в папку, в которой он находился до повторной публикации.

  6. В ниспадающем списке типов подключения выберите Мои размещенные сервисы. Затем введите имя для ваших листов и нажмите Продолжить.
  7. Укажите требуемые свойства в Редакторе сервисов. Здесь вы можете выбрать операции, которые пользователи смогут применять к листам, и указать, как листы будут предоставляться конечным пользователям.

    Более подробно об оптимальной настройке листов для развертывания см. раздел справки ArcGIS Server Настройка и конфигурирование сервисов. Некоторые из свойств, обсуждаемые в этом разделе, относятся только к ArcGIS Server и не применимы при работе с размещенными слоями листов.

    Подсказка:

    Если вы закроете Редактор сервисов во время данного сеанса, то появится запрос на сохранение вашей работы как черновика сервиса. Черновики сервисов позволяют вам позднее возвращаться к конфигурации сервиса. По умолчанию черновики сервисов сохраняются в папке Черновики подключения Мои размещенные карты. Более подробную информацию О черновиках сервисов см. в справке ArcGIS Server.

  8. Есть несколько свойств, которые используются только для размещенных слоев листов, и которые вам необходимо указать. Они подробно описаны в шагах ниже.
  9. В левой части Редактора сервиса щелкните Функции, затем Кэшированный сервис, чтобы опубликовать вашу карту в виде слоя листов. Включите опцию Доступ к объектам для публикации слоя пространственных объектов с вашими листами, если вы собираетесь настроить всплывающие окна для слоя при добавлении его в Map Viewer.

    Вы можете щелкнуть подпункт Использование листов кэша в левой части Редактора сервиса, чтобы задать дополнительные свойства, определяющие возможности клиентов при работе с опубликованным слоем листов.

  10. Щелкните пункт Кэширование, чтобы задать свойства листов кэша. См. Создание кэша карты в справке по ArcGIS Server для подробного описания шагов. Обратите внимание, что некоторые дополнительные настройки кэширования доступны только при публикации напрямую в ArcGIS Server.
  11. На левой панели Редактор сервиса щелкните Описание элемента и введите краткое описание и теги для вашего слоя листов. Вам понадобится ввести эту информацию перед тем, как вы сможете опубликовать сервис. Более подробно см. в разделе описания элементов раздела Задание свойств картографического сервиса справки ArcGIS Server.
  12. В левой части Редактора сервиса щелкните Общий доступ и выберите, кому будет предоставлен доступ к этому слою листов. По умолчанию размещенный слой листов является частным, то есть он доступен только для вас. Вы можете предоставить доступ к нему для всех, для всех участников вашей организации или для участников определенных групп.
  13. В окне Редактор сервисов щелкните Анализировать Анализировать (Analyze).

    Будет произведена проверка карты на возможность быть опубликованной. Перед публикацией необходимо исправить Ошибки Ошибка (Error), перечисленные в окне Подготовка. При необходимости можно устранить предупреждения и информационные сообщения для дальнейшего улучшения производительности и визуализации публикуемых листов. Более подробно об устранении этих проблем см. в разделе справки ArcGIS Server Анализ ГИС-ресурса.

  14. При необходимости, щелкните Предварительный просмотр Предварительный просмотр (Preview) в Редакторе сервиса. Тогда вы сможете увидеть, как размещенный слой листов будет выглядеть при просмотре в веб-браузере.
  15. После устранения ошибок и, при желании, любых сообщений и предупреждений, щелкните Опубликовать Опубликовать.
    Примечание:

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

После публикации слоя листов на портале вы увидите их, раскрыв папку Мои размещенные сервисы в окне Каталога.

Размещенный слой листов будет доступен на вкладке Мои ресурсы веб-сайта портала в виде двух независимых элементов: Листы и Определение сервиса. Определение сервиса – это архивный файл, содержащий карту, ее данные и настройки публикации листов. Определение сервиса можно передать и опубликовать на любом компьютере, где есть ArcGIS Server.

Создайте пакет листов в ArcMap и опубликуйте.

ArcMap позволяет строить листы для документа карты и сохранять их в удобном для передачи файле пакета листов (.tpk). Вы можете создать пакет листов в ArcMap, предоставить общий доступ к нему на портале и опубликовать его как размещенный слой листов.

Существует два способа создания и публикации пакета листов из ArcMap.

  • Для упаковки и публикации небольшого объема данных (менее 1 Гб), создайте и опубликуйте пакет листов непосредственно из карты. При публикации пакета на веб-сайте портала, сохраняются элементы документа карты, такие как, легенда и текстовые элементы.
  • Если объем ваших данных составляет более 1 Гб, для упаковки и публикации листов используйте инструменты геообработки. При публикации листов из пакета листов, такой способ сохраняет только данные, что увеличивает производительность создания листов.

Подсказка:

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

Публикация небольших пакетов листов

Если размер создаваемого в ArcMap пакета листов меньше 1 Гб, для публикации применяется следующий рабочий процесс:

  1. Откройте вашу карту в ArcMap.
  2. Войдите на портал с использованием учетной записи организации, у которой есть права на создание ресурсов и публикацию размещенных слоев листов.
  3. Щелкните Настройка > Опции ArcMap > Общий доступ и убедитесь, что включена опция Включить инструменты ArcGIS Runtime.

    Это даст возможность использовать меню опций, которые потребуются в следующем шаге.

  4. В ArcMap нажмите Файл > Опубликовать как > Пакет листов.
  5. В следующих подшагах настройте все параметры. Остальные настройки можете выбрать сами.
    1. На вкладке Пакет листов выберите Загрузить пакет в мою учетную запись ArcGIS Portal.
    2. На вкладке Формат листов выберите ArcGIS Online / Bing Maps / Google Maps в качестве Схемы листов.
    3. На вкладке Описание элемента введите все обязательные элементы.
    4. На вкладке Общий доступ вы можете выбрать, предоставить ли доступ для всех или только для определенных групп пользователей.
  6. Щёлкните Опубликовать.

    Вам может быть предложено сохранить карту перед ArcMap созданием пакета листов.

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

  7. Когда создание пакета листов будет завершено, войдите на портал под той же учетной записью, которая использовалась при создании пакета в ArcMap, и щелкните Ресурсы > Мои ресурсы.
  8. Щелкните пакет листов, чтобы отобразить страницу информации об элементе.
  9. Щёлкните Опубликовать.
  10. Введите название и теги и щелкните Опубликовать.

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

Публикация больших пакетов листов

Для построения и публикации больших объемов данных, вместо предыдущего рабочего процесса Esri рекомендует использовать группу инструментов Полистный кэш. Эти инструменты используют преимущества многоядерных процессоров для повышения производительности построения и публикации листов.

Выполните эти инструменты в следующем порядке:

  1. Запустите Построить схему листов кэша для определения сетки листов и формата изображений.
  2. Запустите Управление листами кэша для построения листов.
  3. Запустите Экспорт листов кэша для создания пакета листов.
  4. Запустите Опубликовать пакет (в группе инструментов Упаковка) для загрузки листов на портал.
  5. Когда создание пакета листов будет завершено, войдите на портал под той же учетной записью, которая использовалась при создании пакета в ArcMap, и щелкните Ресурсы > Мои ресурсы.
  6. Щелкните пакет листов, чтобы отобразить страницу информации об элементе.
  7. Щёлкните Опубликовать.
  8. Введите заголовок и теги.
  9. Если администратор вашего портала настроил категории содержания, нажмите Назначить категорию и выберите до 20 категорий, для облегчения поиска вашего элемента. Вы также можете использовать отметку Фильтр категорий для сокращения списка категорий.

    Категории доступны начиная с версии ArcGIS Enterprise 10.6.1.

  10. Щелкните Опубликовать.

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

Публикация из файла определения сервиса

Публикация листов и построение кэша может использовать много ресурсов сервера. Если вам необходимо опубликовать большое количество слоев листов, то ваши авторы карт могут создать файлы определения сервиса (.sd) в ArcMap, которые будут содержать всю информацию, требуемую для публикации слоя листов на портале. Затем можно использовать скрипт для загрузки и публикации файлов определения сервиса на вашем портале в нерабочее время. Полученные слои листов будет размещены на хост-сервере портала.

Создание файла определения сервиса

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

  1. Запустите ArcMap и войдите на портал.
  2. Создайте и сохраните карту.

    Подробнее о создании и публикации карты см. разделы картографический сервис справочной системы ArcGIS Server.

  3. Теперь создайте файл определения сервиса.
  4. Щелкните Файл > Опубликовать как > Сервис.
  5. Выберите пункт Сохранить файл определения сервиса и щелкните Далее.
  6. Щелкните Выбрать подключение и выберите Мои размещенные сервисы из ниспадающего списка.
  7. Введите имя файла и щелкните Далее.
  8. Укажите, в каком каталоге на вашем клиентском компьютере будет создан файл определения сервиса, и нажмите Продолжить.

    Откроется диалоговое окно Редактор сервиса.

  9. На левой панели Редактора сервисов щелкните Кэширование.
  10. Выберите Схема листов.
  11. Выберите минимальный и максимальный масштабы для листов и Вычислить размер кэша.
  12. Щелкните Построить кэш вручную после публикации сервиса.
  13. Вы также можете щелкнуть Дополнительные настройки и указать дополнительные настройки для кэша листов.
  14. На левой панели Редактора сервисов щелкните Описание элемента и введите описание слоя листов.

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

  15. Щелкните Анализировать Анализировать (Analyze), чтобы удостовериться в отсутствии ошибок.

    Вы должны исправить любые ошибки до формирования файла определения сервиса. Вы также можете исправить полученные предупреждения и сообщения.

  16. После устранения ошибок, сообщений и предупреждений щелкните Разместить Этап.

Файл определения сервиса сохраняется в выбранном вами местоположении.

Загрузка и публикация файла определения сервиса

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

Загрузка и публикация вручную

Войдите на веб-сайт портала для добавления и публикации файла определения сервиса на вашем портале.

  1. Войдите на портал как участник с правами на создание ресурсов и публикацию размещенных слоев листов и щелкните Ресурсы > Мои ресурсы.
  2. Нажмите кнопку Добавить элемент.
  3. Выберите для загрузки файл с вашего компьютера.
  4. Щелкните кнопку обзора и выберите файл определения сервиса.
  5. Щелкните Опубликовать данный файл как сервис.
  6. Если администратор вашего портала настроил содержание категорий, нажмите Назначить категорию и выберите до 20 категорий, для облегчения поиска вашего элемента. Вы также можете использовать отметку Фильтр категорий для сокращения списка категорий.

    Категории доступны начиная с версии ArcGIS Enterprise 10.6.1.

  7. Введите теги, разделенные запятыми.

    Теги представляют собой слова или короткие фразы, описывающие элемент и облегчающие его поиск. Федеральная земля считается одним тегом, когда как Федеральная, земля рассматривается как два тега.

  8. Щелкните Добавить элемент, чтобы добавить файл определения сервиса и опубликовать слой листов.

    Слой листов публикуется на сервере вашего портала, и определение сервиса и слои добавляются в Мои ресурсы.

  9. Когда слой листов будет опубликован, появится опция Начать построение листов. Щелкните эту ссылку, чтобы создать листы.

По умолчанию только вы имеете доступ к файлу определения сервиса и размещенному слою листов. Вы можете предоставить доступ к файлу и листам другим пользователям в вашей организации или участникам определенных групп.

Запуск скрипта для загрузки и публикации

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

  1. Создайте на компьютере текстовый файл с расширением .py и скопируйте в него следующий скрипт.

    import os, sys, json, urllib, urllib2, httplib, urlparse, mimetools, mimetypes
    from cStringIO import StringIO
    
    # generates a new token from Portal
    def generate_token(baseurl, username, password):
        tokenUrl = urlparse.urljoin(baseurl, 'sharing/generateToken')
        postdata = { 'username': username, 'password': password,
                   'client': 'requestip', 'expiration': 60, 'f': 'json' }
        encoded_postdata = urllib.urlencode(postdata)
        opener = urllib2.build_opener()
        try: resp = opener.open(tokenUrl, data=encoded_postdata)
        except urllib2.HTTPError as e: raise Exception('Unable to connect to Portal, please check the url: {} {}'.format(e.code, e.reason))
        resp_json = json.loads(resp.read())
        if 'error' in resp_json: raise Exception('\n'.join(resp_json['error']['details']))
        return resp_json['token']
        sys.exit(1)
    
    # create proper multi-part POST request data
    def _encode_multipart_formdata(fields, files):
        boundary = mimetools.choose_boundary()
        buf = StringIO()
        for (key, value) in fields.iteritems():
            buf.write('--%s\r\n' % boundary)
            buf.write('Content-Disposition: form-data; name="%s"' % key)
            buf.write('\r\n\r\n%s\r\n' % str(value))
        for (key, filepath, filename) in files:
            buf.write('--%s\r\n' % boundary)
            buf.write('Content-Disposition: form-data; name="%s"; filename="%s"\r\n' % (key, filename))
            buf.write('Content-Type: %s\r\n' % (mimetypes.guess_type(filename)[0] or 'application/octet-stream'))
            f = open(filepath, "rb")
            try:
                buf.write('\r\n' + f.read() + '\r\n')
            finally:
                f.close()
        buf.write('--' + boundary + '--\r\n\r\n')
        buf = buf.getvalue()
        return boundary, buf
    
    # send multi-part POST request
    def _postmultipart(host, selector, fields, files, ssl):
        boundary, body = _encode_multipart_formdata(fields, files)
        headers = { 'Content-Type': 'multipart/form-data; boundary={0}'.format(boundary) }
        if ssl: h = httplib.HTTPSConnection(host)
        else: h = httplib.HTTPConnection(host)
        
        h.request('POST', selector, body, headers)
        resp = h.getresponse()
    
        return resp.read()
    
    # first upload the SD file and create an item in Portal
    def addSDItem(baseurl, user, token, title, file, folder = ''):
        addUrl = 'sharing/rest/content/users/{}/{}addItem'
        if folder != '': addUrl = addUrl.format(user, folder + '/')
        else: addUrl = addUrl.format(user, '')
        
        url = urlparse.urljoin(baseurl, addUrl)
    
        files = [('file', file, os.path.split(file)[1])]
        fields = { 'token' : token, 'f' : 'json', 'type' : 'Service Definition', 'title' : title, 
                   'tags' : 'sampletag', 'name': title, 'typeKeywords' : 'Data, Service Definition, ArcGIS, sd' }
    
        ssl = url.startswith('https://')
        
        parsed_url = urlparse.urlparse(url)
        
        print('Uploading {} to {}..'.format(file, baseurl))
        resp = _postmultipart(parsed_url.netloc, str(parsed_url.path), fields, files, ssl)
        resp_json = json.loads(resp)
    
        if 'error' in resp_json:
          raise Exception('Unable to upload file {}: {}'.format(file, resp_json['error']['message']))
        
        return resp_json['id']
        
    # second publish the uploaded SD item as a new tiled service
    def publishTiles(baseurl, user, token, itemid):
        publishUrl = urlparse.urljoin(baseurl, 'sharing/rest/content/users/{}/publish'.format(user))
        query_dict= { 'f' : 'json', 'token': token, 'itemid': itemid, 'buildInitialCache' : True,
                      'publishParameters' : { 'name' : 'cities' }, 'fileType': 'serviceDefinition' }
                      
        query_string = urllib.urlencode(query_dict)
        print('Publishing tile service from item..')
        response = urllib.urlopen(publishUrl, query_string)
            
        resp_json = json.loads(response.read())
        
        if 'error' in resp_json: raise Exception('Unable to publish item: {}'.format(resp_json['error']['message']))
    
    # read input from command line when run as a standalone script
    if __name__ == '__main__':
        try: 
          url = sys.argv[1]
          user = sys.argv[2]
          password = sys.argv[3]
          f = sys.argv[4]
          title = sys.argv[5]
          if not url.endswith('/'): url += '/' # make sure the url ends with /
        except: # if too few parameters are passed on command line, show usage help
          print('Usage: ')
          print('       publishServiceItem.py [portalUrl] [userName] [password] [sdFilePath] [titleOfServiceItem]')
          print('')
          print('portalUrl           The secure url to the portal, e.g. https://portalmachine.example.com/arcgis/')
          print('userName            The username of a user to publish the service.')
          print('                    This user must have the required publishing privileges.')
          print('password            The password of the user')
          print('sdFilePath          Path to the .sd file containing the service definition')
          print('                    E.g. c:\\temp\cachedService.sd')
          print('titleOfServiceItem  The title to assign to the published item in the portal.')
          sys.exit(1)  
    
        token = generate_token(url, user, password)
    
        id = addSDItem(url, user, token, title, f)
        publishTiles(url, user, token, id)
        print('Publishing complete. Tile generation has been started and may take a while to finish.')

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

    Например, чтобы запустить файл publishServiceItem.py, укажите URL вашего портала, имя и пароль пользователя, из-под которого будет произведен вход, путь к файлу определения сервиса и название сервиса, который будет создан. В этом примере были использованы такие значения: URL портала – https://portal.domain.com/arcgis/, имя пользователя – pub1, пароль пользователя – pub.1, путь к файлу определения сервиса – C:\maps\SDs\mymap.sd, имя сервиса: studytiles.

    publishServiceItem.py https://portal.domain.com/arcgis/ pub1 pub.1 C:\maps\SDs\mymap.sd studytiles

    Подсказка:

    Вы также могли бы использовать следующий более простой скрипт для загрузки файла определения сервиса на портал, публикации слоя листов и построения кэша. Однако для запуска этого скрипта вам нужно установить дополнительные пакеты Python – PortalPy и Python Requests. Пакет PortalPy устанавливается вместе с Portal for ArcGIS. См. Скрипты для задач администрирования с использованием PortalPy в справке к Portal for ArcGIS для получения более подробной информации об установке и использовании этого модуля.

    import portalpy, requests, urlparse, sys, os
    
    # first upload the SD file and create an item in Portal
    def addSDItem(baseurl, user, token, title, file, folder = ''):
        addUrl = 'sharing/rest/content/users/{}/{}addItem'
        if folder != '': addUrl = addUrl.format(user, folder + '/')
        else: addUrl = addUrl.format(user, '')
        
        url = urlparse.urljoin(baseurl, addUrl)
    
        files = { 'file' : (os.path.split(file)[1], open(file, 'rb')) }
        fields = { 'token' : token, 'f' : 'json', 'type' : 'Service Definition', 'title' : title, 
                   'tags' : 'sampletag', 'name': title, 'typeKeywords' : 'Data, Service Definition, ArcGIS, sd' }
    
        print('Uploading {} to {}..'.format(file, baseurl))
        
        # send POST with upload request
        # verify=False turns off SSL cert validation, turn on for production environments with CA-signed certs
        resp = requests.post(url, data=fields, files=files, verify=False)
        resp_json = resp.json()
    
        if 'error' in resp_json:
          raise Exception('Unable to upload file {}: {}'.format(file, resp_json['error']['message']))
        
        return resp_json['id']
    
    # second publish the uploaded SD item as a new tiled service
    def publishTiles(baseurl, user, token, itemid):
        publishUrl = urlparse.urljoin(baseurl, 'sharing/rest/content/users/{}/publish'.format(user))
        query_dict= { 'f' : 'json', 'token': token, 'itemid': itemid, 'buildInitialCache' : True,
                      'publishParameters' : "{ 'name' : 'cities' }", 'fileType': 'serviceDefinition' }
        
        print('Publishing tile service from item..')
        
        # send POST with publish request
        # verify=False turns off SSL cert validation, turn on for production environments with CA-signed certs
        response = requests.post(publishUrl, data=query_dict, verify=False) 
            
        resp_json = response.json()
        
        if 'error' in resp_json: raise Exception('Unable to publish item: {}'.format(resp_json['error']['message']))
    
    # read input from command line when run as a standalone script
    if __name__ == '__main__':
        try: 
          url = sys.argv[1]
          user = sys.argv[2]
          password = sys.argv[3]
          f = sys.argv[4]
          title = sys.argv[5]
          if not url.endswith('/'): url += '/' # make sure the url ends with /
        except: # if too few parameters are passed on command line, show usage help
          print('Usage: ')
          print('       publishServiceItem.py [portalUrl] [userName] [password] [sdFilePath] [titleOfServiceItem]')
          print('')
          print('portalUrl           The secure url to the portal, e.g. https://portalmachine.example.com/arcgis/')
          print('userName            The username of a user to publish the service.')
          print('                    This user must have the required publishing privileges.')
          print('password            The password of the user')
          print('sdFilePath          Path to the .sd file containing the service definition')
          print('                    E.g. c:\\temp\cachedService.sd')
          print('titleOfServiceItem  The title to assign to the published item in the portal.')
          sys.exit(1) 
    
        portal = portalpy.Portal(url, user, password)
        token = portal.generate_token(user, password)
    
        id = addSDItem(url, user, token, title, f)
        publishTiles(url, user, token, id)
        print('Publishing complete. Tile generation has been started and may take a while to finish.')

  4. Спланируйте автоматический запуск вашего скрипта во время минимальной нагрузки на портал.

    Для получения информации о настройке запланированного запуска скрипта см. раздел справки по геообработке в ArcGIS Планирование запуска скрипта Python в определенное время.