孫劍 孫召平
(北京敏視達(dá)雷達(dá)有限公司,北京 10094)
地圖是天氣雷達(dá)在數(shù)據(jù)顯示分析時必不可少的信息。天氣雷達(dá)地圖數(shù)據(jù)包括省界、市界、縣界、河流、城市名、縣名、地形等[1]?,F(xiàn)有業(yè)務(wù)端主用戶處理系統(tǒng)(PUP)顯示數(shù)據(jù)時,每個雷達(dá)站須單獨配置地圖文件[2],地圖文件采用雷達(dá)站點為中心的笛卡爾坐標(biāo)系表示[3],內(nèi)容僅限于當(dāng)前雷達(dá)站掃描范圍內(nèi)地理信息,投影方式固定[4]。如果需要顯示其他雷達(dá)站的產(chǎn)品文件,需要額外申請對應(yīng)雷達(dá)站的地圖匹配文件重新加載顯示,若雷達(dá)站點位置信息發(fā)生變化(如測繪部門訂正后),還需重新聯(lián)系廠家制作對應(yīng)地圖文件,應(yīng)用過程諸多不便,并且每個臺站后端對應(yīng)多個PUP應(yīng)用端,升級地圖容易造成疏漏,進(jìn)而造成雷達(dá)數(shù)據(jù)與地圖信息的匹配錯誤。
新一代天氣雷達(dá)業(yè)務(wù)化系統(tǒng)(ROSE)產(chǎn)品顯示子系統(tǒng),改進(jìn)了現(xiàn)有業(yè)務(wù)PUP系統(tǒng)中分站定制地圖方式,采用了一份統(tǒng)一的全國地理信息地圖文件。地圖數(shù)據(jù)基于大地2000坐標(biāo)系[5],在不同雷達(dá)站點數(shù)據(jù)顯示時,程序會依據(jù)各站點中心經(jīng)緯度自動定位,并顯示各雷達(dá)站掃描范圍內(nèi)的地理信息。軟件還支持不同雷達(dá)站點數(shù)據(jù)的對比顯示,避免原有PUP系統(tǒng)多站需要多份地圖文件的不便及站點信息變更帶來的地圖定位偏移問題。ROSE產(chǎn)品顯示子系統(tǒng)在地理信息的表達(dá)上采用經(jīng)緯度方式,還支持指定位置的圖標(biāo)標(biāo)識及地形圖像信息加載,擴展了數(shù)據(jù)的應(yīng)用方式,但在實際應(yīng)用中地形圖像地理信息文件數(shù)據(jù)量龐大,打包全國數(shù)據(jù)會使得發(fā)布的安裝文件過大,針對目前臺站業(yè)務(wù)端應(yīng)用特點,ROSE產(chǎn)品顯示子系統(tǒng)仍采用了分雷達(dá)站點單獨定制地形圖像的處理方式。
全國地圖地理信息自適應(yīng)加載的顯示方式,相對單站區(qū)域地圖數(shù)據(jù)的增加會占用更多的內(nèi)存,站點地圖的動態(tài)匹配范圍顯示也增加產(chǎn)品顯示時的代碼復(fù)雜度。ROSE 產(chǎn)品顯示子系統(tǒng)通過設(shè)計模式的應(yīng)用,在地圖顯示信息和顯示效率間進(jìn)行了平衡,做到了內(nèi)存占用低,顯示速度快,同時還降低了開發(fā)復(fù)雜度。
現(xiàn)有業(yè)務(wù)PUP顯示系統(tǒng)以圖層進(jìn)行數(shù)據(jù)劃分,系統(tǒng)默認(rèn)主地圖帶有省界、城市、縣界、縣名、河流圖層信息,用戶自定義地圖文件僅包含高速公路、航線(低)、流域、航線(高)、航標(biāo)、機場六種圖層[6-7]。顯示的圖層種類及名稱固定,無法指定地圖顯示顏色及字體等更多信息。
在ROSE系統(tǒng)產(chǎn)品顯示系統(tǒng)中,地圖采用開放式格式,以數(shù)據(jù)類型進(jìn)行劃分,共分為文本、線段、圖標(biāo)、圖標(biāo)文本混合、地形圖像5種數(shù)據(jù)類型,每種數(shù)據(jù)類型中,用戶可以隨不同應(yīng)用場景動態(tài)擴展自定義圖層,添加相應(yīng)類型數(shù)據(jù),指定不同圖層數(shù)據(jù)的顯示參數(shù)。①文本數(shù)據(jù),包含文字信息,以SECTION TEXT作為類型標(biāo)識,通常為地名數(shù)據(jù),如城市名稱、機場名稱等,具體數(shù)據(jù)格式及說明見表1。②線段數(shù)據(jù),包含線段信息,以SECTION LINE關(guān)鍵字開始,通常為省市邊界、河流流域等數(shù)據(jù),具體數(shù)據(jù)格式及說明見表2。③圖標(biāo)數(shù)據(jù),包含圖標(biāo)信息,以SECTION ICON關(guān)鍵字開始,可以標(biāo)識雨量計、風(fēng)電塔等建筑物,具體數(shù)據(jù)格式及說明見表3。④圖標(biāo)文本數(shù)據(jù),包含圖標(biāo)與文本的組合信息,以SECTION ICON_TEXT關(guān)鍵字開始,可以標(biāo)識如機場、雷達(dá)站等特定識別物,具體數(shù)據(jù)格式及說明見表4。⑤地形圖像數(shù)據(jù),以雷達(dá)站為中心的一定范圍地形圖像信息,方便用戶識別山地、平原、地物等地形特征,默認(rèn)配置為等距方位投影[8]PNG格式圖像。圖像文件名稱包含站號、圖像范圍、投影方式信息,5種類型數(shù)據(jù)顯示示例見圖1a~e,多種地圖數(shù)據(jù)混合顯示示例見圖1f。
圖1 疊加不同數(shù)據(jù)類型地理信息的雷達(dá)反射率產(chǎn)品示例:(a)疊加文本地理信息,(b)疊加線段地理信息,(c)疊加圖標(biāo)地理信息,(d)疊加圖標(biāo)文本地理信息,(e)疊加背景地形圖像信息,(f)疊加多種地理信息
表1 地圖文本數(shù)據(jù)格式及說明
表2 地圖線段數(shù)據(jù)格式及說明
表3 地圖圖標(biāo)數(shù)據(jù)格式及說明
表4 地圖圖標(biāo)文本數(shù)據(jù)格式及說明
新地圖格式提供更多的數(shù)據(jù)內(nèi)容,為新一代天氣雷達(dá)系統(tǒng)的產(chǎn)品分析應(yīng)用帶來了更豐富的信息,地圖應(yīng)用實現(xiàn)過程中,通過設(shè)計模式的引入[9-14],達(dá)到了顯示內(nèi)容的豐富與效率的平衡,不僅如此,還提高了軟件復(fù)用水平,增加了系統(tǒng)可維護性,方便后續(xù)系統(tǒng)功能擴展升級。
單例模式,為類自身負(fù)責(zé)創(chuàng)建及保存唯一實例,保證沒有其他實例可以被創(chuàng)建,由該類提供訪問該實例的方法。通過私有化構(gòu)造和拷貝函數(shù),提供統(tǒng)一靜態(tài)訪問接口,保證實例的唯一,避免重復(fù)定義。
在應(yīng)用地圖數(shù)據(jù)時,需要將地圖文件加載到內(nèi)存中訪問,以提高后續(xù)訪問效率和可操作性。為實現(xiàn)此種方式,全國地圖采用設(shè)計模式中的單例模式,動態(tài)加載訪問。
ROSE系統(tǒng)中,地圖采用懶漢式靜態(tài)初始化方式,通過MapDocSingleton類的instance靜態(tài)實例,在自己被加載時就將自己實例化,構(gòu)建單例對象,并將全部地圖信息載入內(nèi)存結(jié)構(gòu),后續(xù)應(yīng)用通過MapDocSingleton對象調(diào)用getInstance方法,嚴(yán)格控制應(yīng)用對象對其訪問方式,避免實例化生成多個對象,對唯一實例提供受控訪問,避免系統(tǒng)多線程環(huán)境下訪問的不安全問題。地圖數(shù)據(jù)單例模式結(jié)構(gòu)如圖2所示。
圖2 地圖數(shù)據(jù)單例模式結(jié)構(gòu)
訪問者模式,表示一個作用于某對象結(jié)構(gòu)中的各元素的操作,可以在不改變各元素類的前提下定義作用于這些元素的各種操作,通過這種方式,元素的執(zhí)行算法可以隨著訪問者改變而改變,其主要將數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)操作分離,解決穩(wěn)定數(shù)據(jù)結(jié)構(gòu)和易變操作的耦合問題。
ROSE系統(tǒng)在產(chǎn)品顯示時,采用多文檔(MDI)方式。通過打開不同產(chǎn)品窗口,每個窗口顯示地圖可以對應(yīng)不同站點、不同投影方式。ROSE系統(tǒng)在訪問地圖時,通過訪問者模式,將加載的全國地圖數(shù)據(jù)與不同站點、不同投影方式下的處理進(jìn)行解耦。
ROSE系統(tǒng)在MapDocSingleton構(gòu)建地圖單例對象后,由地圖訪問者M(jìn)apVistor對象,進(jìn)一步縮小使用地圖數(shù)據(jù)范圍,主要處理為:①地圖切割: 將地圖數(shù)據(jù)包含的全國地理信息通過MapVistor對象,進(jìn)行不同投影方式下的距離計算,得出雷達(dá)顯示窗口范圍的經(jīng)緯度邊界,對以雷達(dá)站點為中心一定范圍內(nèi)的正方形區(qū)域內(nèi)數(shù)據(jù)進(jìn)行切割[15],減少數(shù)據(jù)訪問量,提高投影轉(zhuǎn)換時訪問效率。②投影轉(zhuǎn)換:根據(jù)投影方式,MapVistor對象通過投影轉(zhuǎn)換處理[16-17],將原始的經(jīng)緯度方式表達(dá)數(shù)據(jù)轉(zhuǎn)換為以雷達(dá)站點為中心的笛卡爾直角坐標(biāo)系位置信息,同時將默認(rèn)提供的以等距方位投影的地形圖像,也動態(tài)轉(zhuǎn)換為相應(yīng)顯示所用投影方式下的圖像數(shù)據(jù)。在繪制窗體時,避免復(fù)雜耗時的投影運算,采用投影后的直角坐標(biāo)系信息直接進(jìn)行繪制顯示,極大提高了繪圖效率。地圖數(shù)據(jù)訪問者模式結(jié)構(gòu)如圖3所示。
圖3 地圖數(shù)據(jù)訪問者模式結(jié)構(gòu)
享元模式,就是運用共享技術(shù),有效地支持大量細(xì)粒度的對象,可以避免大量相似類的開銷,主要用于減少創(chuàng)建對象的數(shù)量,以減少內(nèi)存占用和提高性能。
ROSE 產(chǎn)品顯示子系統(tǒng)同時, 分窗口顯示多個站點的多種產(chǎn)品。如果每個窗口獨立加載地圖訪問,會占用較多內(nèi)存空間,為避免內(nèi)存重復(fù)分配,在窗口地圖訪問時,采用享元模式,實現(xiàn)同類地圖數(shù)據(jù),各個窗口間的共享訪問。
地圖在每個窗口繪制時,通過地圖享元工廠類MapFactory,共享地圖訪問者M(jìn)apVisitor對象,如果未找到匹配的訪問者,則動態(tài)創(chuàng)建新的MapVisitor對象。MapFactory存儲窗口相關(guān)的圖層選擇信息,繪制處理時依據(jù)地圖訪問者返回的數(shù)據(jù)及用戶對窗口指定的圖層進(jìn)行圖像繪制。享元模式增加了地圖訪問的易用性,降低了內(nèi)存使用,避免獨立加載內(nèi)存的反復(fù)分配及釋放,提高了訪問效率。 地圖數(shù)據(jù)享元模式結(jié)構(gòu)如圖4所示。
圖4 地圖數(shù)據(jù)享元模式結(jié)構(gòu)
新一代天氣雷達(dá)系統(tǒng)在地圖處理過程中,流程上先加載地圖文件進(jìn)入內(nèi)存,以MapSingleton(地圖單例)存儲,用戶打開某一產(chǎn)品進(jìn)行窗體顯示時,由MapFactory(地圖享元工廠)選擇MapVisitor(地圖訪問者),如果對應(yīng)站點,對應(yīng)投影方式的MapVisitor存在,則返回相應(yīng)MapVisitor, 如果不存在則由MapFactory 創(chuàng)建生成新的MapVisitor,進(jìn)行共享管理后返回新建MapVisitor,再由返回的MapVisitor提供地圖數(shù)據(jù),供窗體進(jìn)行地圖繪制顯示。地圖處理流程如圖5所示。
圖5 地圖數(shù)據(jù)處理流程
浙江省已經(jīng)進(jìn)行精細(xì)化天氣雷達(dá)部署[19],精細(xì)化雷達(dá)需要匹配更細(xì)致的精細(xì)化(村鎮(zhèn)級)地理信息[20-21]。在此,對于設(shè)計模式的改善效果,以浙江省精細(xì)化地圖數(shù)據(jù)進(jìn)行測試,臺站應(yīng)用全國基礎(chǔ)地理信息約20 MB文件大小,由用戶提供村鎮(zhèn)精細(xì)化地圖信息約166 MB的文件大小,合計共約186 MB文件內(nèi)容。其中線段類數(shù)據(jù)2213305條,文本類數(shù)據(jù)6746個。對地圖應(yīng)用進(jìn)行本文中所述設(shè)計模式優(yōu)化前后測試,驗證其對性能改善的效果。
以杭州雷達(dá)站單站500 km半徑范圍顯示地圖,地圖圖層包括河流、省、市、縣、鄉(xiāng)各級信息,全部圖層顯示示例如圖6所示(村鎮(zhèn)地名文本受顯示區(qū)域影響,交疊文字部分自動隱藏,隨顯示區(qū)域放大自動顯示)。采用軟硬件環(huán)境見表5。
表5 測試計算機配置
圖6 杭州雷達(dá)站精細(xì)化地圖顯示示例
測試步驟:①程序原有處理方式下,分別記錄僅包括全國基礎(chǔ)地理信息時與包含浙江省精細(xì)化地理信息后的全部地圖圖層顯示繪制耗時。②設(shè)計模式優(yōu)化后,分別記錄僅包括全國基礎(chǔ)地理信息時與包含浙江省精細(xì)化地圖數(shù)據(jù)后的全部地圖圖層顯示繪制耗時。③重復(fù)10次步驟①~②,得出平均處理耗時。
測試結(jié)果見表6,可以看出采用原有處理框架繪制此地圖數(shù)據(jù)時,因需遍歷全部地理信息數(shù)據(jù)實時處理解析,數(shù)據(jù)量大、處理耗時高,基礎(chǔ)地理信息的加載平均耗時約為100 ms,合并浙江省精細(xì)化地理信息后平均耗時約為6000 ms。
表6 地圖繪制效率測試結(jié)果對比 ms
設(shè)計模式結(jié)構(gòu)優(yōu)化后,應(yīng)用單例模式和享元模式,避免了地理信息數(shù)據(jù)在MDI多個窗口打開時的重復(fù)加載時間消耗,并通過MapVisitor訪問者模式對顯示區(qū)域范圍內(nèi)地理信息數(shù)據(jù)進(jìn)行了提取及預(yù)處理,基礎(chǔ)地理信息的加載平均耗時約為9 ms,合并浙江省精細(xì)化地理信息后平均耗時約為100 ms。
對于僅有全國基礎(chǔ)地理信息數(shù)據(jù)情況下,優(yōu)化后繪制性能約為原有處理的10倍。而對精細(xì)化地理信息數(shù)據(jù)情況下,優(yōu)化后繪制性能為原有處理的60倍。由此可見,通過設(shè)計模式應(yīng)用,極大改善了顯示區(qū)域范圍內(nèi)地圖的繪制性能。對于大數(shù)據(jù)量地理信息,設(shè)計模式優(yōu)化后帶來的性能提升尤其明顯。
新一代天氣雷達(dá)業(yè)務(wù)化系統(tǒng)在地圖設(shè)計上,提供了靈活的數(shù)據(jù)結(jié)構(gòu),融合了更豐富的信息展示,方便用戶自行擴展地理信息進(jìn)行顯示。在軟件實現(xiàn)上,通過設(shè)計模式的應(yīng)用,極大改善了地理信息顯示繪制效率,規(guī)范了程序開發(fā)設(shè)計,便于后續(xù)系統(tǒng)的擴展維護。
新一代天氣雷達(dá)業(yè)務(wù)化系統(tǒng)已經(jīng)應(yīng)用于我國部分新一代天氣雷達(dá)業(yè)務(wù)運行,地圖顯示處理在實際業(yè)務(wù)使用中效果良好。相對現(xiàn)有PUP系統(tǒng),精細(xì)化地圖信息的顯示,更可以精確定位雷達(dá)回波區(qū)域,提高精細(xì)化預(yù)警能力。針對背景地形圖受限于數(shù)據(jù)量仍需分站定制加載的不足,后續(xù)會進(jìn)一步探求方法改進(jìn),為用戶帶來更好的應(yīng)用體驗。