千萬數(shù)據(jù)展示-矢量切片點(diǎn)聚合

背景

????之前做的海量數(shù)據(jù)數(shù)據(jù)展示,在預(yù)處理速度和渲染上還有有所欠缺,比如單個切片文件還是太大,本文中進(jìn)行一些優(yōu)化工作,使得一分鐘處理完一千多萬點(diǎn)數(shù)據(jù)的1-11級矢量切片,在線瀏覽數(shù)據(jù)請求時間控制在1s左右。

準(zhǔn)備

????軟件環(huán)境:PostGIS,數(shù)據(jù)是微軟開源的部分房屋數(shù)據(jù)public.california20191107(10988317條)取中心點(diǎn)。

原理

????我們之前都聽過像素聚合,把坐標(biāo)點(diǎn)轉(zhuǎn)成像素,這樣能大大降低顯示壓力。而在矢量切片中也有類似的東西,就是ST_AsMVTGeom,他會把幾何數(shù)據(jù)轉(zhuǎn)成切片的坐標(biāo)。所以我們可以在單個切片處理中進(jìn)行進(jìn)行坐標(biāo)轉(zhuǎn)換,然后把坐標(biāo)聚合。同時我們可以調(diào)整切片的格網(wǎng)大小,默認(rèn)會用4096,但是在小比例尺可以用小網(wǎng)格把這個值調(diào)整小些,能更好的聚合(TileBBox參考之前前的文章)。第二種方式是使用數(shù)據(jù)庫自帶width_bucket進(jìn)行聚合。

--示例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                         
image

image

參考資料:

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

http://m.itdecent.cn/p/60bab5196063

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容