一种实时的点对点客户端在线地图动态投影方法
2018-04-28王广杰吕朝阳
陈 军, 王广杰, 吕朝阳
(1. 成都信息工程大学 资源环境学院, 四川 成都 610225;2. 四川师范大学 西南土地资源评价与监测重点实验室, 四川 成都 610066)
近年来,网络地图作为新的地图网络表达逐渐走进人们的视线,它通过分层缓存静态瓦片地图,随客户显示窗口大小提供显示范围适当分辨率的瓦片数据,从而为用户提供流畅、便捷、数据丰富的地图资源[1].然而,随着在线地图应用的不断普及,用户已经不满足通过浏览器进行在线瓦片地图的简单访问[2].在许多专业领域,迫切需要利用瓦片地图显示流畅、数据资源丰富等优点,将其直接集成到现有的GIS桌面应用程序上,实现瓦片地图与GIS数据的无缝叠加和整合分析.
在国外,美国环境系统研究所公司及很多开源社区都有类似的项目.开源社区Codeplex的BruTile基于C#的开源库访问各种瓦片服务,如TMS、ArcGIS Tile Server、OpenStreetMap和Bing;GMap.NET作为一款功能强大、免费的NET控件,也支持在C/S模式下访问Google、雅虎、必应、OpenStreetMap等地图服务[3].在国内,巫细波等[4]采用C#设计了一个基于Google Maps的应用程序,通过这个程序可以获取免费的地图或者卫星影像数据;韦胜[5]阐述了在Arc Engine环境下实现瓦片地图的访问与拼接方法,并基于开源项目ArcBruTile将瓦片地图集成到ArcEngine,拓展了瓦片地图应用范围;张业舟等[6]阐述了GoogleMaps瓦片组织,分析了Google地图的原理,并对Google瓦片进行了应用;戴侃等[7]通过对异构GIS平台瓦片地图数据和瓦片数据国际标准的研究,提出了适用于不同平台的瓦片数据转换共享方法.
从技术实现上来看,这些研究和项目都提供了访问瓦片数据、数据缓存及瓦片拼接的解决方法.由于未考虑在线地图投影显示问题,要求客户端其他空间数据只能投影到在线地图上显示,而客户端系统往往需要定义不同的显示坐标系统.为解决该问题,韦胜[8]申请了《一种动态地图投影下的网络地图配准及绘制方法》的专利,该专利采用多个“特征点”获取到的瓦片地图误差偏移值对每个瓦片的地理范围值进行误差校正.“特征点”不仅获取算法复杂,而且仅用少量“特征点”投影转换,容易导致较大误差[9].为此,本文提出一种客户端在线地图点对点的实时动态投影方法,在保证一定的投影精度的同时,能提高动态投影的实时性.
1 无投影转换状态下的在线地图展示机制
在线地图是一种基于金字塔模型的静态瓦片地图,将全球按不同层次划分为大小相同的数据分片,以瓦片文件形式存储在服务器上.每一个分片代表地球表面上特定区域,并按一定的主题来表现区域的地理信息.随着层级的增加,数据分片代表的地面区域越小,对地理信息的表征越为详尽.用户在浏览地图时,根据当前比例尺,自动计算出最佳显示层级,并从服务器上下载分片数据.由于用户只能在一定大小的屏幕上浏览在线地图,并且使用了数据缓存技术,从而实现在线地图的低带宽、快速展示[10-12].
设地图上某点的坐标为(x,y),将其转换为该点的经纬度(lon,lat),利用(1)式可求取在显示层次为L时该点的像素坐标(Px,Py)为
(1)
根据像素坐标(Px,Py),利用(2)式可求取该点在给定层次L的瓦片行列位置(Tx,Ty):
(2)
其中Int为取整函数.
在线地图以瓦片组合的方法完成显示区域内地图的显示[13-15].如果客户端显示坐标系统采用在线地图的存储坐标系统,瓦片在客户端显示时仍保持为矩形,此时,将客户端左上角(x1,y1)和右下角(x2,y2)地图坐标依据(1)和(2)式分别求得瓦片行列位置(Tx1,Ty1)和(Tx2,Ty2),则待显示的瓦片序列为
Ts={(Tx,Ty)|x1≤x≤x2,y1≤y≤y2}.
(3)
由于不考虑投影转换,将瓦片序列的所有瓦片按空间位置直接在客户端显示设备对应矩形区域绘制,就能实现在线地图的无缝显示.
2 点对点的在线地图动态投影显示基本思路
GIS空间数据显示有2个重要的坐标系统,即图层坐标系统和显示坐标系统.图层坐标系统是指空间数据层在存储时所采用的坐标系统,如在线地图一般采用Web Mercator坐标系统存储瓦片数据.地图以图层方式组织,一幅地图一般包含多个图层,但不同的图层可能具有不同的图层坐标系统.为使同一个区域不同坐标系的图层能在地图上正确叠放,必须采用统一的地图坐标系统,即显示坐标系统.当图层的坐标系统和地图的显示坐标系统不一致时,需要在显示时实时转换图层的坐标系,这个过程为GIS的动态投影显示过程.
当在线地图坐标系统和地图显示坐标系统不一致时,需要对在线地图进行动态投影转换.在线地图动态投影转换分为2步,首先获取动态投影的瓦片序列,然后对瓦片序列各瓦片投影转换显示.
2.1在线地图动态投影的瓦片序列获取在无投影转换条件下,直接依据显示范围左上角和右下角坐标按照(3)式求取瓦片序列.在投影转换过程中,由于源坐标系统与目标坐标系统一般不是线性关系,左上角和右下角坐标转换后得到的矩形范围可能小于目标矩形范围.为相对精确地获取转换后的目标矩形,在源矩形4个边上按一定间隔重样,获取一定数量的采样点,将所有采样点转换为在线地图坐标系统,获取转换后采样点的外接矩形,该外接矩形作为请求瓦片地图范围,如图1.
图 1 地图范围的投影转换
2.2点对点的在线地图动态投影方法在线地图的每一个瓦片在自身坐标系统中代表地面的一个矩形范围.从图1可见,在投影转换过程中,在线地图坐标系统的瓦片在客户端坐标系统中不再保持矩形边缘,简单的瓦片矩形拼接不能得到正确的地图.有效的解决办法是,将各瓦片分别投影转换,先绘制到临时的瓦片内存位图上,再映射到客户系统的显示设备上.
1) 瓦片内存位图的创建.瓦片内存位图采用客户坐标度量,单位为像素,瓦片内存位图的大小与客户显示设备的分辨率密切相关.为避免数据显示变形,要求客户坐标与地图坐标在水平和垂直方向均呈线性关系.客户坐标和地图坐标转换公式为
X=ax*X′+bx,
(4)
Y=ay*Y′+by,
(5)
其中,X、Y为地图上某点的坐标,X′、Y′为客户像素坐标,ax、ay为转换系数,bx、by为偏移常数.
利用(4)和(5)式,将瓦片投影到显示坐标系统下的矩形范围转换为客户区坐标范围,得到瓦片显示区域的水平和垂直方向的像素数,据此创建同样大小的内存位图用于存放投影后的瓦片地图.瓦片地图先绘制在内存位图上,然后再显示到屏幕上,从而实现在线地图的动态投影显示.
2) 瓦片的点对点动态投影转换.将内存位图每一个像元作为一个“特征点”,将像元中心的客户坐标转换为地图坐标,再根据投影变换关系转换为在线地图坐标;最后,根据在线地图坐标求取瓦片的像元位置,将其像素值赋给源内存位图的像元.逐像元对内存位图所有像元求取像素值后,瓦片就实现了投影转换.点对点投影转换如图2.
图 2 点对点投影转换
3 点对点的实时在线地图动态投影
3.1在线地图实时动态投影基本思路为获取高精度的投影地图,点对点动态投影要求内存位图所有像元均作为“特征点”,通过投影变换从瓦片对应位置上获取像素值;但投影转换算法复杂度高,大量“特征点”的批量转换,会导致性能降低,并影响在线地图显示的实时性.本文尝试使用简单的规则减少“特征点”,即对内存位图的行和列均按一定间隔采样,将采样后的“特征点”投影转换后,对坐标进行双线性内插,获取内存位图所有像元的坐标.
设待计算内存像元坐标为(x,y),其相邻4个“特征点”坐标为(j,i)、(j+1,i)、(j+1,i)和(j+1,i+1).以求取该像元投影坐标X为例,设投影坐标的X分量分别为X(j,i)、X(j+1,i)、X(j+1,i)和X(j+1,i+1).首先利用(6)式在X方向线性内插:
(6)
然后利用(7)式在Y方向再做一次线性插值,得到最终的X坐标:
X=(Xb-Xt)×(y-i)+Xt,
(7)
对于像元投影坐标Y,替换(6)和(7)式投影坐标分量Y,得到最终的Y坐标.
3.2实时动态投影最佳间隔的确定为定量研究采样间隔对投影精度和效率的影响,选择相对Web Mercator投影变形较大的多个坐标系统,在同一个区域对相邻的25块瓦片反复进行投影拼接实验.以间隔1像元采样(即所有像元均投影转换)的投影坐标序列为参照,采用STD(均方差)、SUMP(像元总误差)、MAXP(最大像元误差)和TIME(处理时间)4个指标评价不同采样间隔的精度和效率.STD为内存位图同位置上采样内插的投影坐标与参照坐标的距离均方差,SUMP和MAXP分别表示由于坐标值差异导致推算的瓦片像元的距离误差和与最大距离误差,TIME表示25个瓦片动态投影总时间.前2个指标均以单个瓦片为统计对象,即各瓦片的指标平均值.实验结果如表1所示.
表 1 不同采样间隔的动态投影精度和效率对比
从表1可见,随着采样间隔增大,动态投影总时间不断减少,投影误差不断增大.从变化趋势上看,当采样间隔增大时,动态投影效率提升幅度不断下降,投影误差则以近似指数曲线方式快速上升;因此,仅通过少量“特征点”进行在线地图动态投影,不可避免产生较大误差.当采样间隔为2时,处理时间减少到可以实时处理的程度,并且误差相对较小.在单个瓦片上,投影总误差在4个像元左右,最大像元误差为1个像元,相对于256×256的瓦片总像元个数而言,投影误差肉眼很难察觉:因此,本文将采样间隔为2作为实时动态投影的采样间隔.
3.3瓦片数据的无缝拼接由于坐标系统之间并非简单的线性关系,瓦片数据在瓦片地图坐标系统中为矩形,投影后不一定保持矩形,导致经过点对点投影转换后,有部分像元推算出来的瓦片行列位置在瓦片数据之外.将这些像元设置为透明,以实现相邻瓦片单元地图能无缝拼接.图3展示了无缝拼接过程,左图为瓦片数据拼接的中间截图,由于显示坐标系统和在线地图坐标系统并非线性关系,拼接边缘并非矩形;右图为拼接完成的显示效果图,瓦片之间无拼接缝隙,相邻瓦片过渡自然,证明了本文方法的有效性.
图 3 瓦片数据的无缝投影拼接
4 结束语
为解决在线地图在GIS客户端实时投影显示问题,提出了一种点对点的客户端在线地图动态投影方法.首先,将显示范围投影转换到在线地图坐标范围内,计算显示的瓦片序列.对于待显示的每一个瓦片,先计算内存位图大小,并每隔2个像素采集显示坐标点,并转换到在线地图坐标系统,求取像素值.然后,利用双线性内插方法完成瓦片内存位图所有像素值的求取并绘制到屏幕上.实验证明,本文算法计算精度和效率相对较高,能保证相邻瓦片之间无缝拼接,满足了在线地图实时动态投影展示;同时,也验证了“少量特征点”存在较大的投影误差,影响动态投影精度.本文的研究思路和成果具有一定的理论意义和实践价值.
[1] 姚真凯. 瓦片地图技术在水利WebGIS系统中的开发研究与应用[J]. 浙江水利科技,2009(6):40-42.
[2] 黄梦龙. 瓦片地图技术在桌面端GIS中的应用[J]. 地理空间信息,2011,9(4):149-151.
[3] REGUERAS L M, CASTRO J P D. A neural network based intelligent system for tile prefetching in web map services[J]. Expert Systems with Applications,2013,40(10):4096-4105.
[4] 巫细波,胡伟平. Google Maps运行机制以及应用研究[J]. 华南师范大学学报(自然科学版),2009,34(2):107-108.
[5] 韦胜. ArcEngine环境下实现瓦片地图的访问与拼接[J]. 华南师范大学学报(自然科学版),2012,37(6):737-740.
[6] 张业舟,黄兴. Google Maps瓦片组织分析和应用研究[J]. 测绘时空,2012(2):22-25.
[7] 戴侃,李卫红,初润润. 异构GIS瓦片地图转换共享模式研究[J]. 地理空间信息,2014(2):33-39.
[8] 韦胜. 一种动态地图投影下的网络地图配准及绘制方法:CN 103065544A[P]. 2013-4-24.
[9] 韦胜. ArcEngine环境下实现瓦片地图的访问与拼接[J]. 武汉大学学报(信息科学版),2012,37(6):737-740.
[10] 宫净敏,黄钰,李成名. 基于NewMap在线专题地图制作[J]. 地理信息世界,2016,23(3):9-12.
[11] 苏旭明,谭建成. WebGIS中瓦片地图关键技术研究[J]. 北京测绘,2012(2):9-12.
[12] 罗智勇,黎小东. 基于数据库存储方案的高性能瓦片地图服务研究[J]. 地理与地理信息科学,2013,29(3):48-52.
[13] 刘冰,谢轲,陈小乐,等. 基于GIS的瓦片式地图切图算法的设计与实现[J]. 科技信息,2011(7):66-67.
[14] 郭明武,彭清山,李黎. ArcGIS Server中地图瓦片实时在线局部更新方法研究[J]. 测绘通报,2012(2):35-38.
[15] 赵丽娟. 瓦片地图在遥感影像专题图中的应用研究[J]. 测绘,2014,37(1):17-19.