APP下载

基于Python的ArcGIS Server地图瓦片定时自动更新方法

2013-09-28马卫春杨友长

地理空间信息 2013年1期
关键词:管理器瓦片客户端

马卫春,杨友长

(1.安徽省基础测绘信息中心,安徽 合肥 230031)

随着互联网地图产业的蓬勃发展,如何在带宽有限的情况下,快速、流畅地在客户端中显示电子地图,已成为任何GIS产品都需要解决的核心技术问题。 目前,国内外主要通过地图缓存技术解决该问题,即按照一定的数学规则,把地图切成一定规格的小图片集保存到服务器上,当用户通过客户端访问地图服务时,不是由服务器实时创建一个个地图瓦片反馈给客户端,而是在服务器端直接反馈预存于服务器上的地图瓦片数据,在客户端拼接成地图。这样,既避免了实时创建地图瓦片对服务器带来的运算负担,也减少了客户端的等待时间,大大改善了用户体验。

Python是一门解释型语言,因为不需要编译和链接的时间,所以可以节省开发时间。解释器能够交互式使用,可以很方便地测试语言中的各种功能,便于编写发布用的程序。Python属于脚本编程,能够使枯燥的数据处理工作自动化。地图瓦片的更新涉及众多操作步骤,使用Python编写一个脚本,实现定时自动化执行,非常适合。ArcGIS Server是ESRI公司出品的一个基于Web的企业级GIS解决方案。不仅具备发布地图服务的功能,而且还能提供灵活的编辑和强大的空间分析能力。目前,它已经成为地图服务发布与WebGIS开发的重要平台之一。本文以ArcGIS Server发布的地图服务为基础,进行地图瓦片的定时自动更新方法的研究。

1 Python API与ArcGIS Server发布地图服务的机制

1.1 Python API

ArcGIS从9.0版本开始提供Python API函数,经过多年的不断完善和扩充,截止到10.0版本,Python已成为了ArcGIS地理处理框架的重要组成部分。用户可以运用ArcGIS提供的Python API开发包编写脚本,实现空间数据的自动化批量处理,从而简化工作流程,提高工作的自动化程度。

1.2 ArcGIS Server

ArcGIS Server通过一个服务器对象管理器和若干个服务器对象容器,实现对地图服务资源的管理。服务器对象管理器,用来管理分布在一组服务器容器中的服务器对象。每个服务器对象容器中,存放着地图资源的配置服务,服务一旦被服务器对象管理器启用,随即按照服务中的配置规则,自动调用数据层中的数据资源,通过服务器对象管理器向外提供空间数据服务,即由服务器对象管理器通过服务器对象容器,实现对地图服务运行状态的控制。

2 地图瓦片定时自动更新的实现

地图瓦片定时自动更新是通过在服务端制定一个定时执行任务的方式实现的,即每天定时调用基于Python语言编写的脚本程序,实现地图瓦片的自动更新。地图瓦片实现自动化更新的基础如图1所示,具体流程如图2所示。

图1 地图瓦片自动化更新的基础

图2 地图瓦片自动化更新的流程图

2.1 更新参数文件库的建立

新建一个ESRI文件库,存放更新区域和更新数据2类信息。

更新区域以面状FeatureClass的形式存放,同时,输入与该区域配套的更新参数。具体包括:更新数据所在的位置、用于更新的图层名称、待更新数据所在位置、待更新图层的名称、是否已更新完成、待更新的服务名称、更新的比例尺级别以及更新时需要关闭的相关服务名称。更新数据的表结构需与待更新数据的表结构一致。

2.2 ArcGIS Server服务状态的控制

ArcGIS提供的Python API中未提供控制ArcGIS Server服务状态的类或函数, 而在地图瓦片更新过程中,需要进行服务的终止、启动操作。为了解决这个问题,我们采用ArcGIS Server提供的AO开发包,编写了一个利用ArcGIS Server SOM(服务对象管理器)控制地图服务状态的命令行程序。

2.3 地图瓦片更新的实现

1)读取更新区域的状态信息。读取“更新区域”是否已处理的状态标记信息,若已处理过,不再进行更新操作;否则,继续进行更新操作。

2)读取更新区域的相关参数。读取地图瓦片更新所需要的更新区域、更新服务名称、更新比例尺、更新数据所在位置、更新数据所在图层、待更新数据所在位置、待更新数据所在图层、需要关闭的相关服务名称。

