发明内容
本发明实施例提供一种地图服务提供方法及装置,用以解决现有的地图服务提供方法对客户端压力较大,应用面较窄,或对服务器端压力较大,导致服务器响应速度慢、访问效率较低的问题。
本发明实施例提供一种地图服务提供方法,包括:
用户终端确定用户通过浏览器输入的地图片段请求消息;
所述用户终端根据所述地图片段请求消息,向网络服务器请求与所述地图片段请求消息对应的矢量瓦片文件;其中,所述矢量瓦片文件为一个地图瓦片的矢量数据文件,所述地图瓦片为将整幅地图按不同切割层级分别进行切割后,所述地图片段请求消息对应的设定切割层级的一个地图片段;
所述用户终端根据所述网络服务器发送的所述矢量瓦片文件,绘制并显示所述地图瓦片。
可选地,所述方法还包括:
所述用户终端接收所述网络服务器转发的地理信息系统服务器提供的与所述地图瓦片对应的地图服务信息,并在显示所述地图瓦片的同时,辅助显示所述地图服务信息。
可选地,所述用户终端绘制所述地图瓦片,包括:
采用超文本标记语言HTML5Canvas,根据所述矢量瓦片文件,绘制所述地图瓦片。
本发明实施例提供一种地图服务提供方法,该方法包括:
网络服务器接收用户终端发送的矢量瓦片文件请求消息;
所述网络服务器确定所述用户终端请求的矢量瓦片文件所在的切割层级,并从存储的所述切割层级下的所有矢量瓦片文件中查找所述用户终端请求的矢量瓦片文件;其中,所述矢量瓦片文件为将整幅地图按不同切割层级分别进行切割后,设定切割层级下的一个地图瓦片的矢量数据文件;
所述网络服务器将查找到的所述矢量瓦片文件发送给所述用户终端,以使所述用户终端根据所述矢量瓦片文件绘制并显示所述地图瓦片。
可选地,所述网络服务器接收用户终端发送的矢量瓦片文件请求消息之后,还包括:
所述网络服务器将所述矢量瓦片文件请求消息转发给地理信息系统服务器,并接收所述地理信息系统服务器发送的与所述地图瓦片对应的地图服务信息;
所述网络服务器将所述地图服务信息转发给所述用户终端。
本发明实施例提供一种提供地图服务的用户终端,该用户终端包括:
确定模块,用于确定用户通过浏览器输入的地图片段请求消息;
收发模块,用于根据所述地图片段请求消息,向网络服务器请求与所述地图片段请求消息对应的矢量瓦片文件;其中,所述矢量瓦片文件为一个地图瓦片的矢量数据文件,所述地图瓦片为将整幅地图按不同切割层级分别进行切割后,所述地图片段请求消息对应的设定切割层级的一个地图片段;
处理模块,用于根据所述网络服务器发送的所述矢量瓦片文件,绘制并显示所述地图瓦片。
可选地,所述收发模块,还用于接收所述网络服务器转发的地理信息系统服务器中与所述地图瓦片对应的地图服务信息;
所述处理模块,还用于在显示所述地图瓦片的同时,辅助显示所述地图服务信息。
可选地,所述处理模块具体用于:
采用超文本标记语言HTML5Canvas,根据所述矢量瓦片文件,绘制所述地图瓦片。
本发明实施例提供一种提供地图服务的网络服务器,该网络服务器包括:
接收模块,用于接收用户终端发送的矢量瓦片文件请求消息;
处理模块,用于确定所述用户终端请求的矢量瓦片文件所在的切割层级,并从存储的所述切割层级下的所有矢量瓦片文件中查找所述用户终端请求的矢量瓦片文件;其中,所述矢量瓦片文件为将整幅地图按不同切割层级分别进行切割后,设定切割层级下的一个地图瓦片的矢量数据文件;
发送模块,用于将所述处理模块查找到的所述矢量瓦片文件发送给所述用户终端,以使所述用户终端根据所述矢量瓦片文件绘制并显示所述地图瓦片。
可选地,所述发送模块,还用于在所述接收模块接收用户终端发送的矢量瓦片文件请求消息之后,将所述矢量瓦片文件请求消息转发给地理信息系统服务器,并在所述接收模块接收到地图服务信息后,将所述地图服务信息转发给所述用户终端;
所述接收模块,还用于接收所述地理信息系统服务器发送的与所述地图瓦片对应的地图服务信息。
本发明实施例中,在网络服务器端将地图的矢量数据文件分层级切割成不同的矢量瓦片文件,在浏览器端通过加载矢量瓦片文件来完成地图瓦片显示;采用本发明实施例,客户端操作系统无需安装特定软件或浏览器插件,就可以实现地图瓦片的绘制及显示,另外,虽然需要在网络服务器端获取数据,但只需加载实际需要的矢量瓦片文件,即整幅地图的部分矢量数据即可,大大减少了网络服务器的负担,提高了加载及显示效率。
具体实施方式
本发明实施例中,在网络服务器端将地图的矢量数据文件分层级切割成不同的矢量瓦片文件,在浏览器端通过加载矢量瓦片文件来完成地图瓦片显示;采用本发明实施例,客户端操作系统无需安装特定软件或浏览器插件,就可以实现地图瓦片的绘制及显示,另外,虽然需要在网络服务器端获取数据,但只需加载实际需要的矢量瓦片文件,即整幅地图的部分矢量数据即可,大大减少了网络服务器的负担,提高了加载及显示效率。
下面结合说明书附图对本发明实施例作进一步详细描述。
如图1所示,为本发明实施例一提供的地图服务提供方法流程图,包括以下步骤:
S101:用户终端确定用户通过浏览器输入的地图片段请求消息;
S102:所述用户终端根据所述地图片段请求消息,向网络服务器请求与所述地图片段请求消息对应的矢量瓦片文件;其中,所述矢量瓦片文件为一个地图瓦片的矢量数据文件,所述地图瓦片为将整幅地图按不同切割层级分别进行切割后,所述地图片段请求消息对应的设定切割层级的一个地图片段;
S103:所述用户终端根据所述网络服务器发送的所述矢量瓦片文件,绘制并显示所述地图瓦片。
本发明实施例中,在网络服务器端将地图的矢量数据文件分层级切割成不同的矢量瓦片文件,在浏览器端通过加载矢量瓦片文件来完成地图瓦片显示;采用本发明实施例,客户端操作系统无需安装特定软件或浏览器插件,就可以实现地图瓦片的绘制及显示,另外,虽然需要在网络服务器端获取数据,但只需加载实际需要的矢量瓦片文件,即整幅地图的部分矢量数据即可,大大减少了网络服务器的负担,提高了加载及显示效率。
本发明实施例中的矢量瓦片文件实际上就是将整幅地图的矢量数据按照层次以一定规则进行切割而形成的层次模型,在具体实施过程中,矢量瓦片文件从顶层到底层,随着层级的降低,单个矢量瓦片文件对应的地域范围可以逐层减小,比如,将世界地图作为整幅地图,最顶层的矢量瓦片文件可以覆盖整幅世界地图的矢量数据,下一层的每个矢量瓦片文件可以覆盖每个国家地图的矢量数据,接下来再将各国家地图的矢量数据文件进行切割,比如针对中国地图,再下一层的每个矢量瓦片文件覆盖每个省级地图的矢量数据,再下一层的每个矢量瓦片文件覆盖每个市级地图的矢量数据,如此依次切割下去;在具体实施中,可以将每个矢量瓦片文件以GeoJSON(Geographic JavaScript ObjectNotation)格式进行存储,这里,GeoJSON格式是一种基于Javascript对象表示法的地理空间信息数据交换格式,用于对各种地理数据结构进行编码。
如图2所示,为本发明实施例提供的网络服务器端矢量瓦片文件生成过程示意图,矢量瓦片文件的生成主要包括两个阶段,第一阶段是将单个矢量文件(shapefile文件)按照设定切割规则切割成分层级矢量数据,保存在数据库中;第二阶段是将保存在数据库中的分层级矢量数据以GeoJSON格式进行分文件夹输出;具体地,在第一阶段中,从单个矢量数据表到多层级矢量瓦片数据表的生成过程具体为:首先,准备矢量文件(格式为“.shp”),其次,获取地图范围,确定切割方式,选择切割层级,逐层切割并入库;在第二阶段中,从多层级矢量瓦片数据表到分层级GeoJSON矢量瓦片文件的过程具体为:首先,为分层级GeoJSON矢量瓦片文件选取文件名,这里,以GeoJSON格式存放在服务器文件系统中的矢量瓦片文件必须具备按照设定规则进行编码的文件名,这样,才能够根据客户端请求的地图范围得到服务器应返回的GeoJSON矢量瓦片文件;其次,为每个文件选取适当属性字段,这里,在将数据库中的矢量数据元组以GeoJSON格式的文件输出时,应该考虑输出后文件包含哪些可以直接被客户端程序使用的属性,同时,也要考虑文件大小,如果输出的GeoJSON文件过大,会减缓网络传输和客户端解释速度,影响用户体验;最后,将多层级矢量瓦片数据表转换成分层级GeoJSON矢量瓦片文件;
在具体实施中,在生成上述分层级GeoJSON矢量瓦片文件后,客户端检索时首先确定用户请求的地图片段所在的层级(Scale),之后根据地图片段的范围请求各层级下矢量瓦片GeoJSON文件,其在服务器端的存储结构如图3所示。
可选地,所述绘制所述地图瓦片,包括:
采用HTML5Canvas技术,根据所述矢量瓦片文件,绘制所述地图瓦片。
上述HTML5Canvas为超文本标记语言(Hyper Text Mark-up Language,HTML)5提供的新标签,它使用脚本绘制图形;在具体实施过程中,在浏览器端获取上述矢量瓦片文件后,就需要进行地图瓦片的绘制了,本发明实施例中,可以采用HTML5Canvas技术对GeoJSON(Geographic JavaScript ObjectNotation)格式数据进行浏览器端渲染;HTML5canvas应用程序界面(Application Program Interface,API)提供的强大的函数库可以保证使用JavaScript在网页中绘制任意类型的地理要素,可以使用fillText(“文本内容”,X,Y)方法,将文本内容以文本左上角为起始坐标绘制于相应的X,Y屏幕坐标上;可以使用moveTo(X,Y)、lineTo(X,Y)方法绘制具有起始坐标的线段,并根据strokeStyle(“color”)方法设置绘制线段的颜色;使用moveTo(X,Y)、lineTo(X,Y)方法配合closePath()方法可以绘制任意形状的多边形;
在具体实施中,使用JavaScript解析GeoJSON文件,将得到的地理要素坐标保存在变量中,并且通过地理坐标转换得到能在浏览器中显示的屏幕坐标,再采用HTML5Canvas,根据屏幕坐标进行地图瓦片绘制;由于地理坐标是延X轴向右递增,延Y轴向上递增,而在HTML5Canvas中,坐标是从左上角开始,延X轴向右递增,延Y轴向下递增,因此,在具体实施中,可以采用如下公式将设定图层范围的要素点的地理坐标转换成屏幕坐标:
X=(lon-minLon)×3600÷scaleX (1)
X=(maxLat-lat)×3600÷scaleY (2)
其中,X表示转换得到的屏幕横坐标,Y表示转换得到的屏幕纵坐标,lon表示该要素点的经度,minLon表示该图层范围的最小经度,lat表示该要素点的纬度,maxLat表示该图层范围的最大纬度,minLon和maxLat可以通过GeoJSON中的bbox中获得,同时,为保证精确度,将上述公式中的差值乘以3600换算成秒,上述scaleX、scaleY可以根据如下公式确定:
scaleX=(maxLon-minLon)×3600÷h (3)
scaleX=(maxLat-minLat)×3600÷y (4)
其中,h表示HTML5Canvas画布的高度,y表示HTML5Canvas画布的宽度,scaleX、scaleY分别表示X轴上每要素点对应的经度的秒数,和Y轴上每要素点对应的纬度的秒数;采用上述公式,可以将任意一要素点的地理坐标转换为屏幕坐标,绘制在HTML5Canvas画布当中,并且能保证较高的精确度。
依据上述方法,本发明实施例中可以使用JavaScript语言和AJAX技术设计针对GeoJSON文件的HTML5Canvas客户端应用程序界面(ApplicationProgram Interface,API),帮助开发者以简洁的代码实现对GeoJSON文件在HTML5Canvas上的显示与基本操作。支持HTML5Canvas的客户端API主要有两个版本,一个为MapCanvas1.0API,另一个为MapCanvas2.0API;MapCanvas1.0API的核心功能是使用者通过Map类构造基础画布,使用带统一资源定位器(Uniform Resoure Locator,URL)参数的Layer类构造图层对象,可以设置各Layer对象的显示颜色、绘制线宽等属性,其中,可以使用Layer.addLayerToMap()方法将各图层对象添加至基础画布上进行绘制,使用Control类构造基本地图操作控件,使用Control.addControlToMap()将构造好的控件添加至Map对象上;该API不仅能够通过简单的代码实现将以GeoJSON文件格式存储的矢量数据使用HTML5Canvas绘制在客户端浏览器中,而且允许使用者针对实际需求进行二次开发,如图4所示,为通过MapCanvas1.0API,在浏览器端使用HTML5Canvas绘制的矢量图形;采用该方法,在客户端编程时只需要编写几行代码,分别对要表现的矢量图层进行实例化即可,从图4的显示效果中可以看出,页面显示框(HTML5Canvas画布大小)为500×500像素,地图显示建筑物、地名点、次干道等类型数据,各类型数据根据setFeatureColor()、setFeatureWidth()方法设置显示图层的颜色和线条宽度,通过setBaseField()方法设置要显示文字的字段名,MapCanvas2.0是在已有MapCanvas1.0的基础上改进而成,保持MapCanvas1.0的主体结构不变,进行了功能增强;MapCanvas2.0继承了1.0版本的特点,可以通过简单代码将需要展示的图层以矢量瓦片文件的形式使用HTML5Canvas绘出,并且可以满足使用者对其进行二次开发的要求,同时,使用者也可以根据自身需求对API进行改写,如图5所示,为采用在浏览器端加载矢量瓦片的方式发布的实时路况效果图。
可选地,所述方法还包括:
所述用户终端接收所述网络服务器转发的地理信息系统服务器提供的与所述地图瓦片对应的地图服务信息,并在显示所述地图瓦片的同时,辅助显示所述地图服务信息。
在具体实施过程中,除为用户提供基本的地图服务外,还可以为用户提供与地图有关的其它服务信息,如最短路径查询服务、实时路况服务、底图服务等,其中,最短路径查询服务可由网络(Web)服务器支持,实时路况服务、底图服务等可以由地理信息系统(Geographic Information System,GIS)服务器支持。
本发明实施例的系统可以包括表现层、Web服务层、GIS服务层和数据层;如图6所示,在表现层,即显示层,客户端根据自身浏览器,通过下载到本地的MapCanvas API访问Web服务器端的矢量瓦片数据完成地图显示,同时,客户端利用OpenLayers访问GIS服务器中发布的地图服务(Web map service,WMS)信息,并进行辅助显示,这里的OpenLayers是一个开源Javascript类库,可用于实现对采用标准格式发布的地图数据的访问,辅助显示与地图相关的其它地图服务信息,当需要显示地图时,Openlayers调用GIS服务器发布的地图服务信息,可选地,客户端将用户的地图服务请求发送至Web服务器后,Web服务器可以将该请求转发至GIS服务器,GIS服务器将与该请求对应的地图服务信息返回给Web服务器,由Web服务器转发给客户端;在Web服务层,采用免费、开源的Web应用服务器,这里,Web应用服务器端程序使用Servlet编写,主要负责确定存在于服务器文件系统中符合客户端需求的矢量瓦片文件,除此,还可以如上所述转发GIS服务器发布的地图服务信息;在GIS服务层,采用地理信息系统服务器(GeoServer),其中GeoServer为采用JAVA EE设计并且符合开放地理空间信息联盟(Open Geospatial Consortium,OGC)标准的GIS应用服务器,该层的主要功能是为表现层道路数据提供底图服务,同时GeoServer在访问存储在空间数据库中的底图数据后,发布便于客户端调用的网络地图服务(Web Map Service,WMS)信息;在数据层,采用开源数据库PostgreSQL与开源空间数据引擎PostGIS相结合进行设计,主要负责存储支持路径分析的路网数据、兴趣点数据等,比如,路网数据包含北京市区主干道、次干道等数据,兴趣点数据包含路网周边的肯德基、邮局、酒店、学校等数据,另外,提供底图服务的底图数据和进行路径分析的路况数据等也可以存储于数据层中。
综上,本发明实施例通过对HTML5技术和WebGIS技术的深入研究,创造性地将两种技术进行有机结合,并在实践探索当中证明二者结合的方式具有较高的可操作性,二者结合后能达到现有传统技术难以达到的效果,具有很强的实用性;客户端使用HTML5Canvas技术绘制GeoJSON格式矢量数据的方法具有跨平台的优势,客户端能够在其操作系统不安装特定软件及浏览器插件的情况下实现矢量数据的绘制,类似于不使用插件的富客户端表现方式,这种方式展现矢量数据速度快,节省网络流量,有效克服了传统WebGIS矢量数据在浏览器中进行可视化缺乏统一标准,以及在用户请求地图瓦片时,将地图临时切片导致响应速度慢、网络传输耗费流量不足的问题;本发明实施例中采用矢量瓦片配合MapCanvas2.0能够提高矢量数据在客户端的渲染速度,节省网络流量,同时,本发明实施例中的矢量瓦片生成算法具有较高的执行效率,矢量瓦片的存储方式安排合理,具有良好、直观的存储结构,便于客户端程序按照规则对相应文件进行提取;本发明实施例,使用HTML5技术结合开源框架设计构建实时路况WebGIS系统,可以为车辆等应用场景提供实时路况地图展示、最优路径查询功能,帮助用户提前判断前方路况,辅助确定提前绕行决策,选择最优出行路线,从而缓解道路交通压力、提高居民出行效率。
如图7所示,为本发明实施例二提供的地图服务提供方法流程图,该方法包括:
S701:网络服务器接收用户终端发送的矢量瓦片文件请求消息;
S702:所述网络服务器确定所述用户终端请求的矢量瓦片文件所在的切割层级,并从存储的所述切割层级下的所有矢量瓦片文件中查找所述用户终端请求的矢量瓦片文件;其中,所述矢量瓦片文件为将整幅地图按不同切割层级分别进行切割后,设定切割层级下的一个地图瓦片的矢量数据文件;
S703:所述网络服务器将查找到的所述矢量瓦片文件发送给所述用户终端,以使所述用户终端根据所述矢量瓦片文件绘制并显示所述地图瓦片。
可选地,步骤S701之后,还包括:
所述网络服务器将所述矢量瓦片文件请求消息转发给地理信息系统服务器,并接收所述地理信息系统服务器发送的与所述地图瓦片对应的地图服务信息;
所述网络服务器将所述地图服务信息转发给所述用户终端。
基于同一发明构思,本发明实施例中还提供了一种与地图服务提供方法对应的地图服务提供装置,由于该装置解决问题的原理与本发明实施例地图服务提供方法相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。
如图8所示,为本发明实施例提供地图服务的用户终端结构示意图,该用户终端包括:
确定模块81,用于确定用户通过浏览器输入的地图片段请求消息;
收发模块82,用于根据所述地图片段请求消息,向网络服务器请求与所述地图片段请求消息对应的矢量瓦片文件;其中,所述矢量瓦片文件为一个地图瓦片的矢量数据文件,所述地图瓦片为将整幅地图按不同切割层级分别进行切割后,所述地图片段请求消息对应的设定切割层级的一个地图片段;
处理模块83,用于根据所述网络服务器发送的所述矢量瓦片文件,绘制并显示所述地图瓦片。
可选地,所述收发模块82,还用于接收所述网络服务器转发的地理信息系统服务器提供的与所述地图瓦片对应的地图服务信息;
所述处理模块83,还用于在显示所述地图瓦片的同时,辅助显示所述地图服务信息。
可选地,所述处理模块83具体用于:
采用超文本标记语言HTML5Canvas,根据所述矢量瓦片文件,绘制所述地图瓦片。
如图9所示,为本发明实施例提供地图服务的网络服务器结构示意图,该网络服务器包括:
接收模块91,用于接收用户终端发送的矢量瓦片文件请求消息;
处理模块92,用于确定所述用户终端请求的矢量瓦片文件所在的切割层级,并从存储的所述切割层级下的所有矢量瓦片文件中查找所述用户终端请求的矢量瓦片文件;其中,所述矢量瓦片文件为将整幅地图按不同切割层级分别进行切割后,设定切割层级下的一个地图瓦片的矢量数据文件;
发送模块93,用于将所述处理模块92查找到的所述矢量瓦片文件发送给所述用户终端,以使所述用户终端根据所述矢量瓦片文件绘制并显示所述地图瓦片。
可选地,所述发送模块93,还用于在所述接收模块91接收用户终端发送的矢量瓦片文件请求消息之后,将所述矢量瓦片文件请求消息转发给地理信息系统服务器,并在所述接收模块91接收到地图服务信息后,将所述地图服务信息转发给所述用户终端;
所述接收模块91,还用于接收所述地理信息系统服务器发送的与所述地图瓦片对应的地图服务信息。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。