摘要
TileSharingDraft 类允许您为 web 切片图层创建服务定义草稿文件 (.sddraft),该文件将所有数据复制到 ArcGIS Enterprise 或 ArcGIS Online。
说明
要创建 TileSharingDraft 对象,使用 Map 对象的 getWebLayerSharingDraft 方法并将 service_type 参数设置为 TILE。 随后即可通过设置服务级别属性和元数据属性来配置 TileSharingDraft 对象。
注:
如果未设置元数据属性(credits、description、summary、tags 和 useLimitations)或其具有空字符串,则 Web 图层项目将从地图或图层中获取元数据,具体取决于共享的内容。 有关 Web 图层如何获取元数据的详细信息,请参阅 Web 图层元数据。
配置 TileSharingDraft 对象后,可以使用 exportToSDDraft 方法将其保存到服务定义草稿文件 (.sddraft)。 随后即可使用过渡服务和上传服务定义工具将其过渡和共享给 ArcGIS Enterprise 或 ArcGIS Online。 有关详细信息,请参阅 arcpy.sharing 简介。
代码示例可用于以下用途:
属性
属性 | 说明 | 数据类型 |
credits (可读写) | 用于表示制作者名单的字符串。 | String |
description (可读写) | 用于表示描述的字符串。 | String |
offline (可读写) | 决定是否使用门户连接的布尔值。 如果将 offline 设置为 False,则必须登录门户才能使用 exportToSDDraft 函数创建服务定义草稿文件 (.sddraft)。 如果将 offline 设置为 True,则无需登录到门户即可创建服务定义草稿文件。 | Boolean |
offlineTarget (可读写) | 此字符串用于确定将服务定义发布到的目标门户版本。 指定版本可确保服务定义包含与门户兼容的内容。 仅在 offline 设置为 True 时支持此属性。
| String |
portalFolder (可读写) | 表示要将 Web 图层发布到的门户文件夹的名称的字符串。 默认文件夹是“我的内容”中的根文件夹。 | String |
serverType (只读) | 返回一个字符串,以表示根据地图类中的 getWebLayerSharingDraft 函数创建共享草稿时指定的服务器类型。 从 TileSharingDraft 的 serverType 中返回的唯一可能的值为 HOSTING_SERVER。 HOSTING_SERVER 的 serverType 表示支持共享至 ArcGIS Enterprise 或 ArcGIS Online。 | String |
serviceName (可读写) | 用于表示 web 图层名称的字符串。 用户可以看到该名称并使用该名称来识别 web 图层。 名称只能包含字母数字字符和下划线。 不允许使用空格或特殊字符。 名称不能超过 120 个字符。 | String |
summary (可读写) | 用于表示摘要的字符串。 | String |
tags (可读写) | 用于表示标签的字符串。 可以添加多个标签,标签之间用逗号或分号进行分隔。 | String |
useLimitations (可读写) | 用于表示使用限制的字符串。 | String |
方法概述
方法 | 说明 |
exportToSDDraft (out_sddraft) | 将 TileSharingDraft 转换为服务定义草稿 (.sddraft) 文件。 |
方法
代码示例
以下脚本将为地图创建 Web 切片图层服务定义草稿文件 (.sddraft),并设置元数据属性。 Web 切片图层将发布到 ArcGIS Enterprise 或 ArcGIS Online 的文件夹中并与所有人(公共)共享。 门户信息可从 SignInToPortal 函数中获得。
import arcpy
import os
import xml.dom.minidom as DOM
# Sign in to portal
arcpy.SignInToPortal("https://www.arcgis.com", "MyUserName", "MyPassword")
# Set output file names
outdir = r"C:\Project\Output"
service_name = "TileSharingDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)
# Reference map to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]
# Create TileSharingDraft and set metadata and portal folder properties
server_type = "HOSTING_SERVER"
sddraft = m.getWebLayerSharingDraft(server_type, "TILE", service_name)
sddraft.credits = "These are credits"
sddraft.description = "This is description"
sddraft.summary = "This is summary"
sddraft.tags = "tag1, tag2"
sddraft.useLimitations = "These are use limitations"
sddraft.portalFolder = "my folder name"
# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)
# Read the .sddraft file
docs = DOM.parse(sddraft_output_filename)
key_list = docs.getElementsByTagName('Key')
value_list = docs.getElementsByTagName('Value')
# Change following to "true" to share
SharetoOrganization = "false"
SharetoEveryone = "true"
SharetoGroup = "false"
# If SharetoGroup is set to "true", uncomment line below and provide group IDs
GroupID = "" # GroupID = "f07fab920d71339cb7b1291e3059b7a8, e0fb8fff410b1d7bae1992700567f54a"
# Each key has a corresponding value. In all the cases value of key_list[i] is value_list[i]
for i in range(key_list.length):
if key_list[i].firstChild.nodeValue == "PackageUnderMyOrg":
value_list[i].firstChild.nodeValue = SharetoOrganization
if key_list[i].firstChild.nodeValue == "PackageIsPublic":
value_list[i].firstChild.nodeValue = SharetoEveryone
if key_list[i].firstChild.nodeValue == "PackageShareGroups":
value_list[i].firstChild.nodeValue = SharetoGroup
if SharetoGroup == "true" and key_list[i].firstChild.nodeValue == "PackageGroupIDs":
value_list[i].firstChild.nodeValue = GroupID
# Write to the .sddraft file
f = open(sddraft_output_filename, 'w')
docs.writexml(f)
f.close()
# Stage Service
print("Start Staging")
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)
# Share to portal
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, server_type)
print("Finish Publishing")
以下脚本将地图中的图层列表作为 web 切片图层发布至 ArcGIS Enterprise 或 ArcGIS Online。 门户信息可从 SignInToPortal 函数中获得。
import arcpy
import os
# Sign in to portal
arcpy.SignInToPortal("https://www.arcgis.com", "MyUserName", "MyPassword")
# Set output file names
outdir = r"C:\Project\Output"
service = "TileSharingDraftExample"
sddraft_filename = service + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
# Reference map to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps("World")[0]
lyrs = []
lyrs.append(m.listLayers('cities')[0])
lyrs.append(m.listLayers('counties')[0])
# Create TileSharingDraft and set metadata properties
sharing_draft = m.getWebLayerSharingDraft("HOSTING_SERVER", "TILE", service, lyrs)
sharing_draft.summary = "My Summary"
sharing_draft.tags = "My Tags"
sharing_draft.description = "My Description"
sharing_draft.credits = "My Credits"
sharing_draft.useLimitations = "My Use Limitations"
# Create Service Definition Draft file
sharing_draft.exportToSDDraft(sddraft_output_filename)
# Stage Service
sd_filename = service + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)
# Share to portal
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, "My Hosted Services")
print("Finish Publishing")
以下脚本将为目标门户版本创建离线服务定义,并将其发布为 Web 切片图层。
import arcpy
import os
# Set output file names
outdir = r"C:\Project\Output"
service_name = "TileSharingDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)
# Reference map to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]
# Create TileSharingDraft and set offline and offlineTarget properties
server_type = "HOSTING_SERVER"
sddraft = m.getWebLayerSharingDraft(server_type, "TILE", service_name)
sddraft.offline = True
# Set offlineTarget property to "ONLINE" for ArcGIS Online or "ENTERPRISE_11" for ArcGIS Enterprise 11.0 or later
# The default is ArcGIS Enterprise 10.9.1 or earlier
sddraft.offlineTarget = "ENTERPRISE_10x"
# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)
# Sign in to portal to upload and publish
arcpy.SignInToPortal("https://portal.domain.com/webadaptor",
"MyUserName", "MyPassword")
# Stage Service
print("Start Staging")
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)
# Share to portal
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, server_type)
print("Finish Publishing")