码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-07-26 16:02:32      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:左右   sel   大小   net   比例尺   roi   from   min   max   

背景

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

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

标签:左右   sel   大小   net   比例尺   roi   from   min   max   

原文地址:https://www.cnblogs.com/polong/p/13379632.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!