描述
MapImageSharingDraft 类允许您配置地图图像图层属性并创建服务定义草稿 (.sddraft) 文件,且随后可将该文件与 ArcGIS Enterprise 共享。
讨论
要创建 MapImageSharingDraft 类对象,请使用地图类函数 getWebLayerSharingDraft 并将 service_type 参数设置为 MAP_IMAGE。随后即可通过设置服务级别属性来配置 MapImageSharingDraft 类对象。使用 federatedServerUrl 属性以指定将 web 图层发布到哪个联合服务器。在 MapImageSharingDraft 类对象配置完成后,可以使用 exportToSDDraft 函数将其保存到服务定义草稿 (.sddraft) 文件。然后可以使用过渡服务和上传服务定义工具将其过渡并共享到 ArcGIS Enterprise。有关详细信息,请参阅共享模块简介。
属性
属性 | 说明 | 数据类型 |
copyDataToServer (可读写) | 用于指示地图中的数据是否复制到服务器的布尔值。值为 True 时,将复制地图中的所有数据 - 包括在联合服务器中注册的数据。值为 False 时,将仅复制未在联合服务器中注册的数据 - 服务将引用已在联合服务器中注册的数据。 | Boolean |
credits (可读写) | 用于表示制作者名单的字符串。 | String |
description (可读写) | 用于表示描述的字符串。 | String |
federatedServerUrl (可读写) | 用于表示 ArcGIS Enterprise 门户联合服务器 URL 的字符串。 提示:联合服务器 URL 也可以用于上传服务定义工具中的 in_server 参数。以下代码示例对此进行了演示。 | String |
offline (可读写) | 用于决定是否使用门户连接的布尔值。如果将 offline 设置为 False,则您必须登录门户,同时向 federatedServerUrl 属性提供 ArcGIS Enterprise 门户联合服务器 URL,从而使用 exportToSDDraft 函数创建服务定义草稿 (.sddraft) 文件。如果将 offline 设置为 True,则可以在不登录门户、不填充 federatedServerUrl 属性的情况下创建服务定义草稿文件。 | Boolean |
overwriteExistingService (可读写) | 决定是否覆盖现有 web 图层的布尔值。 | Boolean |
portalFolder (可读写) | 表示要将 Web 图层发布到的门户文件夹的名称的字符串。默认文件夹是“我的内容”中的根文件夹。 | String |
serverFolder (可读写) | 用于表示要将服务发布到的服务器文件夹名称的字符串。默认文件夹是联合服务器的根文件夹。 | String |
serverType (只读) | 返回一个字符串,以表示根据地图类中的 getWebLayerSharingDraft 函数创建共享草稿时指定的服务器类型。从 serverType 返回的 MapImageSharingDraft 唯一可能的值为 FEDERATED_SERVER。FEDERATED_SERVER 的 serverType 表示支持共享至 ArcGIS Enterprise 门户联合服务器。 | String |
serviceName (可读写) | 用于表示 web 图层名称的字符串。用户可以看到该名称并使用该名称来识别服务。名称只能包含字母数字字符和下划线。不允许使用空格或特殊字符。名称长度不能超过 120 个字符。 | String |
summary (可读写) | 用于表示摘要的字符串。 | String |
tags (可读写) | 用于表示标签的字符串。可以添加多个标签,标签之间用逗号或分号进行分隔。 | String |
useLimitations (可读写) | 用于表示使用限制的字符串。 | String |
方法概述
方法 | 说明 |
exportToSDDraft (out_sddraft) | 将 MapImageSharingDraft 转换为服务定义草稿 (.sddraft) 文件。 |
方法
exportToSDDraft (out_sddraft)
参数 | 说明 | 数据类型 |
out_sddraft | 用于表示输出服务定义草稿 (.sddraft) 文件的路径和文件名的字符串。 | String |
MapImageSharingDraft 配置完成后,即可将其作为服务定义草稿 (.sddraft) 文件进行保存。然后可以使用过渡服务和上传服务定义工具将其过渡并共享到 ArcGIS Enterprise 门户联合服务器。
提示:
如果 offline 属性设置为 False,则您必须登录门户,同时向 federatedServerUrl 属性提供 ArcGIS Enterprise 门户联合服务器 URL,从而使用 exportToSDDraft 函数创建服务定义草稿 (.sddraft) 文件。但是,如果将 offline 设置为 True,则可以在不登录门户、不填充 federatedServerUrl 属性的情况下创建服务定义草稿文件。
代码示例
import arcpy
import os
# Set output file names
outdir = r"C:\Project\Output"
service = "MapImageSharingDraftExample"
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]
# Create MapImageSharingDraft and set service properties
sharing_draft = m.getWebLayerSharingDraft("FEDERATED_SERVER", "MAP_IMAGE", service)
sharing_draft.federatedServerUrl = "https://MyFederatedServer.esri.com/server"
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.StageService_server(sddraft_output_filename, sd_output_filename)
# Share to portal
print("Uploading Service Definition...")
arcpy.UploadServiceDefinition_server(sd_output_filename, "https://MyFederatedServer.esri.com/server")
print("Successfully Uploaded service.")
以下脚本可以为地图创建地图图像图层服务定义草稿 (.sddraft) 文件。然后该脚本可通过使用 xml.dom.minidom 标准 Python 库,修改服务定义草稿文件,从而在地图图像图层上启用要素访问。然后,修改后的服务定义文件会发布到 ArcGIS Enterprise 门户联合服务器。门户信息可从 ArcGIS Pro 的门户页面中获得。
import arcpy
import os
import xml.dom.minidom as DOM
# Set output file names.
outdir = r"C:\Project\Output"
service = "MapImage_ModifyXML_EnableFeatureAccess"
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]
# Create MapImageSharingDraft and set service properties.
sddraft = m.getWebLayerSharingDraft('FEDERATED_SERVER', 'MAP_IMAGE', service)
sddraft.federatedServerUrl = "https://MyFederatedServer.esri.com/server"
# Create Service Definition Draft file.
sddraft.exportToSDDraft(sddraft_output_filename)
# Read the sddraft xml.
doc = DOM.parse(sddraft_output_filename)
# Find all elements named TypeName. This is where the server object extension
# (SOE) names are defined.
typeNames = doc.getElementsByTagName('TypeName')
for typeName in typeNames:
# Get the TypeName we want to enable.
if typeName.firstChild.data == "FeatureServer":
extension = typeName.parentNode
for extElement in extension.childNodes:
# Enable Feature Access.
if extElement.tagName == 'Enabled':
extElement.firstChild.data = 'true'
# Output to a new sddraft.
sddraft_mod_xml = service + '_mod_xml' + '.sddraft'
sddraft_mod_xml_file = os.path.join(outdir, sddraft_mod_xml)
f = open(sddraft_mod_xml_file, 'w')
doc.writexml(f)
f.close()
# Stage Service.
sd_filename = service + '.sd'
sd_output_filename = os.path.join(outdir, sd_filename)
arcpy.StageService_server(sddraft_mod_xml_file, sd_output_filename)
# Share to portal.
print("Uploading Service Definition...")
arcpy.UploadServiceDefinition_server(sd_output_filename, "https://MyFederatedServer.esri.com/server")
print("Successfully Uploaded service.")