AnalyzeForSD (arcpy.mapping)
摘要
分析服务定义草稿 (.sddraft) 文件以便在将服务定义草稿文件转换为服务定义 (.sd) 文件之前确定适用性和潜在性能问题的来源。
讨论
在创建服务定义文件之前可以执行的一项重要任务是分析服务定义草稿文件以识别可能需要解决的错误和其他潜在问题。AnalyzeForSD 可与服务定义草稿一起用于地图、地理处理和影像服务。该函数返回 Python 字典,其中包含错误、警告和消息。例如,为地图服务处理服务定义草稿时,此函数可以:
- 帮助您标识不支持优化的地图绘制性能的图层和符号系统类型。
- 针对可能降低显示性能的潜在问题显示警告。
- 列出关于有助于优化地图服务性能的地图文档的其他信息性消息。
地图服务定义草稿文件的分析基于多个因素,包括地图所使用的数据;地图、图层和符号属性;设置服务属性(如服务将支持的所选功能和相关属性);以及托管服务的服务器类型。Python 字典中会出现三种类型的消息:错误、警告和信息。
地图服务定义草稿文件的错误通常指地图使用了不支持地图服务的地图图层类型或显示选项。创建服务定义文件前必须修复所有错误。警告和其他消息用于识别可能会影响绘图性能和外观的问题。警告提醒用户注意可能会影响绘图性能或绘图外观的问题,但这些问题不会妨碍用户将服务定义草稿文件转换为服务定义文件。
使用 AnalyzeForSD 分析服务定义草稿后,随即可使用过渡服务地理处理工具将其转换为完全合并的服务定义 (.sd) 文件。过渡过程会编译成功发布 GIS 资源所需的所有必要信息。如果选择将数据复制到服务器,则将在过渡服务定义草稿时添加数据。最后,可以使用上载服务定义地理处理工具上载服务定义文件并将其作为 GIS 服务发布到特定的 GIS 服务器。此步骤获取服务定义文件,并将其复制到服务器,提取所需信息并发布 GIS 资源。有关详细信息,请参阅发布工具集概述。
为地图、地理处理、影像和地理编码服务创建服务定义草稿的函数包括:
语法
参数 | 说明 | 数据类型 |
sddraft |
A string that represents the path and file name for the Service Definition Draft (.sddraft) file. | String |
数据类型 | 说明 |
Dictionary |
返回由信息性消息、警告和错误组成的 Python 字典。 |
代码实例
以下脚本分析服务定义草稿 (.sddraft) 文件以识别可能需要在创建服务定义 (.sd) 文件之前解决的潜在性能瓶颈和地图错误。
import arcpy
analysis = arcpy.mapping.AnalyzeForSD(r"C:\Project\Counties.sddraft")
for key in ('messages', 'warnings', 'errors'):
print "----" + key.upper() + "---"
vars = analysis[key]
for ((message, code), layerlist) in vars.iteritems():
print " ", message, " (CODE %i)" % code
print " applies to:",
for layer in layerlist:
print layer.name,
print
以下脚本演示使用 arcpy.mapping 工作流发布地图服务的完整过程。通过将 arcpy.mapping 函数与发布工具集中的地理处理工具加以组合,可实现地图服务的自动发布。工作流开始于要发布的地图文档。首先,使用 arcpy.mapping 函数 CreateMapSDDraft 创建服务定义草稿。接下来,应使用 AnalyzeForSD 函数分析对服务定义草稿进行分析,以找出可能会阻止成功发布的问题。分析服务定义草稿并解决严重问题后,即可开始过渡服务定义。过渡操作获取服务定义草稿并将发布服务所需的所有信息合并到完整的服务定义中。使用 Stage_Service 地理处理工具过渡服务定义。最后,使用 Upload_Service_Definition 地理处理工具将服务定义上载到服务器并发布地图服务。
import arcpy
# define local variables
wrkspc = 'C:/Project/'
mapDoc = arcpy.mapping.MapDocument(wrkspc + 'counties.mxd')
con = r'GIS Servers\arcgis on MyServer_6080 (admin).ags'
service = 'Counties'
sddraft = wrkspc + service + '.sddraft'
sd = wrkspc + service + '.sd'
# create service definition draft
arcpy.mapping.CreateMapSDDraft(mapDoc, sddraft, service, 'ARCGIS_SERVER', con, True, None)
# analyze the service definition draft
analysis = arcpy.mapping.AnalyzeForSD(sddraft)
# stage and upload the service if the sddraft analysis did not contain errors
if analysis['errors'] == {}:
# Execute StageService
arcpy.StageService_server(sddraft, sd)
# Execute UploadServiceDefinition
arcpy.UploadServiceDefinition_server(sd, con)
else:
# if the sddraft analysis contained errors, display them
print analysis['errors']