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_document | Map Document 类型的对象,即一个mxd文档。 | mxd类型 |
out_sddraft | Service 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_path | ArcGIS for Server connection file (.ags) 文件的路径。通常在ArcCatalog创建后的路径为「C:\Users\Administrator\AppData\Roaming\ESRI\Desktop10.2\ArcCatalog」 | string |
copy_data_to_server |
mxd文档的数据是否要拷贝到服务器中。当数据没有在服务器内被注册时,此参数应设为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
Arcpy发布地图服务相关推荐
- 通过Arcpy发布地图服务
1.发布地图服务的流程 使用 ArcPy 将地图文档自动发布到 GIS 服务器的流程分为四步: 第一步,运行 CreateMapSDDraft 函数.CreateMapSDDraft 的输出是服务定义 ...
- ArcGIS二次开发——Arcpy批量自动化发布地图服务
参考博客 补充:在发布地图服务前,首先需要连接到ArcGIS for Server服务器,需要利用到arcpy.mapping.CreateGISServerConnectionFile接口,,在Ar ...
- geoserver 通过代码实现发布地图服务
转自原文 geoserver 通过代码实现发布地图服务 GeoServer:代码实现批量发布地图服务 利用GeoServer发布WCS服务,那么如果我有很多数据需要进行发布,这样利用GeoServer ...
- 利用 PortableBasemapServer 发布地图服务
前段时间需要给自己的C/S系统加一个地图,但是没有数据,于是就想到了使用网上的切片地图,但是C/S系统又不能联网,于是就想本地发布切片服务来使用. 本来想用ArcGIS Server来发布从网上下载的 ...
- GeoServer自动发布地图服务
1 NetCDF气象文件自动发布案例 GeoServer是一个地理服务器,提供了管理页面进行服务发布,样式,切片,图层预览等一系列操作,但是手动进行页面配置有时并不满足业务需求,所以GeoServer ...
- Arcgis连接sql server发布地图服务详解
Arcgis+sql server发布地图服务详解 1.ArcGIS中创建企业地理数据库 通过ArcGIS创建一个地理数据库至SQLServer数据库中. 1.需要有一个登陆ArcGIS的管理员账号, ...
- geoserver发布地图服务后不能预览,竟然变成下载WMS文件
geoserver发布地图服务后不能预览,竟然变成下载WMS文件 问题描述:geoserver发布地图服务后不能预览,竟然变成下载WMS文件,用记事本打开下载文件显示错误信息:java.lang.Nu ...
- ArcSDE与SQL sevrver的连接、ArcSDE导入数据、ArcGIS Server发布地图服务
本文主要是关于ArcSDE的使用. 一.软件环境 ArcGIS10.2,ArcSDE10.2,数据库为SQL Server 2008R2 及以后版本(本人电脑上是2012版本). 二.软件安装 1.S ...
- 使用Arcmap往服务器上发布地图服务
要在服务器上发布地图服务,只需要在服务器上把ArcGIS server安装好就可以了,然后有服务器的ip地址就可以在别的电脑上往服务器上发布服务了 1.先将地图配置好,然后选择文件菜单栏下的共享为-- ...
最新文章
- 线性连续时间状态空间模型的离散化及实例
- USB基础---OHCI、UHCI、EHCI和XHCI控制器简介
- XSS 前端防火墙 —— 天衣无缝的防护
- ruby 将字符转数字计算_Ruby程序计算一个数字中的位数
- js中遇到的一个错误Uncaught SyntaxError: missing )after argument list
- SpringBoot 精通系列-SpringBoot如何操作Memcache
- [教程]Tensorflow + win10 + CPU + Python3.6+ 安装教程
- Spring定时任务@scheduled多线程的使用(@Async注解)
- C++ Debug:fatal error C1083: Cannot open include file: 'streams.h': No such file or directo 2010-7-5
- C语言实现蔡勒公式求周几
- windows7 C盘清理(图解)
- 超级课程表查成绩显示服务器错误,超级课程表怎么查询期末成绩
- 假设检验与常见的统计检验方法
- windows x64和x86区别
- Typora怎么插入图片链接,并设置图片居中
- 电脑开机启动项选择快捷键大全
- 团组织关系的转接流程
- OMNIPAY(欧米派、欧米链)-全球领先的多链数字钱包
- Notepad++增加读取二进制文件的功能——HexEditor的所有
- 鼎力测试软件安不上,e5 2665 安装成功,但是不能睿频