大數據量點的地圖展示,藉助PostGIS實現動態點抽稀/聚合效果

  • 需求場景

Web端通過地圖範圍變化事件,動態請求加載空間數據庫中的點數據進行展示,指定的屏幕像素範圍內,在不同的地圖縮放級別顯示不同數量的點(大比例尺下展示較多的點,表比例尺下加載一些特徵點展示),從而使Web頁面能夠更爲美觀的展示數據。

  • 技術點

聚合算法,屏幕像素轉地圖距離、PostGIS、查詢優化、存儲過程

  • 接口參數

在此需求下,前端要調用服務接口,需要傳入指定的像素celCount,當前地圖分辨率mapResolution,當前地圖比例尺mapScale,要查詢的數據庫表名tableName。考慮到查詢返回一些點並不在當前屏幕顯示的地圖範圍內,爲避免顯示這些多餘的點而造成瀏覽器壓力,可將當前地圖範圍作爲查詢條件,因此,還需要傳入一個當前地圖範圍參數mapExtent

  • 實現流程

獲取數據表的空間範圍tableExtent——》與mapExtent求交得到tempExtent——》獲取tempExtent的空間矩形範圍showExtent——》根據celCount,mapResolutionmapScale計算屏幕像素對應的地圖距離showLen——》格網化分,根據showExtent和showLen計算橫向和縱向格網數量——》雙層for循環,用個網作爲查詢條件查詢數據庫在格網範圍內的點集合,求取距離集合質心點最近的點返回——》最終返回一個點集合

  • 缺陷

使用格網將要查詢的數據範圍showExtent進行分割,在計算每個格網最終要顯示的點時都需要調用一個數據庫請求,在數據量大,像素數小的情況下,將顯示範圍在橫向和縱向進行分割,最終的格網數量很多,反覆調用數據庫請求會造成該應用接口的性能很低,在控制器設置超時時間的情況下,後臺沒有返回數據,造成請求超時,後臺出錯的假象,最終的計算結果也展示不出來。

  • 優化

爲了減少數據庫請求的次數,使用存儲過程!將格網的橫向距離和縱向距離、橫向數量和縱向數量、showExtent的左上座標、數據表名作爲存儲過程的參數。存儲過程的核心實現如圖:

  • 效果展示:

小比例尺下展示效果

大比例尺下展示效果

  • 性能測試

100,0000數據量的動態查詢性能測試結果,時間:秒


層級(比例尺)

10(像素)

 

20(像素)

40(像素)

60(像素)

4508.93552506767

0.669

0.218

0.103

0.078

9017.87105013534

0.794

0.328

0.152

0.087

18035.7421002707

1.071

0.390

0.150

0.096

36071.4842005414

1.466

0.488

0.166

0.113

72142.9684010827

1.608

0.563

0.194

0.129

144285.936802165

1.711

0.587

0.211

0.163

288571.873604331

1.665

0.565

0.239

0.205

577143.7364428712

1.549

0.539

0.301

0.220

1154287.4728857423

1.728

0.737

0.387

0.337

2308574.9457714846

2.149

1.185

0.846

0.846

  • 總結

在考慮實現該需求的時候,一直都在考慮這個功能是點抽稀的效果還是點聚合的效果。最終的結果說不上是抽稀結果也談不上聚合效果,但最終的結果實實在在的高效地實現了動態篩選數據並加載顯示在Web端。在參考了高德和Wish3D做的聚合標註效果之後,搜索了一些點抽稀和點聚合的相關算法,覺得兩者的實現和使用場景是有很大區別的。

首先,點抽稀的特徵抽稀結果是較少點的數量,最終保留的點的座標值仍然是原來的值。以地形高程採樣點爲例,矢量化原始採樣點數據,在一些區域存在密集程度較高的採樣點,統計該區域內的採樣點的高程值,若該區域密集點的高程值在高程差範圍內,在該比例尺該區域內則沒有必要保留所有的採樣點,需要對該區域內的高程點進行抽稀,通常會根據一些運算規則指定優先級,依據該優先級對高程差範圍內的採樣點進行抽稀,最終在能夠表現該區域地形形態的基礎上均勻地保留一些採樣點,以便於高效的進行差值運算獲得等高線、TIN和數字高程模型,最終能夠保證通過地形分析獲得最終想要的結果。

點的聚合在地圖點的展示形態上和點抽稀直觀的表現類似,大量的點在地圖上能夠動態且美觀的展示的實現,其實是聚合的實現效果。

聚合結果要展示聚合區域內數據最全面的信息,而且又不產生重疊覆蓋,動態比例尺下展示數據不僅需要保證地圖展示效果,而且展示出的點位又說明了點位數據的空間分佈特性,並且,最終的聚合點並不一定是原來數據中的點,有可能是通過聚合算法計算出的一個位置,這是與 點抽稀一個顯著的差別!!!!

試想,如果在篩選外業測量的地形數據點時,使用了聚合算法,就很有可能造成接下來差值結果與真是結果相差甚遠,接下來的地形分析也很有可能是錯誤的,這樣產生的最終決策也就不具備的參考價值。

 

本博客爲原創博客,擁有絕對版權,轉載請標明源地址:https://blog.csdn.net/luojingweikai/article/details/88401201

參考:https://blog.csdn.net/yaoxiaochuang/article/details/50571957

           http://www.cnblogs.com/LBSer/p/4417127.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章