矢量地图方案的进一步探讨

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

1. 背景

       在之前多篇文章中我描述了如何编写矢量地图切片工具、如何基于Geoserver来进行矢量切片方案。这两种方案各有局限:

  1. 矢量地图预切片工具对实时数据的实时更新很难做出及时更新,需人工干预。    
  2. Geoserver切片方案需要依赖于Geoserver地理服务器。

   这里,我们可以将方案进一步升级。

2. 整体设计

       需要解决的几点:

       a.统一矢量数据源,无需针对项目中不同系统采用不同的配图方案。由于项目中环境复杂,往往涉及老系统、新系统、PC端、移动端。对于老系统并不支持矢量切片的解析,难道还要再次对数据配图,采用arcgis切片?

       b.摆脱Geoserver的束缚,对于已经有arcgis(10.2以前)的环境的项目,难道还要再安装一个Geoserver?

       c.矢量配图得实现可视化,难道每次手写样式文件?

       d.即支持切片预处理,也得支持切片的动态更新。

       根据这几点要求,做了如下设计:

 

       具体描述为:

       a.服务端支持根据PG数据源生成矢量切片。

       b.服务端支持根据PG数据源和样式文件生成图片切片。

       c.配图平台支持分别生成矢量切片样式文件和图片切片样式文件。

       d.前端根据产品版本,分别发送对应格式的切片获取请求。

3. 基于PG的矢量切片生成

       9.6以上postgresql+2.4postgis,提供了两个矢量切片的空间函数:ST_AsMVT,ST_AsMVTGeom(mapbox格式),即可生成。但是由于不能保证各项目的PG为此版本以上,这里采用可以普适的方案,服务端基于pbf开发包(java-vector-tile、protobuf-javanano、protobuf-java)来进行。

 

       a.根据瓦片范围查询PG库获取要素(wkt)。

       b.对要素解析成geometry格式。

       c.将要素的几何坐标转换为屏幕坐标。

       d.将此时的要素编码成pbf格式。

       测试结果:

              

4. 基于PG的图片切片生成

       在开源架构中,通常为:QGIS、UDig做桌面数据处理工具,Geoserver、MapServer是比较常用的地理服务器,Postgresql+PostGIS作为空间数据库。但是,随着地理数据库PG越来越强大,Geoserver的功能反而在被逐渐弱化。PG可以支持各类空间查询,空间分析,甚至路径分析上。而针对切片的生成,PG+Mapnik的方案,也能很好的解决。

       这里选用python进行代码测试:

 

 

       测试样式文件,编写数据源配置和样式配置:

 

       测试结果:

 

 

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

                                                                           如果您觉得本文确实帮助了您,可以微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^

                                                           

posted @ 2019-01-11 15:44  李晓晖  阅读(2308)  评论(0编辑  收藏  举报