arcgis server发布地图 android调用,实现ArcGIS Server 10.x自动发布地图的解决方案

首先来看解决方案的技术流程图:

7149d9a3a28190f3c16457ce92a03eb5.png

首先,我们先在D盘下建一个“MxdPublisher”的目录,然后创建一个python脚本文件:“MxdPublish.py”,里面代码如下:

#-*-coding:utf-8

__author__ = 'suwen'

import os

import arcpy

import xml.dom.minidom as DOM

def CreateContectionFile(wrkspc,userName,password,serverName):

con="http://"+str(serverName)+":6080/arcgis/admin"

connection_file_path=str(wrkspc)+"/tmp.ags"

#

if os.path.exists(connection_file_path):

os.remove(connection_file_path)

agsname=os.path.basename(connection_file_path)

arcpy.mapping.CreateGISServerConnectionFile("ADMINISTER_GIS_SERVICES",

wrkspc,

agsname,

con,

"ARCGIS_SERVER",

username=userName,

password=password,

save_username_password=True)

return connection_file_path

def PublishService(connection_file_path,wrkspc,mapDoc):

#get the serviceName

serviceName =os.path.basename(mapDoc).replace(".mxd","")

#create the .sddraft path

sddraftname=os.path.basename(mapDoc).replace(".mxd",".sddraft")

sddraft =str(wrkspc)+"/"+str(sddraftname)

#create the .sd file path

sdname=os.path.basename(mapDoc).replace(".mxd",".sd")

sd=str(wrkspc)+"/"+str(sdname)

#check the file exists or not

if(os.path.exists(sd)):

os.remove(sd)

analysis = arcpy.mapping.CreateMapSDDraft(mapDoc, sddraft, serviceName, 'ARCGIS_SERVER',

connection_file_path, True, 'ProjectData',None,None)

#启用WMS

doc = DOM.parse(sddraft)

typeNames = doc.getElementsByTagName('TypeName')

for typeName in typeNames:

if typeName.firstChild.data == 'WMSServer':

extention = typeName.parentNode

for extElement in extention.childNodes:

if extElement.tagName == 'Enabled':

extElement.firstChild.data = 'true'

f = open(sddraft,'w')

doc.writexml(f, encoding='utf-8')

f.close()

arcpy.StageService_server(sddraft, sd)

arcpy.UploadServiceDefinition_server(sd, connection_file_path)

connection_file_path="D:\MxdPublisher"

mxdfolder=u"D:\MxdPublisher"

wrkspc=r"D:\MxdPublisher"

serverName="192.168.173.100"

userName="lixw"

password="info12345"

connection_file_path=CreateContectionFile(wrkspc,userName,password,serverName)

# the mxd file list of the mxdPath

mxds=os.listdir(mxdfolder)

mxd_files=[]

for file in mxds:

if file.endswith(".mxd"):

mxdpath=os.path.join(mxdfolder,file)

mxd_files.append(mxdpath)

for mxd in mxd_files:

PublishService(connection_file_path,wrkspc,mxd)

注意,代码里下面的几个变量根据实际情况进行修改:

connection_file_path="D:\MxdPublisher"

mxdfolder=u"D:\MxdPublisher"

wrkspc=r"D:\MxdPublisher"

serverName="192.168.173.100"

userName="lixw"

password="info12345"

接下来,可以往“D:\MxdPublisher”目录下手动拷贝一个mxd及其相关文件进去(注意,mxd须保存为相对路径),然后执行“MxdPublish.py”脚本即可进行测试(机器需安装ArcGIS Desktop 10.x环境),脚本执行过程可能有点慢,请耐心等待,执行完后可能会报错,这个不用管,登录arcgis server 10.x可查看发布是否成功。

如果上面手动测试OK,后面就是在C#里调用“MxdPublish.py”脚本进行动态发布了,backgroundWorker1_DoWork里的代码如下:

string mxdPath = e.Argument as string;

//创建临时文件夹

string tempDir = @"D:\MxdPublisher";

if (Directory.Exists(tempDir) == false)

{

Directory.CreateDirectory(tempDir);

}

else

{

this.ClearMxdPublishTempDir(tempDir);

}

//拷贝mxd及其所在文件夹下所有文件及其子文件夹到临时文件夹

string mapServerName = this.CopyMxdDocument2TempDir(mxdPath, tempDir);

//执行脚本

string pyPath = Path.Combine(Application.StartupPath, "MxdPublish.py");

try

{

ProcessStartInfo info = new ProcessStartInfo(pyPath);

info.WindowStyle = ProcessWindowStyle.Hidden;

Process pro = new Process();

pro.StartInfo = info;

pro.Start();

while (!pro.HasExited)

{

System.Threading.Thread.Sleep(500);

Application.DoEvents();

}

string wmsUrl = string.Format("http://192.168.173.100:6080/arcgis/services/ProjectData/{0}/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities", mapServerName);

e.Result = wmsUrl;

}

catch (Exception ex)

{

e.Result = null;

MessageBox.Show(ex.Message);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值