本站小编为你精心准备了电子地图API的设计和实现参考范文,愿这些范文能点燃您思维的火花,激发您的写作灵感。欢迎深入阅读并收藏。
电子地图是利用地理信息系统、计算机网络技术和计算机存储技术等相结合而实现的一种新的地图展现方式,已广泛的应用于各行各业。当前的大部分电子地图应用都是采用瓦片地图技术,也有一小部分企业应用仍然基于矢量地图,两种技术各有优势和缺点。但在当下,前者的应用应该是略胜一筹,通过特定的地图投影模型,把通过遥测技术而生成的矢量地图,按固定的缩放比例和固定尺寸进行切分,生成一张张几KB至几十KB大小的图片,就容纳大量的地理信息,无论是使用客户端或者浏览器程序,地图都能在短短几秒内显示在用户面前,如此性能优越的用户体验,是动则需要读取几百兆的矢量地图客户端技术所望尘莫及的。在国内企业中,地理信息系统多为使用ArcGis等企业级GIS平台或开源的GeoServer平台,其矢量图客户端对终端计算机的硬件性能要求高,严重制约了GIS在国内企业的应用推广,所以基于瓦片地图技术的电子地图api的设计,有着广阔的应用场景。
1电子瓦片地图技术的基本概念
由于地球是球体,而我们日常所使用的地图为方形,所以地图就涉及到一个从经纬度到平面的转换过程,俗称地图投影方法。而在不同的场合和用途下使用不同的地图投影,不同的投影方法有不同的经纬度到方形坐标系的转换公式,大多数互联网地图服务基本使用墨卡托投影。地面分辨率概念:地面分辨率类似地图中的比例尺,是像素与地面距离(米)的比例。以谷歌地图为例,其地图瓦片每个均为256×256像素,当缩放级别为1时,全球地图大小为512×512像素,即有4个地图瓦片,赤道的分辨率=赤道周长距离(米)/512(像素)。当缩放级别为2时,赤道的分辨率为赤道周长距离/1024,即地图长度=地图宽度=256×2缩放等级像素。由此可见,地面分辨率取决于两方面,地图缩放级别和纬度,缩放级别决定像素即地图瓦片的数量,纬度决定该地图等级下的地表距离。地面分辨率(米/像素)=(cos(纬度×pi/180)×2×pi×赤道半径/米)/(256×2×缩放级别像素)。根据墨卡托投影,因为在每个缩放级别下,地图所含的像素都不同,因此地图瓦片的数量也不同。每个瓦片都有一个坐标值,从左上角的(0,0)到右下角的(2缩放等级–1,2缩放等级–1)。对一个已知像素的XY坐标值,其所在的瓦片坐标值为,tileX=floor(pixelX/256),tileY=floor(pixelY/256)。
2电子地图API的总体设计
2.1电子地图API基本功能电子地图API是一套由编程语言编写的应用程序接口,能够构建功能丰富、交互性强的地图应用,包含了电子地图各项基本功能的接口。基本地图功能:展示平面地图、卫星地图等,拖拽、移动、缩放地图等。地图图层功能:支持重设地图底图、地图上叠加实时交通图层或自定义图层功能。覆盖物功能:支持在电子地图上显示点、线、面、热区、行政区划、用户自定义覆盖物等;地图控件展示功能:支持地图缩放控件、工具条、比例尺等。
2.2电子地图API逻辑架构地图API界面容器是用户所看到的界面,是其他所有层的容器。地图层容器负责存放各种类型的地图,如卫星图、2D平面图等,这些图可以按上一节所说的方法,把地图按256×256像素预先切割好,并存放在文件服务器或者CDN上,以供电子地图API读取并显示。该容器会随鼠标拖拽或者触摸移动事件而平移,地图也跟随容器而平移。覆盖物层容器负责显示点、线、多边形、标注等自定义图形,如显示导航路线、用户自定义的矢量标注物。动作响应层负责处理界面事件,如鼠标点击、鼠标滚轮、鼠标拖拽、手指触摸移动、双手放大缩小等,地图API根据该层响应的事件来做相应操作,如移动地图图层、放大缩小地图、显示导航路线图等。控件层容器负责显示地图的工具控件,如鹰眼、工具条、比例尺、地图缩放控件。
2.3事件流程设计整个电子地图API由地图层容器、覆盖物层容器、动作响应层、控件层容器组成,除动作响应层以外,其他层都能会包含多个对象,这些对象都可能会对鼠标、触摸事件做出响应,事件发生后,每层的该事件发生位置的对象都会被响应该事件,处理完后会把事件传给下一层。如用户在地图上点击鼠标,控件层容器层先的相关对象先响应该事件,处理完成后再把事件传递给覆盖物层容器,最后是传递给地图层容器,逐层传递。但有些对象会屏蔽下一层容器的对象对上述事件的响应(如拖动地图缩放控件时候,地图、地图上的标注不会跟随移动),使用观察者模型作设计能有效解耦地图API的各个模块。观察者模式定义了对象之间依赖关系,发生改变的对象称之为观察目标,而被通知的对象称之为观察者,当一个对象改变其状态时,它的所有观察者都会收到通知,并按既定的策略做出反映。一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,所以可以根据需要增加和删除观察者,使得系统更易于扩展,观察者模式又称为-订阅模式。
3电子地图API的实现
电子地图API最关键是显示服务器上的瓦片地图,所以动作响应层和地图层是整个API的重点,而整个动作响应层的中心点和动作响应层的长宽是决定加载哪些瓦片地图的关键所在。由于地图是经纬度球面坐标系统映射到墨卡托平面坐标系统的结果,地图层容器存放的正是墨卡托平面坐标系统的瓦片地图,通过地图投影类中的公式,能计算出某缩放等级下电子地图中心点经纬度对应墨卡托平面坐标系的坐标,然后把该坐标作为地图层和动作响应层的中心点,地图层容器根据动作响应层的中心点在墨卡托平面坐标系统的位置和地图窗口的长度、宽度,计算出地图层应该加载哪些瓦片地图并加载。当地图拖动时,地图API根据动作响应层的XY轴平移量,根据上述办法判断出加载的瓦片地图,哪些在地图缓存队列的图片不再需要。地图缓存队列大小固定,有助控制内存消耗量,当需加载的瓦片地图不在缓存队列中,则按LRU策略删除不在地图窗口中的地图瓦片,并加载新的。为改善用户体验,地图层容器面积稍微比动作响应层大,地图缓存队列的大小也设成比地图层容器稍大,以免用户拖动地图时候出现白边。
4结语
本文通过提出新的基于瓦片地图技术的电子地图API设计,实现了高性能的瓦片地图展示办法。通过采用分层技术和观察者模式的设计方法,地图层容器、覆盖物层容器、动作响应层、控件层容器能做到各司其责,在其实现中均能及时响应各种用户动作,根据此设计,作者分别用Javascript和Actionscript3分别编写地图API,由于采取了单线程设计并结合最新的JavascriptWEBGL技术和Flashstage3D技术,性能较现有的商用、开源地图API有大幅度提高,在性能较差的设备也能表现良好,增强了地理信息系统在企业中的使用度。
作者:简玮侠 单位:广东电网有限责任公司中山供电局信息中心