千萬數據展示-矢量切片點聚合


背景

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM