文章版权由做者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/。html
矢量切图方案目前已是很常见的一个方案,在2016年时团队基于Sharpmap开发了支持不一样坐标系、不一样切图参数、任意矢量数据(点、线、面)的工具。也着手开发了支持矢量切图浏览器前端配图的工具。在当时研究以前,也写过一篇初步研究的文章:WebGIS中矢量切图的初步研究(http://www.cnblogs.com/naaoveGIS/p/4982549.html)。前端
可是回过头看这两年的运用场景,着实不多。究其缘由大体几个方面:web
a.大数据量状况下,基于要素绘制的矢量切片虽然在前端能够实现更好的交互效果,可是项目中因为矢量数据量级每每达不到,彻底能够直接处理为一个文本一次性加载于前端展现。算法
b.即便大数据量状况下,基于WMS或者WMTS以图片形式展现要素也是基本方案。对于交互,虽然会多一次后台查询,可是项目产品每每没有互联网产品的极致交互要求。json
c.矢量切图的实施比较耗时,须要对图层要素分别切图、分别设置样式,实施成本太大。而基于arcmap等工具统一配图再一次性切图,实施效率会大大提升。虽然各图层样式咱们能够设置默认样式,可是不免遇到各类新增或修改。并且因为工具须要提早分别切好各矢量图层,很是耗时。浏览器
d.矢量切片的更新问题。一样因为咱们对数据须要提早切片缓存,致使数据更新后,又得从新切片,无法作到实时。缓存
在项目的实际运用中,咱们最须要解决的是瓦片预处理致使的切图耗时和没法实时更新问题。只有实施问题解决了,才能更好的推进在大数据量状况下使用矢量切片。tomcat
回到2016年,当时已经预研到Geoserver和一些开源工具能够支持矢量切片,可是为何最后仍是选择本身开发工具了呢?
a.当时Geoserver最新的版本是2.8,矢量切片支持的不是很好,面的切片上边界会不重合。微信
b.开源工具TileStache,不只仅是安装不方便,并且只支持了WGS84坐标系(包含墨卡托投影)。并发
因此只好让团队专人着手开发了矢量切片工具。
再回到如今2018年,Geoserver已经出到了2.12版本,矢量切片的面处理问题已经解决。因此目前采用Geoserver方案是更为便捷的方案,它能够很好的解决上面提到的实施问题和更新问题。
a.能够经过udig等提早配置好图层的样式,造成模板,方便部署配置样式。
b.Geoserver能够在Geowebcache中配置好对矢量切片格式的支持,而且能够分别设置是否预处理,或者实时切片。这样,减小工程实施时须要预处理的耗时。
c.数据的更新问题,能够经过设置缓存的时效性进行控制,避免以前从新切图。
一样,在很早以前的一篇文章中,我对GeoWebCache作了一个预研:利用GeoWebCache实现WebGIS地形图展现的缓存优化(http://www.cnblogs.com/naaoveGIS/p/4195008.html)。这里,我作进一步补充。
a.下载对应插件。
注意安装时,tomcat得是8系列。若是本地已经装有jdk1.7,则须要再装一个jdk1.8,而后在tomcat8的bin目录下的setclasspath.bat文件中,直接写定jdk的指向路径:
b.官网地址:http://geowebcache.org/docs/current/concepts/index.html
c.GeoWebCache的导航页包含功能:
点击TMS(Tile Map Server),能够查看服务列表:
d.预览功能
e.切图功能
点击seed this layer。
f.查看正在切图的进程
默认的GridSet中只包含了4326和900913坐标系。点击,create gridsets,咱们以2379坐标系来示例。
a.经过查找选定坐标系。
b.填写瓦片大小。
c.切图比例尺。这里提供两种填写方式,以分辨率填写,或以比例尺填写。
这个配置十分重要,在咱们切图中,有原点这个概念,而gridsets中咱们没有发现与切图原点有关的配置项。而其实,这个切图范围,咱们即可以将其视做原点配置。
假设此时原点为:-5123200,10002100。
咱们便将切图范围设置为:
在Geoserver的GWC文件夹中,咱们能够看见保存gridsets后生成的对应配置文件:
最后,咱们点击图层栏,选择tilecaching
当安装了矢量切图插件后,在切图格式上即可以选择矢量切片相关格式。目前插件提供的矢量切片有三种格式:geojson、topojson、pbf。Geojson可读性高,topojson比前者小一些,可是不可读。而pbf格式压缩性更好,一样也不可读。Pbf在插件中为type=mapbox-vector,格式为x-protobuf。意思是,其数据组织采用的mapbox提供的mvt格式,该格式对地图不一样级别下的要素会采用道格拉斯-普克算法进行抽稀,而后再以谷歌提供的pbf格式进行存储。因此,pbf压缩性更好,可是一样是不可读的。
把咱们设置好的gridsets加入,并选定好须要切图的级别。
经过设置可让WMS请求时的范围扩大,减小因为瓦片过小致使的出如今不一样瓦片重复动态注记过多问题。可是肯定就是请求范围变大后,每次请求耗时变长,并发性下降。
其中,TILEMATRIXSET对应咱们设置的GRIDSETS名称,而TILEMATRIX对应各个级别时的切片级别名称。
虽然目前已经展现出矢量切片,可是其切片又明显位移:
若是咱们是基于已有的4326或者900913坐标系,则不会有这个问题。可是基于自定义坐标系和切图参数时便发生了偏移。
若是只谈解决思路:由于是线性偏移,咱们能够代码中对不一样级别设置不一样的切图原点。可是这是很是不科学的。
我的推测,这可能与DPI有关系,及每英寸的像素数有关系。咱们的地图是ArcGIS发布,其切图参数使用的DPI是96,换算出来的屏幕一像素所表明的实际地理位置为:
1英寸=2.54厘米
1英寸=96像素
那么屏幕的一像素具备(2.54/96=2.6458E-4)厘米/像素。
可是,咱们Geoserver中默认的是:
将该配置修改后,重启Geoserver,偏移问题依然存在。
不知道各位读者遇到过该问题否,是否有其余解决思路。
-----欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/
若是您以为本文确实帮助了您,能够微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^