Arcpy发布地图服务

工作需要研发一个大平台,需要有发布地图服务的功能。

之前做过一个平台,使用 GeoServer 发布地图服务,后台使用 Java+SpringBoot,前端使用 Vue+OpenLayers,平台整体比较稳定,但是图层符号化配色那块比较难搞。

后面担心其他的单位都用的是 ArcGIS 那一套。所以准备研发一套基于ArcGIS 的平台。初步决定使用 Arcpy 调用 ArcGIS Server 发布地图服务,将 Arcpy 做成能发布地图服务的插件,后台还是使用 Java+SpringBoot,前端可能使用 Vue+OpenLayers/esri-leaflet,准备边做边写多几篇文章。目前写第一篇 Arcpy 发布地图服务。

一、发布的流程

(1)第一步,调用arcpy.mapping中的CreateMapSDDraft()函数,将地图文档文件(.mxd)转换为服务定义草稿文件(.sddraft),该文件由一个地图文档、服务器信息和一组服务属性组合而成。

(2)第二步,调用StageService Tool(.sd,过渡服务工具),arcpy.StageService_server方法,编译能成功发布 GIS 资源所需的所有必要信息。

(3)第三步,使用Upload Service Definition Tool(上载服务定义处理工具)上传服务定义文件,并将其作为GIS服务发布到指定的GIS服务器。此步骤将获取服务定义文件、将其复制到服务器、提取所需信息并发布 GIS 资源。

二、代码

# -*- coding:UTF-8 -*-

import arcpy
from arcpy import env
server_username='arcgis'
server_password='123456'
env.workspace="D:/data/Test"
wrkspc="D:/data/Test"

#创建serve连接
connection_type='ADMINISTER_GIS_SERVICES'
out_folder_path="D:/data/Test/"
out_name='DLHX.ags'
server_url='http://localhost:6080/arcgis/admin'
use_arcgis_desktop_staging_folder=False
staging_folder_path=out_folder_path
arcpy.mapping.CreateGISServerConnectionFile(connection_type,out_folder_path,out_name,server_url,
                                            'ARCGIS_SERVER',use_arcgis_desktop_staging_folder,
                                            staging_folder_path,server_username,server_password,
                                            "SAVE_USERNAME")
mxdname = wrkspc+'/DLHX.mxd'
mapDoc=arcpy.mapping.MapDocument(wrkspc+'/DLHX.mxd')
service_name='DLHX0313'
sddraft=wrkspc+'/'+service_name+'.sddraft'
sd=wrkspc+'/'+service_name+'.sd'
summary='Tese use sd'
tags='DLHX,LZ,MAP'
con=wrkspc+'/'+out_name
analysis=arcpy.mapping.CreateMapSDDraft(mapDoc,sddraft,service_name,'ARCGIS_SERVER',con,True,'Test',summary,tags)
if analysis['errors']=={}:
    arcpy.StageService_server(sddraft, sd)
    arcpy.UploadServiceDefinition_server(sd, con)
else:
    print analysis['errors']

两个重要方法说明:

1、创建草图文件方法CreateMapSDDraft (map_document, out_sddraft, service_name, {server_type}, {connection_file_path}, {copy_data_to_server}, {folder_name}, {summary}, {tags})

参数说明类型
map_documentMap Document 类型的对象,即一个mxd文档。mxd类型
out_sddraftService Definition Draft (.sddraft) 文件输出路径。string
service_name服务的名字,由字母和数字组成,不允许使用空格或特殊字符,长度不得超过120。string
server_type服务的类型,如果未提供「connection_file_path」参数,则必须提供「server_type」。如果提供了「connection_file_path」参数,则从连接文件中获取「 server_type」。
• ARCGIS_SERVER — ArcGIS for Server 服务类型,默认值。
• FROM_CONNECTION_FILE — 从 connection_file_path 参数获取服务类型。
• SPATIAL_DATA_SERVER — Spatial Data Server 服务类型,ArcGIS 10.2.1 版本之后就不再支持。
• MY_HOSTED_SERVICES — My Hosted Services 服务类型,应用与 ArcGIS Online 或者 Portal for ArcGIS 的托管服务。
string
connection_file_pathArcGIS for Server connection file (.ags) 文件的路径。通常在ArcCatalog创建后的路径为「C:\Users\Administrator\AppData\Roaming\ESRI\Desktop10.2\ArcCatalog」string
copy_data_to_servermxd文档的数据是否要拷贝到服务器中。当数据没有在服务器内被注册时,此参数应设为false,反之应设为true。
当「server_type」设置为SPATIAL_DATA_SERVER时,「copy_data_to_server」将始终为False。 Spatial Data Server 服务始终使用已注册的数据,因此不会将数据复制到服务器。
当「server_type」设置为MY_HOSTED_SERVICES时,「copy_data_to_server」将始终为True。My Hosted Maps services 服务始终将数据复制到服务器。
Boolean
folder_name服务发布的文件夹名,如果不存在则会新建,默认值None对应的是根文件夹。String
summary服务的摘要。String
tags服务的标签。String

2、GIS服务器连接:

arcpy.mapping.CreateGISServerConnectionFile(connection_type, out_folder_path, out_name, server_url, 'ARCGIS_SERVER', use_arcgis_desktop_staging_folder, staging_folder_path, username, password, True)

3、编译能成功发布GIS资源所需的所以必要信息:

arcpy.StageService_server(sddraft, sd)

4、上传服务定义文件,并将其作为GIS服务发布到指定的GIS服务器:

arcpy.UploadServiceDefinition_server(sd, con)

三、遇到的问题

1、编码问题:

解决办法:在代码前面加上:

# -*- coding:UTF-8 -*-

2、路径问题

之前运行时显示找不到 mxd 文件的路径,后天单步调试发现是因为路径中少了“/”。

3、PyCharm调试时,因为我之前电脑用的是 python3.6,需要换到 ArcGIS 安装时安装的 python2.7。但是不知道为啥一直换不去,试了好几遍才成功。

 

四、运行结果

 

 

 

 

五、参考博客

https://blog.csdn.net/gislaozhang/article/details/90900227?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-4&spm=1001.2101.3001.4242

https://www.cnblogs.com/lLazy/p/10663157.html

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值