Публикация листов
В этом разделе
- Создание и публикация карты в ArcMap
- Создание и публикация карты в ArcGIS Pro
- Опубликовать размещенный векторный слой
- Публикация файла определения сервиса
Листы, опубликованные и размещенные на портале, позволяют быстро визуализировать большие наборы данных, используя заранее созданные изображения карты, или листы. Размещенные листы выступают как географическая подложка для ваших рабочих слоев. Например, вы можете добавить листы окрестных улиц, чтобы дать визуальное представление о местонахождении уличных знаков из векторного слоя.
Вы можете опубликовать листы из файла определения сервиса или документа ArcMap для размещения на вашем портале.
- Определите свою карту в ArcMap и позвольте своему порталу создать листы.
- Определите свою карту в ArcGIS Pro и позвольте своему порталу создать листы.
- Опубликуйте листы из имеющегося размещенного векторного слоя,что позволит вам одновременно иметь размещенный слой листов и размещенный векторный слой.
- Задайте файл определения сервиса в ArcGIS for Desktop, загрузите его и укажите порталу построить листы.
Вы можете выбрать, построить ли кэш для ваших листов в процессе публикации автоматически или построить его в ручном режиме после публикации. Более подробно см. Советы и рекомендации по кэшу листов.
У вас должны быть права на создание ресурсов и публикацию размещенных слоев листов для публикации документа ArcMap или файла определения сервиса в качестве размещенного слоя листов.
Создание и публикация карты в ArcMap
Из ArcMap вы можете опубликовать листы, разместив их на портале.
Перед тем как запустить ArcMap, удостоверьтесь в том, что ArcGIS for Desktop подключен к вашему порталу.
- Запустите ArcMap и откройте карту, которую вы хотите опубликовать.
- Войдите на свой портал под учетной записью организации, имеющей права для создания ресурсов и публикации размещенных слоев листов.
- Щелчок Файл > Войти.
- Введите имя пользователя и пароль для вашего портала и щелкните Вход (Sign In).
- Щелчок Файл > Опубликовать как > Сервис.
- Выберите Опубликовать сервис и нажмите Далее.
Внимание:
Если вы выбрали опцию перезаписи сервиса, то существующий элемент листов карты удаляется с портала, и создается новый элемент с тем же именем. Новый элемент создается в корневой папке, и ему будет присвоен новый ID. Вам требуется перенастроить параметры доступа и при необходимости переместить элемент обратно в папку, в которой он находился до повторной публикации.
- В ниспадающем списке типов подключения выберите Мои сетевые сервисы. Затем введите имя для ваших листов и нажмите Продолжить (Continue).
- Укажите требуемые свойства в Редакторе сервисов. Здесь вы можете выбрать операции, которые пользователи смогут применять к листам, и указать, как будет организован доступ к ним на сервере.
Более подробно об оптимальной настройке листов для развертывания см. раздел справки ArcGIS Server Настройка и конфигурирование сервисов. Некоторые из свойств, обсуждаемых в этом разделе, относятся только к ArcGIS for Server и не используются при работе с размещенными слоями листов.
Подсказка:
Если вы захотите закрыть в этом сеансе Редактор сервиса, вам будет предложено сохранить вашу работу в виде черновика сервиса. Черновики сервисов позволяют вам позднее возвращаться к конфигурации сервиса. По умолчанию черновики сервисов сохраняются в папке Черновики (Drafts) подключения Мои размещенные карты (My Hosted Maps). Для получения дополнительной информации см. раздел справки ArcGIS Server О черновиках сервисов.
- В левой части Редактора сервиса щелкните Функции (Capabilities) и затем Кэшированный сервис (Tiled Mapping), чтобы опубликовать вашу карту в виде слоя листов. Включите опцию Доступ к объектам (Feature Access) для публикации слоя пространственных объектов с вашими листами, если вы собираетесь настроить всплывающие окна для слоя при добавлении его во вьюер карт.
Вы можете щелкнуть подпункт Использование листов кэша (Tiled Mapping) в левой части Редактора сервиса, чтобы задать дополнительные свойства, определяющие возможности клиентов при работе с опубликованным слоем листов.
- Щелкните пункт Кэширование (Caching), чтобы задать свойства листов кэша. См. Создание кэша карты в справке по ArcGIS Server для подробного описания шагов. Обратите внимание, что некоторые дополнительные настройки кэширования доступны только при публикации напрямую в ArcGIS for Server.
- На левой панели Редактор сервиса нажмите Описание элемента (Item Description) и введите краткое описание и теги для вашего слоя листов. Вам понадобится ввести эту информацию перед тем, как вы сможете опубликовать сервис. Более подробно см. в разделе описания элементов раздела Определение свойств картографического сервиса справки ArcGIS Server.
- В левой части Редактора сервиса щелкните Общий доступ (Sharing) и выберите, кому будет предоставлен доступ к этому слою листов. По умолчанию опубликованный слой листов доступен только на странице Мои ресурсы, то есть он будет доступен только вам. Ваш слой листов будет всегда доступен на странице Мои ресурсы, но вы также можете предоставить к нему доступ всем пользователям или только членам определенных групп.
- В окне Редактор сервисов щелкните Анализировать .
Будет произведена проверка карты на возможность быть опубликованной. Необходимо устранить Ошибки в окне Подготовить (Prepare) перед публикацией. При необходимости можно устранить предупреждения и информационные сообщения для дальнейшего улучшения производительности и визуализации публикуемых листов. Более подробно об устранении этих проблем см. в разделе справки ArcGIS Server Анализ ГИС-ресурса.
- Вы также можете нажать кнопку Предварительный просмотр (Preview). в Редакторе сервиса. Тогда вы сможете увидеть, как размещенный слой листов будет выглядеть при просмотре в веб-браузере.
- После устранения ошибок и при необходимости любых сообщений и предупреждений щелкните Опубликовать .
Примечание:
На этом шаге ваши данные копируются на сервер.Время публикации зависит от объема данных, скорости подключения к сети и пропускной способности канала. Для создания листов также потребуется некоторое время.
После публикации листов на портале вы увидите их, раскрыв папку Мои размещенные сервисы в окне Каталога.
Размещенный слой листов будет доступен на странице Мои ресурсы веб-сайта портала в виде двух независимых элементов: Листы (Tiles) и Определение сервиса. Определение сервиса – это файл архива, содержащий карту, ее данные и настройки публикации листов. Определение сервиса можно передать и опубликовать на любом компьютере, где есть ArcGIS for Server.
Создание и публикация карты в ArcGIS Pro
Используя карту в ArcGIS Pro вы можете опубликовать листы, разместив их на портале.
Перед тем как продолжить, удостоверьтесь в том, у вас активно подключение к порталу.
Также обратите внимание, что веб-браузеры не могут отображать некоторые сложные картографические символы, которые вы могли использовать при создании карты. Можно использовать большинство символов, однако, в некоторых случаях, символы при публикации могут быть упрощены. См. раздел Создание сервисов объектов в Справке ArcGIS for Server, чтобы узнать о поддерживаемых символах и внести соответствующие исправления перед публикацией.
- Запустите ArcGIS Pro и откройте проект с картой, которую вы хотите опубликовать.
- Войдите в свою организацию из ArcGIS Pro с помощью учетной записи, которая имеет права для создания ресурсов и публикации размещенных слоев листов.
- Щелкните Веб-слой (Web Layer) в группе Опубликовать как (Share As) на закладке Общий доступ (Share).
- Введите имя слоя пространственных объектов. По умолчанию слой будет сохранен в Мои ресурсы. Вы можете сохранить его в папку в Мои ресурсы, введя имя папки или указав путь к ней.
- Выберите Листы (Tiles) в поле Тип слоя (Layer Type).
- Введите краткое описание и теги слоя листов.
- Укажите, кто будет иметь доступ к слою листов. Все слои, которые вы опубликуете, будут автоматически доступны вам в вашей персональной рабочей области в вашей организации (Мои ресурсы) Ваши ресурсы будут недоступны для других, пока вы не предоставите доступ к ним при помощи одной или нескольких следующих опций:
- Моя организация (My Organization) – Выбор этой опции позволяет предоставить доступ к элементу всем авторизованным пользователям организации.
- Для всех (Everyone) – При использовании этой опции слой будет доступен всем пользователям вашего портала.
- Группы – Можно открыть общий доступ для членов групп, к которым вы принадлежите.
- Перейдите на закладку Настройка, чтобы указать настройки кэширования.
- Измените положение бегунка Уровень детализации (Level of Detail), чтобы указать минимальный и максимальный масштаб для вашего слоя листов.
Размер выходного кэша будет меняться с изменением минимального и максимального масштабов.
- Выберите опцию Построить кэш (Build cache) во время публикации слоя или Построить кэш вручную (Build cache manually) после того, как слой будет опубликован.
Откройте слой листов на веб-сайте портала после того, как слой будет опубликован, чтобы построить кэш вручную.
- Измените положение бегунка Уровень детализации (Level of Detail), чтобы указать минимальный и максимальный масштаб для вашего слоя листов.
- Щелкните на закладке Ресурсы (Content), чтобы убедиться, что слой содержит нужные слои данных.
- Щелкните Анализировать для проверки на наличие ошибок и проблем.
При обнаружении проблем в окне Сообщения (Messages) будет показан список сообщений. Щелкните правой кнопкой мыши на каждом сообщении, чтобы получить более подробную информацию, прочитать справку по данной ошибке и выбрать подходящее решение. Вам потребуется исправить ошибки перед публикацией. При необходимости можно устранить предупреждения, чтобы улучшить производительность и внешний вид размещенного слоя листов.
- После устранения ошибок и при необходимости любых предупреждений щелкните Опубликовать .
Примечание:
На этом шаге ваши данные копируются на сервер. Время, которое займет публикация, будет зависеть от размера данных, скорости и пропускной способности канала вашего Интернет-подключения.
Когда публикация будет завершена, вы можете щелкнуть Управлять веб-слоем (Manage the web layer), чтобы открыть веб-сайт портала.
Опубликовать размещенный векторный слой
Вы можете опубликовать размещенный слой листов на вашем портале с использованием существующего размещенного слоя объектов. Это особенно удобно, если на локальном компьютере не установлены продукты ArcGIS. Например, вы можете опубликовать шейп-файл как размещенный слой пространственных объектов, а затем опубликовать этот слой пространственных объектов как размещенный слой листов.
Примечание:
Изменения, внесенные в размещенный слой объектов, не будут автоматически отражаться в размещенном слое листов. Вы должны будете повторно опубликовать размещенный слой листов из обновленного размещенного слоя объектов.
Имейте также в виду, что имеются некоторые ограничения использования стилей при публикации размещенного слоя листов из размещенного векторного слоя.
Выполните следующие шаги для публикации размещенного слоя листов из размещенного слоя объектов:
- Войдите с использованием учетной записи, которая имеет права на публикацию размещенных слоев листов, и щелкните Мои ресурсы.
- Для публикации выполните одно из следующих действий:
- Щелкните размещенный слой объектов, который вы хотите опубликовать, и выберите Опубликовать.
- Щелчок Создать > Слой листов и выберите Векторный слой для его публикации в виде листов.
- Введите название, теги и краткую информацию, а также выберите папку для размещенного слоя листов.
- По желанию измените диапазон масштабов, в котором слой будет отображаться, выбрав масштабы в ниспадающем списке Видимый диапазон.
- Нажмите ОК.
- Выберите масштабы, для которых будут генерироваться листы. Затем щелкните Построить листы (Create Tiles).
Внимание:
Включение в диапазон крупных масштабов может значительно увеличить ресурсы, которые будут использованы на вашем сервере. Не создавайте листы, превышающие точность ваших данных.
- Просмотрите сообщение о количестве создаваемых листов. Если вы хотите продолжить, щелкните Да, создать листы (Yes, create tiles).
Публикация файла определения сервиса
Публикация листов и построение кэша может использовать много ресурсов сервера. Если вам необходимо опубликовать большое количество слоев листов, то ваши авторы карт могут создать файлы определения сервиса (.sd) в ArcMap, которые будут содержать всю информацию, требуемую для публикации слоя листов на портале. Затем можно использовать скрипт для загрузки и публикации файлов определения сервиса на вашем портале в нерабочее время. Полученные слои листов будут размещены на сервере вашего портала.
Создание файла определения сервиса
Автор карты должен выполнить следующие действия, чтобы создать файл определения сервиса, содержащий данные и символы, необходимые для слоя листов, который будет размещен на портале.
- Запустите ArcMap и войдите на портал.
- Создайте и сохраните карту.
Подробнее о создании и публикации карты см. разделы картографический сервис справочной системы ArcGIS.
- Щелчок Файл > Опубликовать как > Сервис.
- Выберите пункт Сохранить файл определения сервиса (Save a service definition file) и щелкните Далее.
- Щелкните Выбрать подключение (Choose a connection) и выберите Мои размещенные сервисы из ниспадающего списка.
- Введите имя файла и щелкните Далее.
- Укажите, в каком каталоге на вашем клиентском компьютере будет создан файл определения сервиса, и нажмите Продолжить (Continue).
Откроется диалоговое окно Редактор сервиса.
- На левой панели Редактора сервисов щелкните Кэширование (Caching).
- Выберите Схема листов (Tiling Scheme).
- Выберите минимальный и максимальный масштабы для листов и Вычислить размер кэша (Calculate Cache Size).
- Щелкните Построить кэш вручную после публикации сервиса (Build cache manually after the service is published).
- Вы также можете щелкнуть Дополнительные настройки (Advanced Settings) и ввести дополнительные настройки для кэша листов.
- На левой панели Редактор сервиса щелкните Описание элемента (Item Description) и введите описание вашего слоя листов.
Вам нужно указать краткое описание и теги, чтобы вы могли создать файл определения сервиса.
- Щелкните Анализировать , чтобы удостовериться в отсутствии ошибок.
Вы должны исправить любые ошибки до формирования файла определения сервиса. Вы также можете исправить полученные предупреждения и сообщения.
- После устранения ошибок, сообщений и предупреждений щелкните Разместить (Stage) .
Файл определения сервиса сохраняется в выбранном вами местоположении.
Загрузка и публикация файла определения сервиса
Если у вас есть файл определения сервиса от автора, то вы можете вручную загрузить его в Мои ресурсы на вашем портале и опубликовать слой листов или запланировать запуск скрипта для загрузки и публикации файла.
Загрузка и публикация вручную
Войдите на веб-сайт портала для добавления и публикации файла определения сервиса на вашем портале.
- Войдите на ваш портал как пользователь с правами на создание ресурсов и публикацию размещенных слоев листов и откройте Мои ресурсы.
- Нажмите кнопку Добавить элемент.
- Выберите для загрузки файл с вашего компьютера.
- Щелкните кнопку обзора и выберите файл определения сервиса.
- Щелкните Опубликовать данный файл как сервис (Publish this file as a service).
- Введите теги, разделенные запятыми.
Теги представляют собой слова или короткие фразы, описывающие элемент и облегчающие его поиск.Федеральная земля считается одним тегом, а Федеральная, земля уже расценивается как два тега.
- Щелкните Добавить элемент, чтобы добавить файл определения сервиса и опубликовать слой листов.
Слой листов публикуется на сервере вашего портала, и определение сервиса и слои добавляются в Мои ресурсы.
- Когда слой листов будет опубликован, вам будет предложено Начать построение листов (Start building tiles). Щелкните эту ссылку, чтобы создать листы.
По умолчанию только вы имеете доступ к файлу определения сервиса и размещенному слою листов. Вы можете предоставить доступ к файлу и листам другим пользователям в вашей организации или членам определенных групп.
Запуск скрипта для загрузки и публикации
Для загрузки и публикации файла определения сервиса в нерабочее время спланируйте автоматический запуск следующего скрипта на компьютере ArcGIS Server:
- Создайте на компьютере текстовый файл с расширением .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.')
- Создайте командный файл или скрипт оболочки, который позволит спланировать автоматический запуск скрипта Python.
- В этот файле произведите запуск скрипта 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.')
- Спланируйте автоматический запуск вашего скрипта во время минимальной нагрузки на портал.
Для получения информации о настройке запланированного запуска скрипта см. раздел справки по геообработке в ArcGIS Планирование запуска скрипта Python в определенное время.