service_name = getUpdateInfo(cacheFeatures,"MapSer viceName")

scales = getUpdateInfo(cacheFeatures,"UpdateScales")

3)更新数据。首先,调用控制ArcGIS Server服务状态的命令行程序,停止待更新及相关地图服务;然后,删除待更新数据,用更新数据替代待更新数据;最后,启动待更新及相关地图服务。

//停止服务

tempservicename ="AGSSOM.exe -x " +pname //pname地图服务名称

os.system(tempservicename)

//删除待更新数据

arcpy.Delete_management(OrigncacheFeatures,"")

//更新数据替代待更新数据

arcpy.CopyFeatures_management(UpdatecacheFeatue s,OrigncacheFeatures)

//启动服务

tempservicename ="AGSSOM.exe -s " +pname //pname地图服务名称

os.system(tempservicename)

4)更新地图瓦片。基于更新参数,利用ArcGIS Server Python API中提供的UpdateMapServerCache()函数,实现地图瓦片的更新操作。

gp.UpdateMapServerCache(server_name, service_name, data_frame, layers, constraining_extent, scales,update_mode, thread_count, antialiasing)

5)设定已更新标记。地图瓦片更新完成后,将更新区域中的“是否已处理”字段标记为“已处理”,避免在此后执行自动更新操作时进行重复更新。

2.4 自动执行脚本任务的制定

以Window 2008 Server操作系统为例,创建一个任务,在地图服务访问空闲期间,如以夜间1点为条件,触发脚本程序,自动执行地图瓦片的更新任务。

3 地图瓦片定时自动更新执行条件的说明

地图瓦片更新脚本程序,每天会在设定的时间点自动执行。程序通过访问参数文件库,读取其中的更新区域多边形数据文件,遍历所有更新区域多边形的更新标识符字段,进而判断是否需要继续执行瓦片更新程序。更新过的区域,程序会将该字段的值赋为“Y”,未更新的区域该字段则为空。对更新标识符字段为“Y”的区域,不作瓦片更新操作;对更新标识符字段为空的区域,执行更新操作,并于操作完成后,将对应的更新标识符字段的值赋为“Y”。基于上述原则,地图瓦片更新程序每次自动启动后,只对新增的更新区域执行更新操作,对更新过的历史区域不作任何瓦片更新操作。若未发现需要更新的区域,程序不作任何操作,自动予以关闭。

4 结 语

地图瓦片技术的出现,解决了在带宽和服务器性能有限的情况下,客户端地图浏览效率不高、服务器负担过重的问题。但是,在进行地图瓦片更新的过程中,一直存在着步骤繁琐、运算时间长等问题。文中所述的地图瓦片定时自动更新方法,已在“天地图·安徽”的数据更新过程中应用,并显著简化了工作步骤,提高了工作效率。但是,对于大区域的地图瓦片更新,由于更新周期长,无法在夜间完成,会影响到地图服务在白天访问繁忙期的正常使用,不建议使用文中所述的方法进行更新。

[1]王强.分布式WebGIS地图缓存策略的应用研究[J].软件导刊,2008,7(5):16-18

[2]李海亭,费立凡,彭清山,等.预生成思想在地理信息服务中的应用研究[J].测绘信息与工程,2009,34(1):31-32

[3]叶海波,崇洁.ArcGIS 地图缓存制作简介[M].北京:Esri中国(北京)有限公司共享服务事业部,2011

[4]潘雪婷.基于Python的控件分析模型的实现[D].北京:中国地质大学(北京),2010

[5]王冉阳.基于Web Service的数据产品加工服务系统的设计与实现[D].北京:中国地质大学(北京),2009

[6]董元,李娜,张广平.应用G_tilelayer的谷歌混合地图显示[J].地理空间信息, 2011,9(4):72-74

[7]王磊,林鸿,丘广新.城市空间数据库动态更新机制研究与实现[J].地理空间信息, 2009,7(1):30-33

猜你喜欢

管理器瓦片客户端
打水漂
应急状态启动磁盘管理器
一种基于主题时空价值的服务器端瓦片缓存算法
如何看待传统媒体新闻客户端的“断舍离”?
惯性
Windows文件缓冲处理技术概述
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
大枢纽 云平台 客户端——中央人民广播电台的探索之路
高集成度2.5A备份电源管理器简化锂离子电池备份系统