logo资料库

基于ArcGIS+Engine和Google静态地图服务的背景地图实现.pdf

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
第31卷第3期 2 O 1 2年9月 计算技术与 自 动化 Computing Technology and Automation V01.3l,No.3 Sep.2 O 1 2 文章编号:1003—619912012)03一0142一03 基于ArcGIS Engine和Google静态地图服务 的背景地图实现 方俊1,付云虹2 (1.长沙民政职业技术学院软件学院,湖南长沙410004; 2.国家超级计算长沙中心,湖南长沙410082) 摘要:Google Map等网站为企业构建基于地理信息的应用提供了方便且经济的二次开发平台,但其 实现技术是基于web的。本文讨论在基于ArcGIs Engine的桌面应用中利用Google static Map服务实现 背景地图显示的方法,这个方法也可以适用于与google map类似的其它公共平台。 关键词:Google static Map;ArcGIS Engine;墨卡托投影;瓦片 中图分类号:TP311.1 文献标识码:A Implement of Background Map in ArcGIS Engine Application Based on Google Static Map FANG J unl,FU Yun—hon92 (1.Software College,ChangeSha Social Work College,Changsha 410004,China; 2.National Super—computer Center in Changsha,Changsha 410082,China) Abstract:Many websites such as Google Map provide convenient and economic secondary development environment for enterprise to build application based on GIS.But they are realized with web technology. In this paper,a method which uses Google Static Map Services to display background map in an desktop appl.cation based on ArcGIS Engine is discussed.This method can also used with other websites such as Sogou IⅥap,Bing】Ⅵap,etc. Key words:Google Static Map;ArcGIS Engine;mercator projection;tile 1 引 言 目前,越来越多的信息系统都有对地理信息的 需求,但由于地理信息的复杂性和海量特性,企业 构建自己的地理信息数据库有一定难度,因此,越 来越多地借助于开放的地理信息系统平台进行二 要采用一些特殊的发方法。 本文讨论在基于ArcGis Engine的桌面应用 中集成Go091e Static Map服务实现背景地图显示 的方法。 2 Google Static Map简介 次开发,既可行又经济[1]。当前,开放的地理信息 Google Static Map服务是Google以静态图 系统平台主要有GoOgle Map、Microsoft Bing Map、搜狗地图等。这些平台的开发接口都是基于 Web技术实现的,对于它们的应用也主要采用B/ 片提供的地图服务[4]。只要按照Google提供的标 准格式输入http请求,就可以在网页上得到相应 的地图图片。该服务是免费的。分析这个服务返 S模式。然而,在很多桌面应用中,同样有对地理 回的图片,可以发现它是基于Google的瓦片地图 信息的应用,如通信网优软件中基于城市道路、建 筑分布的情况的数据分析与展示都离不开地理信 库生成的图片。下面是一个请求Go091e static Map的例子[4。:http://maps.gOOgle.com/maps/ 息的支持。但由于B/S和C/S技术的差异,要在 api/staticmap?center一10nXlat&zoom=1 4&size 桌面应用中使用这些开放平台提供的各类服务,需 一400x400&sensor—false 收稿日期:2012一07一03 作者简介:方俊(1965一),男,湖南常德人,研究员,研究方向:软件工程(E—mail:qyjl23@2lcn.com);付云虹(1968),女,贵州遵 义人,高级工程师,研究方向:并行计算、计算机应用。 万方数据
第31卷第3期 方 俊等:基于ArcGIs Engine和Google静态地图服务的背景地图实现 其中,lon和lat是请求图片中心点的经纬度。 在基于地理信息的桌面应用中,往往要以直 观的地图图片作为背景,特别是有些应用需要以卫 星实景地图作背景。Google Static Map服务提供 了获取这种地图图片的一种经济适用方式。下面 将给出利用G0091e Static Map服务图片作为桌面 应用背景图片的方法。 3构建地图库 从Google Static Map获取图片并作为背景在 ArcGis Engine的地图控件中显示的步骤是:通过 Http请求对象发送对图片的请求,得到响应后将 其存为本地图片文件,再将图片文件加载到地图控 件中。为了提高性能,可以对请求过的图片进行本 地缓存,以后再次请求同一位置的图片时就不需重 新从Google服务中下载,而直接使用缓存中的 图片。 Google Static Map最大只能支持640X640的 图片[4],因此,需要通过多图拼接方式才能获得较 大范围的图片,相当于把一张大地图切片为小的图 片,然后把它们拼成一张大图。基于Google的瓦 图2 显示区域与瓦片的关系 为了获取这些地图图片,需计算这些图片的下 载请求参数。在所有参数中,最重要的参数是size 和center。size表示图片尺寸,应为256X256,cen— ter为图片中心,这两个参数决定一个图片覆盖的 地理区域。为了使获取的图片与google的瓦片一 致,需要计算要请求的图片的中心。 要计算图片中心,需了解Google Map相关的 几种坐标系的概念。G009le Map定义的坐标系有 大地坐标系、投影坐标系、像素坐标系及瓦片坐标 系。Google采用的大地坐标系标准为WGS84,以 经纬度为单位,经墨卡托投影生成投影坐标系,以 米为单位。这两个坐标系都是以本初子午线和赤 道的交点为原点,横轴往东为正,纵轴王上为正。 片技术对图片切片并缓存本地,在显示时将多张小 两种坐标系可通过墨卡托投影公式进行转换。墨 图拼接在一起形成大图。 3.1 G∞gle瓦片技术 Google地图具有0~21缩放级,0级比例尺最 大,21级最小。0级将全球投影在一张256X256 的图片上,以后每放大一个级别就将原来级别中的 每个256X256图片放大成4张256X256的图 片¨]。如图1。 2竣 图l 瓦片算法 卡托投影公式如下[3]: y—R*ln(tan({+詈)) x—R*e 其中,R是地球半径,为纬度,为经度,x,y为 墨卡托投影坐标。 瓦片坐标系是对同一缩放级下瓦片的编号。 以西经180度北纬85.05113为左上角,坐标系横 轴往东为正,纵轴往南为正。 如前所述,每个瓦片是一个256)(256的图片,像 素坐标系就是将瓦片坐标细化为像素位置的坐标。 3.3 算 法 已知条件有两个:地图缩放级别和虚框四个顶 点的经纬度。获取如图2所示的相关瓦片的参数 的算法如下: a)应用墨卡托公式,通过经纬度计算四个顶点 3.2坐标变换 的投影坐标m:,优。; 很显然,如需要显示某块区域的地图,只需要 6)通过投影坐标计算四个顶点像素坐标,计算 获取能覆盖这块区域的多块瓦片即可,如图2所 如下: 示。实线小方块表示下载的静态地图图片,虚线大 已知常量:地球半径r一6378137米,地球周长 框表示用户界面中显示部分。要显示虚线框中的 地图,必须获取九个地图图片。 的一半为Z一20037508.342780244米,9009彪Map 最大纬度一85.05113度,初始级(o级)分辨率(单 万方数据
计算技术与自动化 像素表示的距离)s一156543.033928041米。 设z为缩放级(o~21),S2为该级别的分辨 SupportedDrawPhases方法,使它的刷新时间发生 改变,代码如下: 率,z,了为像素坐标,则: Sz=s/2z x一(int)((mx+1)/Sz) y一(int)((1一my)/Sz) public override int SupportedDrawPhases { get { 上述公式中用到分辨率的原因是图片上的一 return(int)ESRI。ArcGIS.esriSystem.es— 个像素点表示的是地理上的一个区域。 riDrawPhase.esriDPGeography; c)由像素坐标计算其所处的瓦片的坐标,公式 ) 如下: 设tx,ty为瓦片坐标,则 ) 代码中的esriDPGeography是ArcGIS定义 tx=(int)(x/256),ty一(int)(y/256); d)计算瓦片中心经纬度; 通过上述步骤计算出显示区域虚框的四个顶 的一种刷新阶段,表示在刷新地理要素之前刷新本 图层。这是一个新的图层类,在向这个图层类对象 添加背景地图元素时,使用ArcGIS开发环境提供 点的瓦片坐标后,即可得到虚框覆盖区域的所有瓦 片的坐标,利用瓦片坐标可以算出每个瓦片的中心 点的经纬度,算法如下:设瓦片坐标为tx,ty,则 的 PngPictureElementClass 或 PngPictureEle— mentClass就可显示png或bmp图片,并且图层中 的图片在地理要素刷新前刷新。图3是利用 瓦片的上下左右边界的像素值为: g。。gle static map实现的背景图效果。 minX—tx*256 maxX—minX+256—1 minY—ty*256 maxY—ty+256—1 这样可以得到瓦片中心的像素坐标((minX +maxX)/2,(minY+maxY)/2),再利用与 a、b步骤中相反的算法即可计算改中心点对应的 经纬度。 j专●警曲鞠黯喧啦●嘲啦O~p鼻巍啼电群l,口O口.鱼毫墨髭{耀1 ,奇扳露膏矗虹雌秘、^^^矗霉鼢■日a●■霸。 筘。 “一 -制—r一/ !一一.描::袭i—.蟊毒—,。‘'-:.一 ”。…==i ≮、、、、黛F争≤r … 一 ~“●4^、,?,一, 一… , 搿。 嚣“一 。。’:。。”一 ”‘ ㈣. ¨”、、、、、…:,--= 峨一‘+… … 。 = n 一一 …’ …· ¨H 通过上述算法得到覆盖区域所有瓦片的中心 |、0∞m, “ 经纬度后,结合前面给出的请求格式,就可以瓦片 的URL,利用这些URL,在程序中就可以下载所 需静态地图图片了。 图3基于google static map服务的背景地图显示效果 4背景地图在AE控件中的显示 5 结束语 本节基于.net开发环境下的C#语言描述。 在获取显示区域的图片后,使用ArcGlS En— gine的地图控件MapContr01将这些图片显示为 背景地图时还需要进行一些特殊处理。因为,在地 图控件的刷新机制中,不同类型的图层的刷新次序 不同,显示图片的图层总是最后刷新[5],这样就会 造成图片覆盖其它图层的效果。而背景地图总是 应该显示在其它图层下面,因此,需要调整背景图 层的刷新时间,使它在其它图层刷新之前刷新。解 决方案如下: 扩展图层类 CompositeGraphicsLayer— ClassL5j,生成一个新的图层类BackgroundLay— eruseStaticMap,这个新类中只要重写基类中的 [5] 万方数据 本文给出基于ArcGIS Engine的桌面应用中 背景地图的一种经济的实现方案,其中的地图资源 是以Google Map的静态服务为例。目前,提供静 态地图服务的网站还有很多,如sogo地图、bing的 瓦片服务等,采用本文的方案同样可以实现。 参考文献 [1]王芳.G009le地图开发研究[J].计算机与数字工程,2010,38 (3);146—149. [2] 高皓亮.基于G009le Map的空间数据整合技术[EB/OL].中 国科技论文在线,http://www.paper.edu.cn [3]吴忠信.《地图投影》[M],北京:测绘出版社,1980. [4] Google static Map API文档[EB/0L],https://developers. google.com/maps/documentation/staticmaps/?h1=zh—CN ArcGIS开发文档,ArcObjects SDK for ArcGIS 10.
基于ArcGIS Engine和Google静态地图服务的背景地图实现 作者: 方俊, 付云虹, FANG Jun, FU Yun-hong 作者单位: 方俊,FANG Jun(长沙民政职业技术学院软件学院,湖南长沙,410004), 付云虹,FU Yun-hong(国家超 级计算长沙中心,湖南长沙,410082) 刊名: 计算技术与自动化 英文刊名: Computing Technology and Automation 2012,31(3) 年,卷(期): 参考文献(5条) 1.王芳 Google地图开发研究 2010(03) 2.高皓亮 基于GoogleMap的空间数据整合技术 3.吴忠信 地图投影 1980 4.Google Static Map API文档 5.ArcGIS开发文档,ArcObjects SDK for ArcGIS 10 本文链接:http://d.g.wanfangdata.com.cn/Periodical_jsjsyzdh201203035.aspx
分享到:
收藏