arcpy发布地图服务

arcpy发布地图服务

# -*- coding: utf-8 -*-
#以防中文报错
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import arcpy,os
import arcpy.mapping as mapping
import xml.dom.minidom as DOM
arcpy.env.overwriteOutput = True


#发布地图服务
folder = r"F:\Project\ThireeDiao\SpatialDatabaseManagementSystem\bin\Debug\Data\Tmp"
mxdpath=r"C:\Users\Administrator\Desktop\HPGTDCXT_MAP.mxd"
# folder= arcpy.GetParameterAsText(0)
# mxdpath= arcpy.GetParameterAsText(1)
service = os.path.basename(mxdpath).split('.')[0]
sddraft = folder+"\\"+os.path.join(os.path.basename(mxdpath).split('.')[0]+'.sddraft')
newSDdraft = folder+"\\"+os.path.join( os.path.basename(mxdpath).split('.')[0]+'.sddraft')
sd =folder+"\\"+os.path.join( os.path.basename(mxdpath).split('.')[0]+'.sd')

#清空数据库连接信息
# files = os.listdir(folder)
# for f in files:
#     if f.endswith(".ags") or f.endswith(".ags"):
        # os.remove(f)
        # os.rmdir(f)
#清空数据库连接信息

arcpy.SetProgressor("step", "Start the publishing service ...", 0,4, 1)
arcpy.AddMessage("Start the publishing service ...")
#创建数据库连接信息
out_folder_path = folder
out_name = 'arcgis192.168.2.228.ags' #生成的连接文件名
server_url = 'http://192.168.2.228:6080/arcgis/admin' #连接Server的URL
use_arcgis_desktop_staging_folder = False
staging_folder_path = out_folder_path
username = 'arcgis' #ArcGIS Server账户
password = 'yckj'        #ArcGIS Server密码
arcpy.mapping.CreateGISServerConnectionFile("ADMINISTER_GIS_SERVICES",out_folder_path,out_name, server_url,"ARCGIS_SERVER",use_arcgis_desktop_staging_folder, staging_folder_path, username, password,"SAVE_USERNAME")
arcpy.SetProgressorLabel("Loading CreateGISServerConnectionFile...")
arcpy.AddMessage("Loading CreateGISServerConnectionFile...")
#创建数据库连接信息
# con=out_folder_path+"\\"+os.path.join(out_name)#发布成工具时需要添加\\
con=out_folder_path+"\\"+os.path.join(out_name)
mxd = mapping.MapDocument(mxdpath)
#清空历史发布信息
files = os.listdir(folder)
for f in files:
    if f.endswith(".sd") or f.endswith(".sddraft"):
        os.remove(f)
#清空历史发布信息

#创建过度文件
summary = 'fw'
tags = 'fw'
arcpy.mapping.CreateMapSDDraft(mxd, sddraft, service, 'ARCGIS_SERVER', con, True, None, summary, tags)
arcpy.SetProgressorLabel("Loading CreateMapSDDraft...")
arcpy.AddMessage("Loading CreateMapSDDraft...")
#创建过度文件

#读取sddraft文件覆盖原有
newType = "esriServiceDefinitionType_Replacement"
xml = sddraft
doc = DOM.parse(xml)
descriptions = doc.getElementsByTagName("Type")
for desc in descriptions:
    if desc.parentNode.tagName == "SVCManifest":
        if desc.hasChildNodes():
            desc.firstChild.data = newType
outXml = xml
f = open(outXml,"w")
doc.writexml(f)
f.close()
#读取sddraft文件覆盖原有


#分析服务
analysis = mapping.AnalyzeForSD(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)
arcpy.SetProgressorLabel("Loading AnalyzeForSD...")
arcpy.AddMessage("Loading AnalyzeForSD...")
#分析服务

#定义和上传服务
inServiceName = ""
inCluster = ""
inFolderType = ""
inFolder = ""
inStartup = ""
inOverride = "OVERRIDE_DEFINITION"
inMyContents = ""
inPublic = ""
inOrganization = ""
inGroups = ""
if analysis['errors'] == {}:
    arcpy.StageService_server(sddraft, sd)
    arcpy.UploadServiceDefinition_server(sd, con, inServiceName,inCluster, inFolderType, inFolder, inStartup, inOverride, inMyContents,inPublic, inOrganization, inGroups)
    arcpy.AddMessage("code=200")
    print arcpy.GetMessages()
else:
    print(analysis['errors'])
arcpy.SetProgressorLabel("Loading UploadServiceDefinition_server...")
arcpy.AddMessage("Loading UploadServiceDefinition_server...")
arcpy.AddMessage("!!!!!!!!!!!!!!!!!!!!!Success!!!!!!!!!!!!!!!!!!!!!!")
arcpy.SetProgressorPosition()
arcpy.ResetProgressor()
#定义和上传服务

posted @   XYSGIS  阅读(27)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示