引言
发布地图服务并生成切片缓存是一个重复且没有技术含量的一项工作。在经过无数次的重复性工作后,突然想到可以借助arcpy来实现批量的发布。这样便可以大大提高效率,给摸鱼留出更多的时间。
下面将介绍如何使用arcpy库来实现批量发布服务
主要函数
arcpy是一个 Python 站点包,可提供以实用高效的方式通过 Python 执行地理数据分析、数据转换、数据管理和地图自动化。基本上只要Arcgis可以实现的,都可以通过arcpy来实现,所以在面对重复性的工作时可以考虑使用arcpy编写脚本来完成。
1.首先使用arcpy函数CreateGISServerConnectionFile()(在arcpy.mapping模块中)创建连接到 server服务器的连接文件。该函数的重要参数为:server_url;username;password。具体使用方法详见arcgis的帮助文档,里面包含函数的使用说明和例子。
2.使用arcpy.mapping中的CreateMapSDDraft()函数将mxd地图文档转换为服务定义草稿文件(.sddraft)
3.使用**AnalyzeForSD()函数分析.sddraft文件可能存在的错误、警告和消息,以便在将服务定义草稿文件转换为sd文件之前解决潜在的问题
4.使用StageService()**过渡服务工具将服务定义草稿(.sddraft) 转换为服务定义(.sd)文件
5.使用 UploadServiceDefinition上载服务定义工具将服务定义 (.sd)文件上传并发布服务到指定的GIS服务器
这时已经生成了server服务
6.发布服务后,CreateMapServerCache_server创建地图缓存这个函数是生成的切片缓存的主要函数,需要设置很多参数,一定要注意。
7.最后,ManageMapServerCacheTiles_server进行切片
具体使用方法见帮助文档(其实帮助文档会比博客说的更清楚,所以一定要学会看文档)
具体代码
1.连接服务器
"""
out_name = 要创建的文件名称
server_url = server地址(ArcCatalog程序下/GIS服务器/arcgis on localhost_6080 (发布者)/右键属性中查看)
username = ArcGIS Server Manager用户名(如果忘记,可再安装一次ArcGIS_for_Server,无需卸载原有程序)
password = ArcGIS Server Manager密码
"""
out_folder_path = env.workspace
out_name = 'servercon.ags'
server_url = 'http://localhost:6080/arcgis/admin'
use_arcgis_desktop_staging_folder = False
staging_folder_path = env.workspace
username = '***'
password = '***'
servercon = 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")
2.生成草稿文件和动态服务文件
sddraft = arcpy.mapping.CreateMapSDDraft(mxdname, sddraftname, servicename, 'ARCGIS_SERVER',servercon,False,foldername)
arcpy.mapping.AnalyzeForSD(sddraftname)
arcpy.StageService_server(sddraftname,sdname)
arcpy.UploadServiceDefinition_server(sdname,out_name)
3.生成切片缓存
里面的参数什么的根据需要自己调整,参数说明还是要看帮助文档
inputService = conname + '/' + foldername + '//' + servicename + '.MapServer'
serviceCacheDirectory = arcpy.GetParameterAsText(2)
# serviceCacheDirectory = 'F:/arcgisserver/directories/arcgiscache' # 指定缓存切片地址
tilingSchemeType = "NEW"
scalesType = "CUSTOM"
numOfScales = "12"
dotsPerInch = "96"
tileSize = "256 x 256"
predefinedTilingScheme = ""
tileOrigin = "-20037508.342787001 20037508.342787001"
#scales = "3000;1500;750;375;150"
scales ="591657527.591555;295828763.79577702;147914381.89788899;73957190.948944002;36978595.474472001;18489297.737236001;9244648.8686180003;4622324.4343090001;2311162.2171550002;1155581.108577;577790.55428899999;288895.27714399999;144447.638572"
cacheTileFormat = "PNG"
tileCompressionQuality = ""
storageFormat = "EXPLODED"
arcpy.CreateMapServerCache_server(inputService,serviceCacheDirectory,
tilingSchemeType, scalesType,numOfScales,
dotsPerInch,tileSize, predefinedTilingScheme,
tileOrigin, scales,cacheTileFormat,
tileCompressionQuality,storageFormat)
arcpy.ManageMapServerCacheTiles_server(inputService, scales,'RECREATE_EMPTY_TILES')
#arcpy.ConvertMapServerCacheStorageFormat_server(inputService)
注:
在使用arcgis发布服务时若地图的坐标系统不是WGS_1984_Web_Mercator_Auxiliary_Sphere坐标系,则将会自动转为该坐标系。但是使用arcpy时并不会自动转换吗,需要将坐标系进行投影转换,转为WGS_1984_Web_Mercator_Auxiliary_Sphere坐标,只有这样才可以成功发布生成切片缓存。
发布服务和切片
下载链接: .
文章目录
- 引言
- 主要函数
- 具体代码
- 注:
- 发布服务和切片