发明内容
有鉴于此,本发明的主要目的在于提供一种地理信息瓦片服务的提供方法及实现该方法的装置,以在提高服务响应速度的前提下实现地理信息瓦片的动态更新和实时裁切。
本发明提供的一种地理信息瓦片服务的提供方法,包括以下步骤:
A、接收客户端的地理信息瓦片服务请求,并从中解析出所述请求范围内的地理信息瓦片的相关信息;
所述服务请求包括以下参数:地图比例尺、所述请求范围的最大和最小经度、所述请求范围的最大纬度和最小纬度及瓦片数据类型;
所述相关信息包括:瓦片数量、瓦片层级、各瓦片行列号及各瓦片的中心经纬度;
B、根据所述参数和所述相关信息检索瓦片元数据库,如果检索到与所述相关信息对应的瓦片元数据,则进入步骤C;否则进入步骤D;
C、根据所述参数和所述相关信息检索地理信息元数据库并从中提取出与该瓦片对应的地理信息元数据的更新时间,比较所述瓦片元数据中的瓦片更新时间与所述地理信息元数据的更新时间是否一致:如果一致,则根据步骤B中检索到的所述瓦片元数据对应的瓦片数据索引,从瓦片本体数据库中获取该瓦片的本体数据,并进入步骤F;否则进入步骤D;
D、使用所述参数和所述相关信息检索所述地理信息元数据库,从中获取与所述相关信息对应的地理信息本体数据索引,通过该索引从所述地理信息本体数据库中获取与所述相关信息对应的地理信息本体数据,之后对所述地理信息本体数据进行栅格化及裁切处理,从而生成与所述相关信息所对应的瓦片;
E、将生成的瓦片的元数据和本体数据分别写入所述瓦片元数据库和所述瓦片本体数据库;
F、根据所述瓦片层级,一边将从所述瓦片本体数据库中获取的瓦片的本体数据或所述生成的瓦片的本体数据逐片进行封装,一边将封装好的瓦片的本体数据逐片返回给客户端。
在上述方法中,对于所述客户端的地理信息瓦片服务请求的解析包括:
采用以下量化了人眼观察现实世界事物的自然规律的公式求出所述瓦片层级:
其中,scale为地图比例尺;res为地面分辨率;level表示所述瓦片层级,取值范围为大于等于1的正整数;DPI表示屏幕分辨率;lat表示纬度,取值范围为-90°至90°;r表示地球长半径;
采用以下公式求出所述请求范围内最北侧一行的瓦片的行号Rmin,
Rmin=floor((Yorigin-Ymax)/(res*height));
采用以下公式求出所述请求范围内最南侧一行的瓦片的行号Rmax:
Rmax=floor((Yorigin-Ymin)/(res*height));
采用以下公式求出所述请求范围内最东侧一列的瓦片的列号Cmax:
Cmax=floor((Xmax-Xorigin)/(res*width));
采用以下公式求出所述请求范围内最西侧一列的瓦片的列号:Cmin
Cmin=floor((Xmin-Xorigin)/(res*width));
在求出所述请求范围内的边界行列号后,通过步长为1的循环嵌套求出所述请求范围内每个瓦片的行号R和列号C;
然后,可根据求得的瓦片行列号R,C和瓦片的层级L,计算出各瓦片所对应的中心经纬度坐标x,y,其计算公式如下:
x=Xorigin+(C+1)(res*width)和
y=Yorigin-(R+1)(res*width);
其中,Xorigin和Yorigin分别为起算点经纬度坐标;width和height分别为瓦片的宽和高;floor(a)函数为用于向下取整的函数,即取不大于a的最大整数。
在上述方法中,对于所述客户端的地理信息瓦片服务请求的解析还包括:
采用以下公式求出所述请求范围内的瓦片数量N:
N=(Rmax-Rmin+1)(Cmax-Cmin+1)。
由上可以看出,本发明根据人眼观察现实世界事物的自然规律,即地图比例尺越大,地物的分辨率越高,所表示出的物体越详细(相当于站在金字塔底看地物);相反,地图比例尺越小,地物的分辨率越低,所表示出的物体就越宏观(相当于站在金字塔顶看地物),将瓦片划分为能够快速且连续显示的数字化现实世界的金字塔结构,并利用元数据库与本体数据库的形式快速检索瓦片。同现有技术相比,本发明可将瓦片数据逐片返回给客户端,进而可以支持客户端逐片显示瓦片数据,使用户在客户端上所见的地图是逐渐显示的效果,而不是等待地图显示的画面,进而提高了请求响应速度,增强了用户体验。
本发明还提供了一种用于实现上述方法的装置,包括:
服务响应模块,用于接收客户端的地理信息瓦片服务请求,并从中解析出所述请求范围内的地理信息瓦片的相关信息;
检索模块,与所述服务响应模块电连接,用于根据所述服务请求和所述地理信息瓦片的相关信息检索瓦片元数据库,如果检索到与所述相关信息对应的瓦片元数据,则发出瓦片更新时间识别指令,否则发出瓦片生成指令;
更新时间识别模块,与所述检索模块电连接,用于根据所述瓦片更新时间识别指令提取出所述瓦片元数据中的瓦片更新时间,之后根据所述服务请求和所述地理信息瓦片的相关信息检索地理信息元数据库并从中提取出与该瓦片对应的地理信息元数据的更新时间,比较该瓦片的更新时间与该地理信息数据的更新时间是否一致:如果一致,则根据所述检索模块检索到的所述瓦片元数据对应的瓦片数据索引从瓦片本体数据库中获取该瓦片的本体数据;否则发出瓦片生成指令;
瓦片裁切模块,与所述检索模块和所述更新时间识别模块电连接,用于根据瓦片生成指令,使用所述服务请求和所述地理信息瓦片的相关信息检索地理信息元数据库,从检索中获取与该地理信息瓦片的相关信息对应的地理信息本体数据索引,并通过该索引从地理信息本体数据库中获取地理信息本体数据,之后对该地理信息本体数据进行栅格化和裁切处理,以便生成与上述地理信息瓦片的相关信息对应的瓦片;
瓦片更新模块,与所述瓦片裁切模块电连接,用于根据所述地理信息瓦片的相关信息将生成的瓦片的元数据和本体数据分别写入所述瓦片元数据库和所述瓦片本体数据库;
服务反馈模块,与所述更新时间识别模块、所述瓦片更新模块和/或所述裁切模块电连接,用于一边将从所述瓦片本体数据库中获取该瓦片的本体数据或所述生成的瓦片的数据逐片进行封装,一边将封装好的瓦片的本体数据逐片返回给客户端。
具体实施方式
下面,结合附图详细介绍本发明涉及的地理信息瓦片服务的提供方法。
如图3所示,上述地理信息瓦片服务的提供方法包括以下步骤:
步骤100:接收客户端的地理信息瓦片服务请求,并从中解析出该请求范围内的地理信息瓦片的相关信息。
在本步骤中,客户端的地理信息瓦片服务请求包括地图比例尺(scale)、所请求的地理信息范围最大经度(Xmax)、最小经度(Xmin)、最大纬度(Ymax)、最小纬度(Ymin)和瓦片数据类型(type)等参数。而对于该请求的解析过程就是计算出该请求范围内所有地理信息瓦片(下文简称为“瓦片”)的信息(包括瓦片的数量N、瓦片的层级L、各瓦片的行列号R,C和各瓦片的中心经纬度坐标x,y)。
上述瓦片的层级属于能够快速且连续显示的数字化现实世界所采用的金字塔结构。该金字塔结构按照人眼观察现实世界事物的自然规律分为多层。地图比例尺越大,地物的分辨率越高,所表示出的物体越详细,相当于站在金字塔底看地物;相反,地图比例尺越小,地物的分辨率越低,所表示出的物体就越宏观,相当于站在金字塔顶看地物。为了量化这一自然规律,本实施例采用了下列公式:
其中,level表示金字塔结构的层级(瓦片的层级L),取值范围为大于等于1的正整数;DPI表示屏幕分辨率;lat表示纬度,取值范围为-90°至90°;r表示地球长半径,按照2000国家大地坐标系规定参数取值为6,378,137米。
根据上述量化公式(1)、(2),可以计算出地面分辨率、地图比例尺和瓦片层级之间的相互关系如下表所示:
表1.地面分辨率、地图比例尺和瓦片层级之间关系
层级(L) |
地面分辨率(度/像素) |
地图比例尺 |
1 |
0.703125 |
1:295829355.4545 |
2 |
0.3515625 |
1:147914677.7273 |
3 |
0.17578125 |
1:73957338.8636 |
4 |
0.087890625 |
1:36978669.4318 |
5 |
0.0439453125 |
1:18489334.7159 |
6 |
0.02197265625 |
1:9244667.3580 |
7 |
0.010986328125 |
1:4622333.6790 |
8 |
0.0054931640625 |
1:2311166.8395 |
9 |
0.00274658203125 |
1:1155583.4197 |
10 |
0.001373291015625 |
1:577791.7099 |
11 |
0.0006866455078125 |
1:288895.8549 |
12 |
0.00034332275390625 |
1:144447.9275 |
13 |
0.000171661376953125 |
1:72223.9637 |
14 |
8.58306884765629E-05 |
1:36111.9819 |
15 |
4.29153442382814E-05 |
1:18055.9909 |
16 |
2.14576721191407E-05 |
1:9027.9955 |
17 |
1.07288360595703E-05 |
1:4513.9977 |
18 |
5.36441802978515E-06 |
1:2256.9989 |
根据上述地理信息瓦片服务请求中包括的参数,求出在该请求范围内的各瓦片的行列号R,C、瓦片的数量N和瓦片中心点的经纬度坐标x,y的计算如下:
最大纬度(Ymax)对应的所有瓦片,即请求范围内最北侧一行的瓦片,其行号的计算公式如下:
Rmin=floor((Yorigin-Ymax)/(res*height)) (3)
最小纬度(Ymin)对应的所有瓦片,即请求范围内最南侧一行的瓦片,其行号的计算公式如下:
Rmax=floor((Yorigin-Ymin)/(res*height)) (4)
最大经度(Xmax)对应的所有瓦片,即请求范围最东侧一列的瓦片,其列号的计算公式如下:
Cmax=floor((Xmax-Xorigin)/(res*width)) (5)
最小经度(Xmin)对应的所有瓦片,即请求范围最西侧一列的瓦片,其列号的计算公式如下:
Cmin=floor((Xmin-Xorigin)/(res*width)) (6)
在求出上述请求范围的边界行列号后,可通过步长为1的循环嵌套求出该请求范围内每个瓦片的行列号R,C。
该请求范围内的瓦片数量(N)的计算公式如下:
N=(Rmax-Rmin+1)(Cmax-Cmin+1) (7)
然后,可根据求得的瓦片行列号R,C和瓦片的层级L,计算出各瓦片所对应的中心经纬度坐标x,y,其计算公式如下:
x=Xorigin+(C+1)(res*width)和
y=Yorigin-(R+1)(res*width) (8)
在公式(3)至(8)中,Xorigin和Yorigin分别为起算点经纬度坐标,在本实施例中,Xorigin=-180°,Yorigin=90°;res为地面分辨率(具体算法参见公式(2));width和height分别为瓦片的宽和高,在本实施例中,width=256像素,height=256像素;floor(a)函数为“向下取整”函数,即取不大于a的最大整数。
步骤200:检索并提取从上述请求解析出的该请求范围内的地理信息瓦片数据。
在本步骤中,根据该请求包括的瓦片数据类型(type)参数和上步中求出的该请求范围内的瓦片的层级L和行列号R,C,检索地理信息瓦片服务端的瓦片元数据库。
在本实施例中,为了进一步提高地理信息瓦片服务的效率,采用了元数据库概念,也就是为瓦片和地理信息的本体数据库分别建立了相当于其完整索引的瓦片和地理信息的元数据库。
上述瓦片的元数据库存储有瓦片的元数据,并通过键(例如,ID)与其本体数据库建立索引关系,其库表结构如下表2所示:
表2.瓦片元数据库库表结构
其数据表结构如下表3所示:
表3.瓦片元数据库数据表结构
瓦片本体数据库用于存储瓦片的本体数据,可按照瓦片数据内容的类别划分出多个分库。在本实施例中,如图4所示,瓦片本体数据库划分为水系瓦片数据、居民地及设施瓦片数据等8个分库目录。而分库目录下的目录为通过上述公式计算出的瓦片层级,如L1,L2等。瓦片层级目录下的目录为该层级瓦片的行号,如R1、R2等。而瓦片行号目录下为该层级的瓦片数据,通常利用瓦片的列号标识,例如“C1.png”、“C2.png”等。为了快速定位每个分库目录,各分库目录所对应的要素分类代码如下表4所示:
表4.要素分类及代码
代码 |
对应类型 |
1 |
水系要素 |
2 |
居民地及设施要素 |
3 |
交通要素 |
4 |
地名与行政区划要素 |
5 |
植被要素 |
6 |
地图数据 |
7 |
影像数据 |
8 |
地形数据 |
地理信息元数据库存储有地理信息数据的元数据,并通过键(例如,ID)与其本体数据库建立索引关系,其库表结构如下表5所示:
表5.地理信息元数据库库表结构
其数据表结构如下表6所示:
表6.地理信息元数据数据表结构
地理信息本体数据库用于存储地理信息的本体数据,其架构如图5所示,首先按照数据类型划分为分库,如水系数据、居民地及设施数据等8个分库。又根据比例尺和分辨率的变化细化为多个子库,如1:500、0.5m等。为了快速定位每个分库,跟分库所对应的要素分类代码如上表4所示。
在上述检索过程中,如果在瓦片元数据库中检索不到该请求范围内的相关瓦片,则根据该请求包括的参数及上述公式所求出的瓦片信息对地理信息数据进行瓦片裁切操作,并更新瓦片元数据库和瓦片本体数据库。具体的瓦片裁切、更新步骤如下:
首先,根据该请求中包括的参数(例如scale、Xmax、Xmin、Ymax、Ymin和type等)对地理信息元数据库进行检索,以获取与上述参数对应的地理信息本体数据的索引,然后利用该索引获取地理信息本体数据的地址,进而调取地理信息本体数据库中的与上述参数对应的地理信息本体数据。之后,对地理信息本体数据进行栅格化处理,并按照上述求出的瓦片信息将该地理信息本体数据切分成瓦片数据。地理信息瓦片的裁切为本领域的公知技术,在此不再赘述。
然后,将新切分出的瓦片的元数据和本体数据分别实时录入至瓦片元数据和瓦片本体数据库中。
对于瓦片元数据的录入,只需将其信息(如ID、瓦片数据类型、瓦片层级、行列号)以及更新时间/录入时间(TUpdate)录入瓦片元数据库中即可。
对于瓦片本体数据的录入,根据切分出的瓦片数据类型(type)及其层级L、瓦片行列号R,C,将该瓦片数据实时录入瓦片本体数据库中与该类型对应的分库中对应于上述层级L和瓦片行列号R,C的目录下。如果瓦片本体数据库中不存在本次地理信息瓦片服务请求中提到的瓦片数据类型,则在瓦片本体数据库中增加以对应于该瓦片数据类型的分库目录,之后按照该瓦片数据的层级L和行列号R,C将该瓦片数据录入该分库目录中。
在上述检索过程中,如果在瓦片元数据库中检索到该请求范围内的相关瓦片,则从瓦片元数据库中提取出该瓦片的更新时间(TUpdate),同时根据该请求中包括的参数(例如scale、Xmax、Xmin、Ymax、Ymin和type等)对地理信息元数据库进行检索,以调取与上述参数对应(即与该瓦片对应)的地理信息本体数据更新时间(DUapdate)。之后,比较TUpdate和DUapdate是否一致:若一致,则根据相关瓦片元数据对应的瓦片数据索引,从瓦片本体数据库中获取该瓦片的本体数据;若不一致,则说明地理信息本体数据已更新。此时,返回至上述的瓦片裁切、更新步骤,对更新后的地理信息数据进行瓦片裁切操作,并更新瓦片元数据库和瓦片本体数据库。
在上述检索过程中,通过采用属于金字塔结构的瓦片层级,可以快速定位地理信息服务请求范围内的任意瓦片,这样在需要增加或更新瓦片时,只要增加或更新对应层级需要更新范围内的瓦片即可,无需对全部地理信息数据进行整体瓦片裁切。
步骤300:将已存在或新生成的该请求范围内的地理信息瓦片数据进行数据封装后传输给提出地理信息瓦片服务请求的客户端。
因为可以根据瓦片层级将检索到的瓦片或新生成的瓦片逐片返回给客户端。所以,可支持客户端逐片显示瓦片数据,使用户在客户端上所见的地图是逐渐显示的效果,而不是等待地图显示的画面,进而提高了请求响应速度,增强了用户体验。
下面,结合附图对能够实现上述方法的装置进行介绍。
如图6所示,该装置包括以下模块:
服务响应模块10,用于接收客户端的地理信息瓦片服务请求,并从中解析出该请求范围内的地理信息瓦片的相关信息。
检索模块20,与服务响应模块10电连接,用于根据上述地理信息瓦片的相关信息检索瓦片元数据库,如果检索到与该相关信息对应的瓦片元数据,则发出瓦片更新时间识别指令,否则发出瓦片生成指令。
更新时间识别模块30,与检索模块20电连接,用于根据瓦片更新时间识别指令提取出瓦片元数据中的瓦片更新时间,之后根据所述服务请求和所述地理信息瓦片的相关信息检索地理信息元数据库并从中提取出与该瓦片对应的地理信息数据的更新时间(地理信息的元数据与本体数据的更新时间),比较该瓦片更新时间与该地理信息数据的更新时间是否一致:如果一致,则根据所述检索模块检索到的所述瓦片元数据对应的瓦片数据索引,从瓦片本体数据库中获取该瓦片的本体数据;否则发出瓦片生成指令。
瓦片裁切模块40,与上述检索模块20和上述更新时间识别模块30电连接,用于根据瓦片生成指令,使用所述服务请求和所述地理信息瓦片的相关信息检索地理信息元数据库,从中获取与该地理信息瓦片的相关信息对应的地理信息本体数据索引,并通过该索引从地理信息本体数据库中获取地理信息本体数据,之后对该地理信息进行栅格化、裁切处理,以便生成与上述地理信息瓦片的相关信息所对应的新瓦片。
瓦片更新模块50,与瓦片裁切模块40电连接,用于根据上述地理信息瓦片的相关信息将新瓦片的元数据和本体数据分别写入瓦片元数据库和瓦片本体数据库。
服务反馈模块60,与更新时间识别模块30、瓦片更新模块50和/或裁切模块40电连接,用于一边将从上述瓦片本体数据库中获取该瓦片的本体数据或上述新瓦片的本体数据逐片进行封装,一边将封装好的瓦片的本体数据逐片返回给客户端。
本发明提供的上述装置可以是中国测绘科学研究院自主研发的NewMap Server。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。