postgis计算矢量切片(二)--按值渲染

方案背景

    今年三月份写了一篇postgis计算矢量切片,参考了网上资料给出了一份很粗糙的相关方案(文章写的更粗糙)。当时的方案中只能针对gis形状进行渲染,而不能用属性渲染.针对这个情况,本文进行相对应的修改。

前期准备

    软件是用的是Qgis和Postgis(Postgis版本为2.42 ,Postgresql版本为10.0)。qgis使用Ramdom points in extent 用来生成测试数据,数据范围参数使用
120.6327590942379970,120.8625335693359943,31.2309341430663991,31.4467678070068004(xmin,xmax,ymin,ymax),数据量设置为十万。生成好数据,再建好索引,添加字段v,根据奇偶性给字段赋值。

后台梳理

    先看了ST_AsMVT和ST_AsMVTGeom帮助文档,一头雾水.使用谷歌大法,发现了这个资料参考资料

参考资料

只要通过上图的方式就能查询到我想要的带属性值的矢量切片,代码如下。只要先输入需要查找的范围,用ST_AsMVTGeom查询出范围内矢量并转换成屏幕坐标,最后用ST_AsMVT压缩数据成mvt格式,和之前文章有所不同的是,查询过程中加入了属性的查询,压缩之后矢量切片就会带上我们想要的属性值(w.v就是我们想要的属性值)

SELECT ST_AsMVT(tile,'points',4096,'geom') tile  FROM (SELECT w.v,ST_AsMVTGeom(w.the_geom,Box2D(ST_MakeEnvelope(119.531250,30.751278,120.937500,31.952162, 4326)),4096, 0, true)     AS geom FROM pnt w) AS  tile where  tile.geom is not null

    做完这些我们只要用后台语言写一个服务,将前台请求的切片坐标z/x/y这些转换成经纬度得到最大最小经纬度,放到前面提到的sql中去查询就可以。

前台展示

    前台展示还是选用mapbox,添加自定义矢量切片数据源,修改下按值渲染颜色

map.addLayer({
               "id": "custom-go-vector-tile-layer",
                "type": "circle",
                "source": "custom-go-vector-tile-source",
                "source-layer": "points",
                paint: {
                    'circle-radius': {
                        stops: [
                            [8, 0.1], [11, 0.5],[15, 3],[20, 60]
                        ]
                    },
                    'circle-color': {
                        property: 'v',
                        stops: [
                            [0, '#990055'],
                            [1, '#2a55b9']
                        ]
                    },
                    'circle-opacity': 1
                }
            });

显示效果如下


前台展示

性能对比

    一百万数据,页面加载结束5s;十万数据,页面加载结束1.86s.同样数据,百万数据,geoserver的(openlayer)页面加载结束20.20s;十万数据时,geoserver的的(openlayer)页面加载结束4.32s</br>

附代码地址:

https://github.com/tpolong/postgisvectortile

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,794评论 1 32
  • QGIS是一套开源的跨平台地理信息系统,支持的操作系统包括Windows、Mac、Linux和BSD,也即将支持A...
    逸之阅读 21,301评论 14 34
  • 01.噩耗 上天向你宣布:“我即将收回赋予你的生命”。当突如其来的噩耗降临到你头上,你会怎样? 02.五个阶段的心...
    猫淘淘阅读 984评论 0 0
  • 在开石门以前,周围的丘陵连绵不断,将山内和山外完全隔绝开来,山内人过着桃花源一样的生活,自种自织,自给自足。山中飞...
    宋宵因阅读 2,563评论 0 3
  • 又是一年开学季,相信很多刚上大学的新生对于大学生活充满了各种期待,也许是谈一场奋不顾身又刻骨铭心的爱情,也...
    陈陈的自我修炼阅读 2,271评论 5 1