文章版权由做者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/前端
在以前多篇文章中我描述了如何编写矢量地图切片工具、如何基于Geoserver来进行矢量切片方案。这两种方案各有局限:java
这里,咱们能够将方案进一步升级。python
须要解决的几点:sql
a.统一矢量数据源,无需针对项目中不一样系统采用不一样的配图方案。因为项目中环境复杂,每每涉及老系统、新系统、PC端、移动端。对于老系统并不支持矢量切片的解析,难道还要再次对数据配图,采用arcgis切片?数据库
b.摆脱Geoserver的束缚,对于已经有arcgis(10.2之前)的环境的项目,难道还要再安装一个Geoserver?服务器
c.矢量配图得实现可视化,难道每次手写样式文件?微信
d.即支持切片预处理,也得支持切片的动态更新。架构
根据这几点要求,作了以下设计:函数
具体描述为:工具
a.服务端支持根据PG数据源生成矢量切片。
b.服务端支持根据PG数据源和样式文件生成图片切片。
c.配图平台支持分别生成矢量切片样式文件和图片切片样式文件。
d.前端根据产品版本,分别发送对应格式的切片获取请求。
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格式。
测试结果:
在开源架构中,一般为:QGIS、UDig作桌面数据处理工具,Geoserver、MapServer是比较经常使用的地理服务器,Postgresql+PostGIS做为空间数据库。可是,随着地理数据库PG愈来愈强大,Geoserver的功能反而在被逐渐弱化。PG能够支持各种空间查询,空间分析,甚至路径分析上。而针对切片的生成,PG+Mapnik的方案,也能很好的解决。
这里选用python进行代码测试:
测试样式文件,编写数据源配置和样式配置:
测试结果:
-----欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/
若是您以为本文确实帮助了您,能够微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^