• 千万数据展示-矢量切片点聚合


    背景

        之前做的海量数据数据展示,在预处理速度和渲染上还有有所欠缺,比如单个切片文件还是太大,本文中进行一些优化工作,使得一分钟处理完一千多万点数据的1-11级矢量切片,在线浏览数据请求时间控制在1s左右。

    准备

        软件环境:PostGIS,数据是微软开源的部分房屋数据public.california20191107(10988317条)取中心点。

    原理

        我们之前都听过像素聚合,把坐标点转成像素,这样能大大降低显示压力。而在矢量切片中也有类似的东西,就是ST_AsMVTGeom,他会把几何数据转成切片的坐标。所以我们可以在单个切片处理中进行进行坐标转换,然后把坐标聚合。同时我们可以调整切片的格网大小,默认会用4096,但是在小比例尺可以用小网格把这个值调整小些,能更好的聚合(TileBBox参考之前前的文章)。第二种方式是使用数据库自带width_bucket进行聚合。

    --示例1
     SELECT ST_AsMVT(vt,'points',256,'geo') tile 
    FROM (select ST_SetSRID( ST_Point( ST_X(a.geo),ST_Y(a.geo)), 4326) geo from (
    	SELECT ST_AsMVTGeom(w.geom,Box2D(TileBBox(10,176,409,4326)),256,0,true) AS geo 
    FROM  public.capnt w  where TileBBox(10,176,409,4326)&&geom) a
    group by ST_X(a.geo),ST_Y(a.geo)  ) AS  vt
    --示例2
     SELECT ST_AsMVT(vt,'points',128,'geo') tile 
    FROM (	SELECT ST_AsMVTGeom(a.geom,Box2D(TileBBox(8,206,113,4326)),128,0,true) AS geo FROM  (select   
      width_bucket(st_x(a.geom),ST_XMin(TileBBox(8,206,113,4326)), ST_XMax(TileBBox(8,206,113,4326)),200) grid_x,  
      width_bucket(st_y(a.geom), ST_YMin(TileBBox(8,206,113,4326)), ST_YMax(TileBBox(8,206,113,4326)), 200) grid_y,  
        st_centroid(st_collect(a.geom)) geom
    from public."point_grid" a where TileBBox(8,206,113,4326)&&a.geom group by 1,2) a  ) AS  vt							
    


    参考资料:

    https://blog.csdn.net/qq_35241223/article/details/106439268

    https://www.jianshu.com/p/60bab5196063

  • 相关阅读:
    ES6-10笔记(class类)
    ES6-10笔记(let&const -- Array)
    小程序的表单提交
    小程序表单回显
    小程序template模板的使用和模板多数据传递
    微信小程序的初始配置
    babel 版本原因运行报错,解决办法
    webpack 和 webpack-cli 安装和使用中出现的问题
    jQuery中操作属性的方法attr与prop的区别
    javaScript 添加和移除class类名的几种方法
  • 原文地址:https://www.cnblogs.com/polong/p/13379632.html
Copyright © 2020-2023  润新知