arcpy发布地图动态服务

通过arcpy发布地图服务的思路

1. 调用arcpy.mapping中的CreateMapSDDraft()函数,将地图文档转换成服务定义草稿文件(.sddraft) 该文件由一个地图文档、服务器信息和一组服务属性组合而成。其中服务器信息包括服务器连接、 即将发布的服务类型、服务的元数据(项目信息)和数据参考(是否将数据复制到服务器),但是 服务定义草稿文件中不包含数据(不能单独用于发布服务)。CreateMapSDDraft()函数也会在 发布服务过程中生成包含错误和警告的python字典。
2. 调用StageServer Tool(.sd,过渡服务工具),编译能成功发布GIS资源所需的所有必要信息。
如果未将数据注册到服务器,将在过渡服务定义草稿时添加这些数据。
3. 使用Upload Service Definition Tool(上传服务定义工具)上传服务定义文件,并将其作为GIS服务 发布到指定的GIS服务器。该步骤获取服务定义文件,并将其复制到服务器中,提取所需信息并发布

代码

# -*- coding: utf-8 -*-

import arcpy, os, sys

# Modify as your workspace
##########################
workSpace = r"D:\testpublish"
gisServer = 'localhost'
gisPort = 6443
username = 'arcgis'
password = 'arcgis'
serverUrl = 'https://{0}:{1}/arcgis/admin'.format(gisServer, gisPort)
print(serverUrl)
outAGSName = 'arcgis_admin.ags'
###########################

# 创建连接ARCGIS Server服务器
def createAGSConnection(workSpace, outAGSName, serverUrl, username, password):
# Create ArcGIS Server Connection File
    path = workSpace + '\\' + outAGSName
    if os.path.exists(path):
        os.remove(path)
        print("Existing ArcGIS Server connection file deleted ... ")
    arcpy.mapping.CreateGISServerConnectionFile(connection_type="ADMINISTER_GIS_SERVICES",
                                                out_folder_path=workSpace,
                                                out_name=outAGSName,
                                                server_url=serverUrl,
                                                server_type="ARCGIS_SERVER",
                                                use_arcgis_desktop_staging_folder=False,
                                                staging_folder_path=workSpace,
                                                username=username,
                                                password=password,
                                                save_username_password=True)
    print('ArcGIS Server connection file created: {0}'.format(outAGSName))
    return


# 发布地图服务
def publishingMapService(workSpace, mxdFile, outAGSName):
    # define local variables
    mapDoc = arcpy.mapping.MapDocument(os.path.join(workSpace, mxdFile))
    print('Map Document: {0}'.format(mapDoc.filePath))
    # 服务名称为mxd的名称
    service = mxdFile.split(".")[0]
    sddraft = os.path.join(workSpace + '\\', service + '.sddraft')
    sd = os.path.join(workSpace + '\\', service + '.sd')
    summary = mapDoc.summary
    tags = mapDoc.tags

    # create service definition draft
    # test为需要发布的服务的目录
    analysis = arcpy.mapping.CreateMapSDDraft(mapDoc, sddraft, service, 'ARCGIS_SERVER',
                                              outAGSName, True, "test", summary, tags)
    print('Service definition draft file created: {0}'.format(sddraft))

    # stage and upload the service if the sddraft analysis did not contain errors
    if analysis['errors'] == {}:
        if os.path.exists(sd):
            os.remove(sd)
            print("Existing service defination file deleted ... ")
        # Execute StageService
        arcpy.StageService_server(sddraft, sd)
        print('Service definition file created: {0}'.format(sd))
        # Execute UploadServiceDefinition
        print('Uploading service...')
        arcpy.UploadServiceDefinition_server(sd, outAGSName)
        print("Success!")
        # os.remove(sd)
        print ("sd file is deleteing.....")
    else:
        # if the sddraft analysis contained errors, display them
        print analysis['errors']


##### Main Script
if os.path.isdir(workSpace) == False:
    print "Not valid path..."
else:
    createAGSConnection(workSpace, outAGSName, serverUrl, username, password)
    files = os.listdir(workSpace)
    for f in files:
        if f.endswith(".mxd"):
            # mxdPath = os.path.join(workSpace, f)
            # 下面两句代码将中文解码,很重要不然发布中文的服务会有问题
            reload(sys)
            sys.setdefaultencoding('utf-8')

            print "publishing: " + f
            publishingMapService(workSpace, f, outAGSName)
        else:
            continue

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值