摘要
CreateImageSDDraft 函数是使用 ArcPy 自动发布镶嵌数据集或栅格数据集作为“影像服务”的第一步。基于 CreateImageSDDraft 创建的输出是服务定义草稿 (.sddraft) 文件,该文件由栅格数据集或地理数据库中的镶嵌数据集、服务器信息以及一组服务属性组合而成。该服务定义草稿可作为服务定义过渡,然后作为影像服务上传至指定的 ArcGIS 服务器。
服务器信息包括服务器连接或已发布的服务器类型,正在发布的服务的类型,服务的元数据(项目信息)和数据参考(是否向服务器复制数据)。
语法
CreateImageSDDraft (raster_or_mosaic_layer, out_sddraft, service_name, {server_type}, {connection_file_path}, {copy_data_to_server}, {folder_name}, {summary}, {tags})
参数 | 说明 | 数据类型 |
raster_or_mosaic_layer | 想要发布的栅格图层或镶嵌图层。 | String |
out_sddraft | 用于表示输出服务定义草稿 (.sddraft) 文件的路径和文件名的字符串。 | String |
service_name | 用于表示服务名称的字符串。该名称用于向用户显示并识别服务。名称只能包含字母数字字符和下划线。不允许使用空格或特殊字符。名称长度不能超过 120 个字符。 | String |
server_type | 表示服务器类型的字符串。如果未提供 connection_file_path 参数,则必须提供 server_type。如果提供了 connection_file_path 参数,则可从连接文件获取 server_type。在这种情况下,您可以选择 FROM_CONNECTION_FILE 或完全跳过该参数。
(默认值为 ARCGIS_SERVER) | String |
connection_file_path | 用于表示 ArcGIS Server 连接文件 (.ags) 的路径和文件名的字符串。 (默认值为 None) | String |
copy_data_to_server | 指示由镶嵌数据集引用的源数据、镶嵌数据集本身或发布为影像服务的栅格数据集是否将被复制到服务器的布尔值。 copy_data_to_server 参数仅在 server_type 为 ARCGIS_SERVER 且 connection_file_path 未指定的情况下使用。如果 connection_file_path 已指定,则会使用服务器的已注册数据存储。例如,对于包含由镶嵌数据集引用的源数据的工作空间,如果镶嵌数据集本身或栅格数据集已注册到服务器,则 copy_data_to_server 将始终为 False。相反,对于包含由镶嵌数据集引用的源数据的工作空间,如果镶嵌数据集或栅格数据集未注册到服务器,则 copy_data_to_server 将始终为 True。
(默认值为 False) | Boolean |
folder_name | 用于表示您要向其中发布服务定义的文件夹名称的字符串。如果该文件夹当前不存在,则将创建该文件夹。默认的文件夹为服务器根级别。 (默认值为 None) | String |
summary | 用于表示项目描述摘要的字符串。 使用此参数可以覆盖用户界面摘要,如果摘要不存在,则将提供摘要。 (默认值为 None) | String |
tags | 用于表示项目描述标签的字符串。 使用此参数可以覆盖用户界面标签,如果标签不存在,则将提供标签。 (默认值为 None) | String |
代码示例
CreateImageSDDraft 示例 1
创建影像服务定义草稿文件。
import arcpy
ws = "C:/workspace"
mdpath = os.path.join(ws, "fgdb.gdb/mdDEM")
con = os.path.join(ws, "myserver_6080 (publisher).ags")
service = 'dem_service'
sddraft = os.path.join(ws, service + '.sddraft')
arcpy.CreateImageSDDraft(mdpath, sddraft, service, 'ARCGIS_SERVER',
con, True, None, "Publish las MD",
"las,image service")
CreateImageSDDraft 示例 2
通过镶嵌数据集发布影像服务。
# It is recommended that you set the default mosaic dataset properly before
# publishing. A connection to ArcGIS Server must be established in the
# Catalog window of ArcMap before running this script
import arcpy
import os
import sys
# Define local variables:
# The folder for service definition draft and service definition files
MyWorkspace = r"\\myserver\ArcPyPublishing"
Name = "OrthoImageService"
InputData = r"\\myserver\ArcPyPublishing\fgdb.gdb\ortho_images"
Sddraft = os.path.join(MyWorkspace, Name + ".sddraft")
Sd = os.path.join(MyWorkspace, Name + ".sd")
con = os.path.join(MyWorkspace, "arcgis on myserver_6080 (admin).ags")
# Create service definition draft
try:
print("Creating SD draft")
arcpy.CreateImageSDDraft(InputData, Sddraft, Name, 'ARCGIS_SERVER', con,
False, None, "Ortho Images",
"ortho images,image service")
except Exception as err:
print(err[0] + "\n\n")
sys.exit("Failed to create SD draft")
# Analyze the service definition draft
analysis = arcpy.mapping.AnalyzeForSD(Sddraft)
print("The following was returned during analysis of the image service:")
for key in list(analysis.keys()):
print("---{}---".format(key.upper()))
for ((message, code), layerlist) in analysis[key].items():
print(" {} (CODE {})".format(message, code))
print(" applies to: {}".format(
" ".join([layer.name for layer in layerlist])))
# Stage and upload the service if the sddraft analysis did not contain errors
if analysis['errors'] == {}:
try:
print("Adding data path to data store to avoid copying data to server")
arcpy.AddDataStoreItem(con, "FOLDER", "Images", MyWorkspace,
MyWorkspace)
print "Staging service to create service definition"
arcpy.StageService_server(Sddraft, Sd)
print "Uploading the service definition and publishing image service"
arcpy.UploadServiceDefinition_server(Sd, con)
print "Service successfully published"
except arcpy.ExecuteError:
print(arcpy.GetMessages() + "\n\n")
sys.exit("Failed to stage and upload service")
except Exception as err:
print(err[0] + "\n\n")
sys.exit("Failed to stage and upload service")
else:
print("Service was not published because of errors found during analysis.")
print(analysis['errors'])