zoukankan      html  css  js  c++  java
  • 千万数据展示-矢量切片点聚合

    背景

        之前做的海量数据数据展示,在预处理速度和渲染上还有有所欠缺,比如单个切片文件还是太大,本文中进行一些优化工作,使得一分钟处理完一千多万点数据的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

  • 相关阅读:
    hdu 1532(最大流)
    星沉月朗
    uva 818 (位运算 + 判环)
    SQL变量、Substring、charindex、case函数、去除重复
    C# Tostring格式
    asp.net导出word(word2007)
    asp.net生成缩略图
    正则表达式语法
    解压缩
    文件复制
  • 原文地址:https://www.cnblogs.com/polong/p/13379632.html
Copyright © 2011-2022 走看看