zoukankan      html  css  js  c++  java
  • 矢量地图方案的进一步探讨

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处: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/

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

                                                               

  • 相关阅读:
    7-11
    7-9
    7-8
    7-7
    7-6
    7-5
    7-4
    7-3
    第08次:升级《陋习手记》完善主从UI
    第07次:升级《陋习手记》显示多条数据
  • 原文地址:https://www.cnblogs.com/naaoveGIS/p/10255487.html
Copyright © 2011-2022 走看看