動態圖層

動態圖層

                                                      陳玉進   李泉   南京跬步科技有限公司(http://www.creable.cn

GIS中,所謂“動態圖層”就是位於地圖最上層且刷新很快的圖層。通常爲點圖層,用於顯示那些實時刷新的信息。這樣,就產生了兩個問題:一,爲什麼動態圖層位於地圖最上層;二,如何作到刷新很快。下面就以GPS車輛監控爲例加以說明。

假設屏幕內需要顯示的GPS車輛監控點有500個,爲了實時反映每輛車的最新狀態,只要獲得任何一輛車最新的GPS位置信息,就要進行全圖刷新,通常也就是說,要能夠作到一秒鐘內能刷新多次。如此大的負載,如沒有特殊的技巧,是難以實現“動態實時”效果的。相對於動態圖層,沒有實時信息的圖層集合稱爲“底圖”,刷新時,先繪製底圖,再繪製動態圖層,底圖在下,動態圖層在最頂上,在底圖不變的情況下刷新,底圖無需繪製直接粘貼,動態圖層需要實時繪製,而影響動態圖層繪製效率的關鍵是地圖座標到屏幕座標的轉換,在某個時間點也許只是一輛車的位置動了,其他車輛位置保持不變,爲了刷新動態圖層,需要500輛車進行地圖座標到屏幕座標的轉換,得到500輛車的屏幕座標,然後進行繪製,這樣作代價很高,難以作到實時的效果,爲此,給每輛車從0499編號,申請一個長度爲500的數組,存儲每輛車的屏幕座標,當其中一輛車位置改變時,只需要重新計算這一輛的屏幕座標,其他車輛位置不變,直接繪製。這樣,找到了問題的瓶頸,解決了瓶頸對快速刷新的性能限制,提高了實時刷新的效果。 還有一個問題一直未考慮,假如一共有5000輛車,而當前屏幕內,可能有500輛車需要顯示,如果按上面的作法,建立長度爲5000的數組,用於存儲這5000輛車的屏幕座標,繪製的時候遍歷此數組,讀取屏幕座標進行繪製,遍歷的代價同樣很高,爲此,需要進一步改進,那樣就需要建立實時動態網格索引,記錄每輛車當前所在的網格,這樣,在繪製的時候,按網格索引獲得當前屏幕內的部分車輛的編號,由此編號直接對應到數組位置獲得屏幕座標,避免了遍歷數組所帶來的開銷。

以上是針對底圖不變的情況而言的,當底圖發生變化時,如對地圖進行平移、放大和縮小等操作,一方面底圖需要重新繪製,另一方面動態圖層上所有點的屏幕座標需要重新計算,對平移來說,只需要加上一個平移的常數即可,而對於放大和縮小,就要用地圖座標到屏幕座標的轉換來計算,運算量較平移的情況要大,所以,平移相對於放大和縮小反應要快一點。

以上詳細介紹了“動態圖層”的底層實現原理,如果考慮採用類似WEBGIS定級分塊渲染顯示的話,還有更靈活、效率更高的處理方法,留給讀者自己思考,缺點是就不方便作無級縮放了。

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