1. 程式人生 > 實用技巧 >千萬資料展示-向量切片點聚合

千萬資料展示-向量切片點聚合

背景

    之前做的海量資料資料展示,在預處理速度和渲染上還有有所欠缺,比如單個切片檔案還是太大,本文中進行一些優化工作,使得一分鐘處理完一千多萬點資料的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