arcpy 将本地mxd自动发布arcgis server 的mapserver

如果在发布前退出服务编辑器,则系统将询问您是否要保存草稿服务定义。如果选择保存,则将创建草稿服务定义文件 (.sddraft),其中包含对服务所做的所有修改。可以可通过 ArcMap 或从 ArcCatalog 或目录窗口打开此草稿服务定义。

为地图、地理处理、影像和地理编码服务创建服务定义草稿的函数包括:

CreateMapSDDraft
CreateGPSDDraft
CreateImageSDDraft
CreateGeocodeSDDraft

过渡的服务定义(.sd)
服务定义文件根据在创建时是连接到 ArcGIS Server 站点还是连接到门户组织而不同。在创建服务定义文件时,如果您连接到的是 ArcGIS Server 站点或选择包括 GIS 资源引用的数据,则只能在 ArcGIS Server 站点中使用文件,无法将其发布到 ArcGIS Enterprise 门户或 ArcGIS Online。同样,在创建服务定义文件时,如果选择的是连接到组织,则无法将服务定义文件发布至 ArcGIS Server 站点。

服务定义文件被封装为一个便携文件,其中包含了:服务属性、功能和服务类型等相关信息。
另外,您可对服务定义文件进行配置以包含 GIS 资源所引用的数据。

服务定义文件,我们还可以直接将文件拷贝到arcgis server所在的服务器上,然后在server界面直接上传sd文件即可;

利用arcpy 发布 服务:

1、创建arcgis server 的连接文件 ags:

'''
     建立server连接 生成ags文件
     :param connection_type: 连接方式
     :param outFolder: 输入的文件夹
     :param connectFile: arcgis server生成的连接文件名称
     :param server_url: server的url地址
     :param server_type:  服务器类型
     :param use_arcgis_desktop_stagig_folder: False
     :param staging_folder_path: 创建和保存服务定义的临时文件夹
     :param username: server 的用户名
     :param password: server的密码
     :param save_username_password: 是否将连接 GIS 服务器的用户名和密码保存在连接文件中
     '''
    arcpy.mapping.CreateGISServerConnectionFile(
        connection_type,
        outFolder,
        connectFile,
        server_url,
        server_type,
        use_arcgis_desktop_stagig_folder,
        staging_folder_path,
        username,
        password,
        save_username_password
    )

2、CreateMapSDDraft 将地图文档(.mxd)转换为服务定义草稿(.sddraft)

# CreateMapSDDraft 将地图文档(.mxd)转换为服务定义草稿(.sddraft)
    connection_file_path = outFolder + connectFile
    out_sddraft = outFolder + service_name + ".sddraft"
    sd = outFolder + service_name + ".sd"
    mxd_path = inputFolder + mxdFile
    map_document = arcpy.mapping.MapDocument(mxd_path)
    analysis = arcpy.mapping.CreateMapSDDraft(
        map_document,
        out_sddraft,
        service_name,
        server_type,
        connection_file_path,
        copy_data_to_servre,
        folder_name,
        summary,
        tags
    )

3、分析服务定义文件,并发布或取消

analysis = arcpy.mapping.AnalyzeForSD(out_sddraft)
    # Print errors, warnings, and messages returned from the analysis
    print
    "The following information was returned during analysis of the MXD:"
    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
    # Stage and upload the service if the sddraft analysis did not contain errors
    if analysis['errors'] == {}:
        # 3、 Execute StageService. This creates the service definition.
        arcpy.StageService_server(out_sddraft, sd)
        # 4、 Execute UploadServiceDefinition. This uploads the service definition and publishes the service.
        arcpy.UploadServiceDefinition_server(sd, connection_file_path)
        print
        "Service successfully published"
    else:
        print
        "Service could not be published because errors were found during analysis."

完整代码如下:

# encoding=utf-8
import arcpy

# 根据本地mxd发布 arcgis server mapserver

