WebGIS中矢量切图的初步研究

文章版权由做者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/html

1.背景

在GIS领域,金字塔技术一直是一个基础性技术,WMTS规范专门制定了针对切片请求的格式。利用这种技术,前端能够快速展现出指定级别的地图或影像。前端

可是,因为切图自己是一张图片,图片上看似是兴趣点的要素根本没法进行前端交互。因而,针对兴趣点等矢量数据的展现,基本原理都是先获取到矢量的地理信息(好比GeoJson),在前端绘制(内核为一个element),因而该element便能进行鼠标响应等交互了。python

2.矢量数据的通常展现方法

2.1 矢量数据按需请求

根据须要,每次向服务器(好比根据地理范围、属性信息)进行请求,将请求返回的数据绘制在前端。算法

优势是,按需请求,数据返回量有限,单个请求效率较高。json

缺点是,频繁和服务器交互,在给服务器形成巨大压力的同时,多个请求,甚至某些重复请求,都会增大前端交互耗时,下降用户体验。canvas

2.2 矢量数据一次请求,按需展现

随着前端技术愈来愈成熟,电脑内存愈来愈大,RIA技术对矢量数据的展现作了更多的优化,其中一种经常使用方式就是矢量数据一次请求,按需展现方式。后端

好比如下使用LeafLet开发的例子:http://demo.qunee.com/map/LeafLet+MapABC.html缓存

                       

查看后端请求:服务器

 

能够看见,在页面初始化时就将全部矢量信息读取到前端,而后根据需求进行分级别聚类展现。微信

优势是:减小与服务端的交互,下降服务端的压力,提升用户体验。

缺点是:第一次请求返回的数据量过大,网络耗时较多,服务器在迎接第一次请求时也有至关压力,而且对客户端电脑配置有必定的依赖。

3.换一种解决思路——矢量切图

3.1 何为矢量切图

何为矢量切图呢?说直白点,就是将矢量数据以创建金字塔的方式,切割成一个一个描述性文件,好比以GeoJson格式组织或者以自定义格式组织。

这是一份矢量数据切图完后的截图:

 

文件中具体内容为geojson格式组织:

 

3.2切图工具

3.2.1商业切图工具

在最近召开的esri大会上公布的esri的一个新的亮点即是他们的arcgispro产品在支持遥感数据处理、三维高效展现外,着重强调了对矢量切图的支持。可是,目前该产品为beta版。

早前接触过苏州超擎公司,对方的产品也能支持矢量切图,而且在此基础上,对方还支持影像数据不切图压缩为流方式前端实时展现。

3.2.2 开源切图软件

目前支持矢量切图的开源软件,在网上你们比较推崇的是TileStache工具,安装这个工具比较耗费精力,如下均是该工具须要依赖的其余软件环境:

 

 

简单点说,须要配置好GDAL环境,python环境,均配置好后才可以使用。而且目前只测试了在win7上运行,在win8上便不能够。

3.3 前端支持矢量瓦片展现

目前支持矢量瓦片展现的前端有leaflet,openlayers,arcgis js4.0。

3.3.1 arcgis js4.0中的解决方案

展现例子地址为:http://basemapsbeta.arcgis.com/preview/app/index.html

 

 

其支持的矢量瓦片格式为知足Mapbox图片存储的格式(https://www.mapbox.com/)。

3.3.2leaflet中的解决方案

展现例子地址为:http://basemapsbeta.arcgis.com/preview/app/index.html

 

 

这里支持的是GeoJson格式的矢量瓦片。

4. 目前研究中发现的缺点

a.矢量切图工具只能切WGS84坐标系下的矢量图层。

b.leaflet只能加载显示能够转换为WGS84坐标系的矢量瓦片数据。

5. 优化

5.1前端支持任何坐标系下的矢量瓦片

继承已有GIS框架中的canvastilelayer,利用开源的pbf解析库,重写gettile并解析重绘。摆脱leaflet对矢量瓦片坐标系的限制。利用该方式,矢量瓦片为任何坐标系均能支持。

 

 

 

5.2前端缓存优化

将读取过的矢量瓦片以必定的缓存机制缓存至内存中,使用缓存调度算法进行调度。

6.使用场景

a.根据范围查询展现矢量数据时,能够彻底使用矢量切图。

b.根据范围和属性展现矢量数据时,能够先根据范围返回数据,在前端根据属性数据进行过滤,最后展现。

7.有待解决的地方

开源矢量切图工具目前只能切WGS84的矢量数据,将任何格式数据转换成WGS84的数据是不现实的。针对这种问题,本身开发矢量切图工具不失为一种选择。开发能够支持点数据的矢量切图工具难度不大,可是开发可以支持线和面数据的矢量切图工具则存在不小的难度。后续还需继续研究。

 

                                                                                          -----欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

                                                                                                若是您以为本文确实帮助了您,能够微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^

                                              

相关文章
相关标签/搜索