发明内容
本发明要解决的技术问题是提供一种点对点的瓦片地图动态投影方法及装置,以解决现有技术所存在的不能精确完成不同坐标系统之间的非线性转换,以及不能实现相邻瓦片无缝拼接的问题。
为解决上述技术问题,本发明实施样例提供一种点对点的瓦片地图动态投影方法,所述方法包括:
获取客户端用户请求的地图显示范围和客户端显示坐标系统,根据客户端用户请求的地图显示范围和客户端显示坐标系统确定用户请求的瓦片地图范围;
根据所述用户请求的瓦片地图范围和地图显示比例尺,确定最佳地图显示层级;
根据所述用户请求的瓦片地图范围的左上角和右下角坐标算出在所述最佳地图显示层级时对应的瓦片的行列位置,构成瓦片数据序列;
确定所述瓦片数据序列中的每一个瓦片投影到客户端显示坐标系统下的矩形范围,并将该矩形范围转换为瓦片数据显示的客户坐标范围;
依据各瓦片数据显示的客户坐标范围,生成同样大小的内存位图,并采用点对点的瓦片地图重采样方法绘制瓦片地图。
其中,所述用户请求的地图显示范围和所述用户请求的瓦片地图范围为矩形。
其中,所述获取客户端用户请求的地图显示范围和客户端显示坐标系统,根据客户端用户请求的地图显示范围和客户端显示坐标系统确定用户请求的瓦片地图范围,包括:
获取客户端用户请求的地图显示范围和客户端显示坐标系统;
判断客户端显示坐标系统与瓦片地图坐标系统是否一致,若是,则将用户请求的地图显示范围作为用户请求的瓦片地图范围;否则,
进行动态投影转换,将用户请求的地图显示范围转换为在瓦片地图坐标系统下的用户请求的瓦片地图范围。
其中,所述进行动态投影转换,将用户请求的地图显示范围转换为在瓦片地图坐标系统下的用户请求的瓦片地图范围方法包括:
在所述用户请求的地图显示范围的每个边上按预定间隔采样,获取采样点,将所有采样点转换到瓦片地图坐标系统上,获取转换后采样点的外接矩形,并将该外接矩形作为用户请求的瓦片地图范围。
其中,所述点对点的瓦片地图重采样方法包括:
依据所述内存位图宽度和高度,按照预定间隔生成一个客户坐标数组,并确定所述客户坐标数组中所有元素在客户端显示坐标系统下的显示坐标数组;
利用客户端显示坐标系统与瓦片地图坐标系统的转换关系,一次性将所述客户端显示坐标数组中所有元素转换为瓦片地图坐标数组;
利用双线性内插方法插值生成与所述内存位图高度和宽度一致的瓦片地图坐标数组,重采样后的瓦片地图坐标数组中的每一个元素对应于所述内存位图各像素在瓦片地图上的像素坐标值;
利用瓦片地图坐标系统求取所述瓦片的行列位置,将该位置上的像元直接赋给所述内存位图对应的像素;将推算出瓦片行列位置在瓦片数据之外的像元设置为透明颜色。
其中,所述预定间隔为2个像素。
本发明实施样例还提供一种点对点的瓦片地图动态投影装置,该装置包括:
第一确定模块,用于获取客户端用户请求的地图显示范围和客户端显示坐标系统,确定用户请求的瓦片地图范围,并将其发送给第二确定模块;
第二确定模块,用于根据所述用户请求的瓦片地图范围和地图显示比例尺,确定最佳地图显示层级;
构成模块,用于根据所述用户请求的瓦片地图范围的左上角和右下角坐标算出在所述第二确定模块确定出的最佳地图显示层级中对应的瓦片的行列位置,构成瓦片数据序列,并将瓦片数据序列发送给转换模块;
转换模块,用于确定所述瓦片数据序列中的每一个瓦片投影到客户端显示坐标系统下的矩形范围,并将该矩形范围转换为瓦片数据显示的客户坐标范围后提供给绘制模块;
绘制模块,用于依据各瓦片数据显示的客户坐标范围,生成同样大小的内存位图,并采用点对点的瓦片地图重采样方法绘制瓦片地图。
其中,所述第一确定模块包括:
获取单元,用于获取客户端用户请求的地图显示范围和客户端显示坐标系统并将其发送给判断单元;
判断单元,用于判断客户端显示坐标系统与预先存储的瓦片地图坐标系统是否一致,若一致,则将用户请求的地图显示范围作为用户请求的瓦片地图范围;否则,向转换单元发送转换通知指令,同时将用户请求的地图显示范围和瓦片地图坐标系统发送给转换单元;
转换单元,用于根据所述判断单元发来的转换通知指令,将用户请求的地图显示范围转换为在瓦片地图坐标系统下的用户请求的瓦片地图范围。
本发明的上述技术方案的有益效果如下:
上述方案中,通过点对点的动态投影转换绘制瓦片地图,保证了瓦片上所有位置在不同坐标系统下的动态投影转换关系,实现了瓦片地图嵌入至GIS系统中的动态投影转换和无缝拼接,又保证了瓦片地图的绘制速度,从而拓展了网络地图服务的应用范围。
具体实施方式
为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施样例进行详细描述。
本发明针对现有的不能精确完成不同坐标系统之间的非线性转换,以及不能实现相邻瓦片无缝拼接的问题,提供一种点对点的瓦片地图动态投影方法及装置。
实施样例一
如图1所示为本发明实施样例一提供的点对点的瓦片地图动态投影方法流程图,所述方法包括以下步骤:
S101:获取客户端用户请求的地图显示范围和客户端显示坐标系统,根据客户端用户请求的地图显示范围和客户端显示坐标系统确定用户请求的瓦片地图范围。
S102:根据用户请求的瓦片地图范围和地图显示比例尺,确定最佳地图显示层级。
S103:根据用户请求的瓦片地图范围的左上角和右下角坐标算出在所述最佳地图显示层级时对应的瓦片的行列位置,构成瓦片数据序列。
S104:确定所述瓦片数据序列中的每一个瓦片投影到客户端显示坐标系统下的矩形范围,并将该矩形范围转换为瓦片数据显示的客户坐标范围。
S105:依据各瓦片数据显示的客户坐标范围,生成同样大小的内存位图,并采用点对点的瓦片地图重采样方法绘制瓦片地图。
以下对图1中各步骤的具体实施方法进行详细说明。
上述方法中,由于在多数情况下,客户端显示坐标系统和瓦片地图坐标系统不同,需要进行二者间的转换。图2为图1中S101的具体实施方法流程图,如图2所示,确定用户请求的瓦片地图范围的方法包括以下步骤:
S1011:获取客户端用户请求的地图显示范围和客户端显示坐标系统。
S1012:判断客户端显示坐标系统与瓦片地图坐标系统是否一致?若是,则执行S1013,否则执行S1014。
S1013:将用户请求的地图显示范围作为用户请求的瓦片地图范围。
S1014:进行动态投影转换,将用户请求的地图显示范围转换为在瓦片地图坐标系统下的用户请求的瓦片地图范围。
优选的,S1014进行动态投影转换,将用户请求的地图显示范围转换为在瓦片地图坐标系统下的用户请求的瓦片地图范围方法为:在所述用户请求的地图显示范围的每个边上按预定间隔采样,获取采样点,将所有采样点转换到瓦片地图坐标系统上,获取转换后采样点的外接矩形,该外接矩形作为用户请求的瓦片地图范围,如图3所示。
可选的,所述地图显示范围和所述瓦片地图范围为矩形。
以下详细说明图1所示方法中S102的具体实施方法。
首先介绍几个S102中确定最佳地图显示层级需要用到的参数:
如图4所示,瓦片数据的组织类似金字塔形状,瓦片地图在最小比例尺时,整个地球显示为一张256像素乘以256像素的地图。如图5所示,当每增加1个缩放级别时,图片数会增加4倍,所述图片数的增加是按照一定规则的,即一张图片会按照从上到下、从左到右的顺序分裂为4张图片。对于层级L,如果将所有瓦片的图片拼接在一起,构成一整幅图像,则图像的像素数由下式(1)计算:
W=H=256×2L (1)
式(1)中,W和H分别表示图像列数和行数。将该虚拟的整幅图像左上角第一个像素位置定义为(0,0),然后从左向右从上到下对图像所有像元编码,就构成了像素坐标。
地面分辨率(Ground Resolution)是以一个像素代表的地面尺寸。当层级为0时,世界地图在一个瓦片地图上显示。由于一个瓦片的大小为256*256。因此,按经纬度计算,层级0的像元经度分辨率和纬度分辨率分别为360/256和180/256。设地球半径为r,纬度上的平行于纬圈的地面分辨率由式(2)计算:
如图4所示,瓦片地图采用金字塔结构存储数据,低层的瓦片在相邻高层中被细分为4个大小相等的瓦片。因此,对于任意层级L,平行于纬圈的地面分辨率由式(3)计算:
地图比例尺是指测量地物目标时,地图上距离与实际距离的比例。地图在屏幕上显示时,需要利用显示分辨率换算得到地理比例尺。显示分辨率使用dpi表示,dpi为地图显示时每英寸的像素数。如果瓦片地图按照1:1的像素比展示在屏幕上,则可依据式(4)计算此时的地图比例尺S:
S=1/(R×dpi×0.0254) (4)
在实际地图显示时,地图比例尺已知。设RL为最佳地图显示层级L对应的地面分辨率,R为实际地面分辨率,RL+1为L+1对应的地面分辨率,则最佳地图显示层级L满足下式(5):
RL+1<R≤RL (5)
最终,将S101中确定的瓦片地图范围代入式(5),能确定出该瓦片地图范围的最佳地图显示层级L,S102执行完毕。
图1中S103通过如下方法实现:
设瓦片地图上某一点的地图坐标为(x,y),利用坐标转换公式获取该点的地理坐标(lon,lat)。在此基础上,利用式(6)可求取该点在层级L时的像素坐标(Px,Py):
随后根据所述像素坐标(Px,Py),利用式(7)求取该点在给定层级L时的瓦片的行列位置(Tx,Ty):
式(7)中,Int为取整函数。
因此,根据用户请求的瓦片地图范围左上角和右下角坐标(x1,y1)、(x2,y2),首先将其转换为地理坐标(lon1,lat1)、(lon2,lat2)。利用式(6)和式(7)得到左上角和右下角坐标对应的瓦片的行列位置,从而构成瓦片数据序列,由于用户请求的瓦片地图范围为矩形,所以待绘制的瓦片数据序列也为一个矩阵序列,由此S103执行完毕。
由于瓦片按照瓦片地图坐标系统存储,需要转换为显示坐标系统后才能正常显示。因此S104中,对于瓦片数据序列中的每一个瓦片,获取其在瓦片地图坐标系统下的矩形范围,按照图3所示的思路反算该瓦片投影到客户端显示坐标系统下的矩形范围。GIS在展示空间数据时,一般规定屏幕坐标与地图坐标在水平和垂直方向均呈线性关系。因此,可根据屏幕距离和地图距离的相似比获取水平和垂直方向的线性系数。如图6所示,GIS中地图坐标的原点在左下角,X轴正方向向右,Y轴正方向向上;如图7所示,屏幕坐标的原点在左上角,X轴正方向向右,Y轴正方向向下。根据线性关系,不难得出公式(8)和公式(9):
X=ax*X’+bx (8)
Y=ay*Y’+by (9)
其中,X、Y为地图上某点的坐标,X’、Y’为屏幕上对应点的像素坐标,ax、ay为转换系数;bx、by为常数。
优选的,利用式(8)和式(9),将瓦片投影到客户端显示坐标系统下的矩形范围转换为客户区坐标范围,该范围即为瓦片数据显示的客户坐标范围。
S105中,首先依据各瓦片数据显示的客户坐标范围,生成同样大小的内存位图,用于存放投影后的瓦片地图。由于瓦片本身按照瓦片地图坐标系统存储,在瓦片地图绘制时,仍然需要进行动态投影转换。本实施样例采用点对点的瓦片地图重采样方法绘制瓦片地图,所述点对点的瓦片地图重采样方法包括以下步骤:
S1051:依据所述内存位图宽度和高度,按照预定间隔生成一个客户坐标数组,并确定所述客户坐标数组中所有元素在客户端显示坐标系统下的显示坐标数组,其中,所述预定间隔为2个像素;
S1052:利用客户端显示坐标系统与瓦片地图坐标系统的转换关系,一次性将所述客户端显示坐标数组中所有元素转换为瓦片地图坐标数组;
S1053:利用双线性内插方法插值生成与所述内存位图高度和宽度一致的瓦片地图坐标数组,重采样后的瓦片地图坐标数组中的每一个元素对应于所述内存位图各像素在瓦片地图上的像素坐标值;
S1054:利用瓦片地图坐标系统求取所述瓦片的行列位置,将该位置上的像元直接赋给所述内存位图对应的像素;并将推算出瓦片行列位置在瓦片数据之外的像元设置为透明颜色。
本实施样例提供的点对点的瓦片地图动态投影方法,在获取客户端用户请求的地图显示范围和客户端显示坐标系统后,确定用户请求的瓦片地图范围;根据所述瓦片地图范围和地图显示比例尺,确定最佳地图显示层级和在最佳地图显示层级时对应的瓦片的行列位置,从而构成瓦片数据序列;进一步确定所述瓦片数据序列中的每一个瓦片投影到客户端显示坐标系统下的矩形范围,并将该矩形范围转换为瓦片数据显示的客户坐标范围;依据各瓦片数据显示的客户坐标范围,生成同样大小的内存位图,并采用点对点的瓦片地图重采样方法绘制瓦片地图。
上述实施样例中,瓦片地图经过两次相反的动态投影转换过程,两次转换后,新的坐标范围大于等于原地图范围;另外,由于坐标系统之间并非简单的线性关系,瓦片在瓦片地图坐标系统中为矩形,投影后不一定保持矩形。上面两方面的因素导致了经过点对点动态投影转换后,有部分像元推算出来的瓦片行列位置在瓦片数据之外,将这些像元设置为透明颜色,从而可实现相邻瓦片地图无缝拼接,并且本实施样例采用点对点的瓦片地图重采样方法绘制瓦片地图,能够加快投影绘制过程。
瓦片地图动态投影显示效果图如图8和图9所示,展示的是当地图显示坐标系统为高斯投影,叠加google地图的效果。其中,图8为高斯投影下加载google地图中间过程的截图,可见高斯投影后的瓦片在显示时外边缘并非为矩形范围。图9为google地图加载完成后地图显示效果,从图9可见,本发明提供的方法实现了动态投影转换条件下的瓦片地图无缝展示,并能与其他空间数据(图8和图9还叠加显示了中国的公路和铁路数据)正确叠加。
实施样例二
如图10所示为本发明实施样例二提供的点对点的瓦片地图动态投影装置的结构示意图,该装置包括:
第一确定模块101,用于获取客户端用户请求的地图显示范围和客户端显示坐标系统,确定用户请求的瓦片地图范围并将其发送给第二确定模块102。
第二确定模块102,用于根据用户请求的瓦片地图范围和地图显示比例尺,确定最佳地图显示层级。
构成模块103,用于根据用户请求的瓦片地图范围的左上角和右下角坐标,算出在第二确定模块102确定出的最佳地图显示层级中对应的瓦片的行列位置,构成瓦片数据序列,并将瓦片数据序列发送给转换模块104。
转换模块104,用于确定所述瓦片数据序列中的每一个瓦片投影到客户端显示坐标系统下的矩形范围,并将该矩形范围转换为瓦片数据显示的客户坐标范围后提供给绘制模块105。
绘制模块105,用于依据各瓦片数据显示的客户坐标范围,生成同样大小的内存位图,并采用点对点的瓦片地图重采样方法绘制瓦片地图。
在多数情况下,客户端显示坐标系统和瓦片地图坐标系统不同,需要进行动态投影转换。
优选的,本发明实施样例在获取到客户端用户请求的地图显示范围和客户端显示坐标系统后,需对客户端坐标系统和瓦片地图坐标系统进行是否一致的判断,最终确定在瓦片地图坐标系统下用户请求的地图范围,即瓦片地图范围。对应的,图11为图10中第一确定模块101的详细结构示意图,参照图11,该模块包括:
获取单元1011,用于获取客户端用户请求的地图显示范围和客户端显示坐标系统并将其发送给判断单元1012;
判断单元1012,用于判断客户端显示坐标系统与预先存储的瓦片地图坐标系统是否一致,若一致,则将用户请求的地图显示范围作为用户请求的瓦片地图范围;否则,向转换单元1013发送转换通知指令,同时将用户请求的地图显示范围和瓦片地图坐标系统发送给转换单元1013;
转换单元1013,用于根据判断单元1012发来的转换通知指令,将用户请求的地图显示范围转换为在瓦片地图坐标系统下的用户请求的瓦片地图范围。
综上所述,本发明实施样例通过点对点的动态投影转换绘制瓦片地图,保证了瓦片上所有位置在不同坐标系统下的动态投影转换关系,实现了瓦片地图嵌入至GIS系统中动态投影转换和无缝拼接,又保证了瓦片地图的绘制速度,拓展了网络地图服务的应用范围。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。