connection_type = "ADMINISTER_GIS_SERVICES"  # 连接方式
inputFolder = "E:/gisData/test/testpy/"  # 输入的文件夹
outFolder = "E:/gisData/test/testpy/"  # 保存的文件夹
connectFile = "serverags.ags"  # arcgis server生成的连接文件名称
server_url = "http://localhost:6080/arcgis/admin/"  # server的url地址
server_type = "ARCGIS_SERVER"  # 服务器类型
use_arcgis_desktop_stagig_folder = False  # 定义是否使用 ArcGIS for Desktop 临时文件夹,如果设置为True,无需定义 staging_folder_path 即可使用 ArcGIS for Desktop'临时文件夹,该参数只有在连接类型为
staging_folder_path = outFolder  # 创建和保存服务定义的临时文件夹,该参数只有在连接类型为 PUBLISH_GIS_SERVICES 或ADMINISTER_GIS_SERVICES 时有效
username = "arcgis"  # server 的用户名
password = "arcgis"  # server的密码
save_username_password = "SAVE_USERNAME"  # 是否将连接 GIS 服务器的用户名和密码保存在连接文件中

mxdFile = "anhuis.mxd"  # mxd 文件
service_name = "anhuis"  # 服务名
# connection_file_path = outFolder + connectFile  ags连接文件全路径
out_sddraft = outFolder + service_name + ".sddraft"  # 服务定义文件保存的地址
connection_file_path = outFolder + connectFile  # sd文件保存的地址
copy_data_to_servre = True  # 是否复制到服务器上
sd = outFolder + service_name + ".sd"  # sd文件保存的地址
folder_name = "xzqh"  # 服务文件夹名称
summary = "anhuis"  # 描述信息
tags = "xzqh"  # 标签


def publishS(connection_type, outFolder, connectFile, server_url, server_type, use_arcgis_desktop_stagig_folder,
             staging_folder_path, username, password, save_username_password, mxdFile, service_name,
             copy_data_to_servre, folder_name, summary, tags):

    '''
     建立server连接 生成ags文件
     :param connection_type: 连接方式
     :param outFolder: 输入的文件夹
     :param connectFile: arcgis server生成的连接文件名称
     :param server_url: server的url地址
     :param server_type:  服务器类型
     :param use_arcgis_desktop_stagig_folder: False
     :param staging_folder_path: 创建和保存服务定义的临时文件夹
     :param username: server 的用户名
     :param password: server的密码
     :param save_username_password: 是否将连接 GIS 服务器的用户名和密码保存在连接文件中
     '''
    arcpy.mapping.CreateGISServerConnectionFile(
        connection_type,
        outFolder,
        connectFile,
        server_url,
        server_type,
        use_arcgis_desktop_stagig_folder,
        staging_folder_path,
        username,
        password,
        save_username_password
    )


    # CreateMapSDDraft 将地图文档(.mxd)转换为服务定义草稿(.sddraft)
    connection_file_path = outFolder + connectFile
    out_sddraft = outFolder + service_name + ".sddraft"
    sd = outFolder + service_name + ".sd"
    mxd_path = inputFolder + mxdFile
    map_document = arcpy.mapping.MapDocument(mxd_path)
    analysis = arcpy.mapping.CreateMapSDDraft(
        map_document,
        out_sddraft,
        service_name,
        server_type,
        connection_file_path,
        copy_data_to_servre,
        folder_name,
        summary,
        tags
    )
    analysis = arcpy.mapping.AnalyzeForSD(out_sddraft)
    # Print errors, warnings, and messages returned from the analysis
    print
    "The following information was returned during analysis of the MXD:"
    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
    # Stage and upload the service if the sddraft analysis did not contain errors
    if analysis['errors'] == {}:
        # 3、 Execute StageService. This creates the service definition.
        arcpy.StageService_server(out_sddraft, sd)
        # 4、 Execute UploadServiceDefinition. This uploads the service definition and publishes the service.
        arcpy.UploadServiceDefinition_server(sd, connection_file_path)
        print
        "Service successfully published"
    else:
        print
        "Service could not be published because errors were found during analysis."


publishS(connection_type,
         outFolder,
         connectFile,
         server_url,
         server_type,
         use_arcgis_desktop_stagig_folder,
         staging_folder_path,
         username,
         password,
         save_username_password,
         mxdFile,
         service_name,
         copy_data_to_servre,
         folder_name,
         summary,
         tags
         )

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Giser_往事随风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值