闞旭 夏戈明 曹源
摘 ?要:通過(guò)對(duì)國(guó)內(nèi)外GIS平臺(tái)二次開發(fā)現(xiàn)狀的分析,指出目前GIS商業(yè)軟件開發(fā)在某些方面的不足之處與依靠現(xiàn)有平臺(tái)是否能夠彌補(bǔ)不足,進(jìn)而提出基于uDigSDK與uDigSRC的開源GIS二次開發(fā)的構(gòu)想,并展示初步實(shí)現(xiàn)的態(tài)勢(shì)圖功能并指出該方案與目前其他GIS平臺(tái)相比擁有的優(yōu)勢(shì),最后探討了是否能在已完成工作的基礎(chǔ)上,結(jié)合當(dāng)前其他一些技術(shù)手段實(shí)現(xiàn)更為復(fù)雜的態(tài)勢(shì)圖需求,如3D渲染與二三維數(shù)據(jù)的交互(鷹眼功能),通過(guò)互聯(lián)網(wǎng)進(jìn)行數(shù)據(jù)的分發(fā),實(shí)現(xiàn)B\S模式等,對(duì)方案未來(lái)可行性進(jìn)行了分析。
關(guān)鍵詞:開源;GIS開發(fā);uDig
1 研究背景
態(tài)勢(shì)圖作為一種情景展示、分析的平臺(tái),在水文、地質(zhì)、社會(huì)、軍事等領(lǐng)域均有廣泛的應(yīng)用,一個(gè)優(yōu)秀的態(tài)勢(shì)圖展示系統(tǒng)可以向用戶提供多方面決策相關(guān)的地理信息。當(dāng)前國(guó)內(nèi)市場(chǎng)上ArcGis、MapGis、SuperMap等各種商業(yè)GIS平臺(tái)受到廣泛歡迎。上述商業(yè)軟件既可以向GIS使用者提供地圖服務(wù),同時(shí)通過(guò)向開發(fā)者提供API用于二次開發(fā)。這種開發(fā)模式提高了開發(fā)效率,節(jié)省了開發(fā)成本,但這些產(chǎn)品不適用于大量在GIS平臺(tái)方面擁有特殊定制要求的用戶,如特殊圖層疊合顯示、圖層屬性交互、3D實(shí)時(shí)效果展示、平臺(tái)安全性等。
在Geo-informatics社區(qū)的推動(dòng)下,開源GIS軟件近些年來(lái)的發(fā)展迅猛如Minnesota MapServer、Geo Server、PostGis、Grass Gis與uDig[9]。當(dāng)前國(guó)內(nèi)市場(chǎng)上基于開源GIS二次開發(fā)的研究大多集中在GrassGis平臺(tái)上。GrassGis是基于C開發(fā)的一款開源GIS工具,其強(qiáng)大的數(shù)學(xué)計(jì)算能力受到眾多研究機(jī)構(gòu)、政府管理部門的歡迎。但對(duì)于一般開發(fā)者而言,GrassGis太過(guò)專業(yè),更多計(jì)算功能需根據(jù)用戶需求進(jìn)行定制開發(fā)如分布式計(jì)算或空間圖形計(jì)算等;另一方面,GrassGis框架下可視化部分與平臺(tái)計(jì)算是個(gè)整體,只適用于單機(jī)C\S、少量數(shù)據(jù)的使用環(huán)境,在海量、實(shí)時(shí)數(shù)據(jù),多平臺(tái)接入的條件下需進(jìn)行大量修改且具體工作量未知。綜上所述,設(shè)計(jì)一種符合海量數(shù)據(jù)存取、分布式架構(gòu)、模塊化處理的開源GIS軟件是最終選擇uDig平臺(tái)的原因。
uDig是基于eclipse RCP框架下的一款GIS開源項(xiàng)目,也是Web地理信息系統(tǒng)的一個(gè)核心組件,同時(shí)官方推出uDigSDK與uDigSDK分別用于在其平臺(tái)上的二次插件與源碼開發(fā),使用uDigSDK開發(fā)模式開發(fā)新的GIS功能模塊,雖邏輯清晰但無(wú)法提供靈活自定義邏輯的界面,使用uDigSRC直接修改uDig源代碼雖然可以獲得安全的靈活性,但會(huì)陷入大量的技術(shù)細(xì)節(jié)和無(wú)法理出清晰的開發(fā)思路[4],所以一般開發(fā)都會(huì)選擇兩種方式混合進(jìn)行。基于uDig的二次開發(fā)方法在Eclipse開發(fā)環(huán)境中的對(duì)應(yīng)位置,這種開發(fā)方式能夠滿足如“使用一種完全開放源碼的系列工具進(jìn)行開發(fā)”的要求,也能夠通過(guò)使用模型開發(fā)工具簡(jiǎn)化它的調(diào)用規(guī)模。
作為一款基于java語(yǔ)言開發(fā)的GIS平臺(tái),該平臺(tái)首先擁有良好的可移植性以及系統(tǒng)兼容性,當(dāng)前市場(chǎng)上一些主流的繪圖、計(jì)算工具都向JAVA提供了API,開發(fā)人員可以在已有工作的基礎(chǔ)上進(jìn)行深入工作,降低了開發(fā)難度。
2 實(shí)現(xiàn)平臺(tái)和環(huán)境
uDigSDK開發(fā)方式通過(guò)編寫插件為GIS添加新的功能。在Eclipse上配置好uDig開發(fā)環(huán)境,即可獲得udig.product運(yùn)行產(chǎn)品及uDig中定義的擴(kuò)展點(diǎn),基于這些擴(kuò)展點(diǎn)或Eclipse中定義的擴(kuò)展點(diǎn)可對(duì)已有產(chǎn)品udig.product進(jìn)行擴(kuò)展,添加相應(yīng)功能。在配置好的uDig開發(fā)平臺(tái)上添加插件,擴(kuò)展org.eclipse.ui.actionSets擴(kuò)展點(diǎn)和net.refractions.udig.ui.operation擴(kuò)展點(diǎn),可實(shí)現(xiàn)連接數(shù)據(jù)庫(kù)、拓?fù)浞治黾捌鋺?yīng)用等功能。
采用uDigSDK+uDigSRC+Eclipse開發(fā)平臺(tái)能夠?qū)崿F(xiàn)二維地圖的展示、部分編輯、簡(jiǎn)單地理信息測(cè)繪及目標(biāo)元素屬性的查看等功能,而目前上述框架下尚不能實(shí)現(xiàn)三維圖形方面的操作,需要第三方平臺(tái)提供三維建模的接口。然而一個(gè)完整的三維虛擬場(chǎng)景的開發(fā)工作量是十分巨大的,如果從原始代碼行開始,將涉及眾多有關(guān)3D圖形繪制方面的領(lǐng)域。本課題希望通過(guò)現(xiàn)有一些成熟技術(shù)實(shí)現(xiàn)快速開發(fā),因此有必要選取一種當(dāng)前市場(chǎng)應(yīng)用較為廣泛且技術(shù)成熟,擁有面向java語(yǔ)言的API的平臺(tái),以便新的應(yīng)用能夠在已有開發(fā)包的基礎(chǔ)上進(jìn)行。
VTK是一款開源的免費(fèi)軟件系統(tǒng),主要用于三維計(jì)算機(jī)圖形學(xué)、圖像處理和可視化,它使用數(shù)據(jù)流方式把信息轉(zhuǎn)換成圖像數(shù)據(jù),在這種方式中包含了兩種基本類型的對(duì)象:數(shù)據(jù)對(duì)象和處理對(duì)象[3]。它提供面向java語(yǔ)言的接口。VTK本身具有強(qiáng)大的流和高速緩存的能力,支持?jǐn)?shù)據(jù)的并發(fā)執(zhí)行,處理海量數(shù)據(jù)時(shí)不必考慮內(nèi)存資源的限制;VTK既支持體繪制也保留著傳統(tǒng)的面繪制,在改善可視化效果的同時(shí)可充分利用現(xiàn)有的圖形庫(kù)和圖形硬件;此外,VTK也支持OpenGl/Matlab等建模平臺(tái)的庫(kù)函數(shù),在具體開發(fā)上大大簡(jiǎn)化了工作難度。
3 uDigSDK+uDigSRC+Eclipse下實(shí)現(xiàn)二維態(tài)勢(shì)圖
二維態(tài)勢(shì)圖下需要向用戶提供兩種地圖信息:柵格地圖與矢量地圖。其中柵格地圖的來(lái)源可以是不同分辨率下的衛(wèi)星遙感圖,也可以是各種地理信息圖片。但上述兩類地圖的加載在uDigSDK插件開發(fā)下都有一個(gè)共同的前提,需向系統(tǒng)提供圖片的坐標(biāo)信息。如,一張4096X4096分辨率的.jepg格式的中國(guó)地圖圖片,在WGS84坐標(biāo)系下(經(jīng)緯度坐標(biāo)系),配置文件需在圖片在加載的時(shí)候向系統(tǒng)提供下列數(shù)據(jù):
圖片左下角所在坐標(biāo)(x1,y1)
圖片右上角所在坐標(biāo)(x2,y2)
圖片的分辨率(vol1,vol2)
根據(jù)以上數(shù)據(jù),設(shè)計(jì)計(jì)算公式(1)
R1=(x2-x1)/vol1,R2=(y2-y1)/vol2,(1)
默認(rèn)屏幕中心坐標(biāo)起點(diǎn)(0.000000,0.000000),最后再提取一次x1,y2的數(shù)值形成圖片的位置信息。以上計(jì)算過(guò)程由開發(fā)人員設(shè)計(jì),用戶只需在地圖上提供圖片位置信息。
這種柵格圖片的加載方式還有其他優(yōu)點(diǎn),當(dāng)態(tài)勢(shì)圖中需要實(shí)現(xiàn)元素移動(dòng)功能時(shí),只需修改坐標(biāo)信息并刷新元素圖層即可。
矢量地圖上的元素是由點(diǎn)、線、面元素組成的,這些元素的清晰度不會(huì)隨著地圖比例尺變化。加載矢量圖形可以讀取通用的矢量圖格式文件(如.shp),也可以通過(guò)加載空間數(shù)據(jù)庫(kù)(如POSTGIS)中的地圖數(shù)據(jù)表實(shí)現(xiàn)。以讀取POSTGIS數(shù)據(jù)庫(kù)為例:uDigSDK插件包中加載net.refractions.udig.catalog.postgis插件包,包中新增對(duì)數(shù)據(jù)庫(kù)驅(qū)動(dòng)、數(shù)據(jù)庫(kù)名、用戶名、密碼的定義代碼即可。
除上述兩種地圖信息加載外,開發(fā)人員也可以通過(guò)uDigSRC開發(fā)定義其他地圖工具如面積計(jì)算:定義當(dāng)前比例尺下每個(gè)pixel點(diǎn)代表面積S1(pix),定義比例尺(scale)轉(zhuǎn)換下pixel所代表面積變化公式S1(pix)=f(scale),在地圖上選取一個(gè)范圍,統(tǒng)計(jì)范圍內(nèi)像素點(diǎn)個(gè)數(shù)num,最終面積Area=S1(pix)*num。
將上述代碼封裝完成后,新建插件工程,工程名定義為Custom.areaCaculation,將該插件工程加載到原態(tài)勢(shì)圖工程中去即可完成功能新增。
4 3D態(tài)勢(shì)圖技術(shù)探討
基于uDigSDK+uDigSRC框架下的二次開發(fā)尚不能解決3D視圖的技術(shù)問(wèn)題,但可以通過(guò)其他已經(jīng)成熟的3D平臺(tái)提供給java的接口實(shí)現(xiàn)上述框架下的三維圖形功能。目前領(lǐng)域內(nèi)存在幾種可行平臺(tái):Java3D、JOGL以及VTK。
以技術(shù)探討成熟度來(lái)說(shuō),VTK無(wú)疑是首選3D平臺(tái),它獨(dú)有的高速數(shù)據(jù)處理能力面對(duì)海量數(shù)據(jù)的3D態(tài)勢(shì)圖比其他3D平臺(tái)更有優(yōu)勢(shì),它對(duì)其他3D平臺(tái)函數(shù)庫(kù)的支持實(shí)現(xiàn)了各平臺(tái)間功能上的互補(bǔ)。此外,三維建模中有一個(gè)難題:地形表面是一個(gè)在空間上連續(xù)的空間曲面,而建筑物等地物的地面理論上應(yīng)該是一個(gè)平面。建筑物地面和地形表面相交的部分在空間上是相互疊加的,若不對(duì)坐落于地形表面上的建筑物地面做任何處理就疊加在地形表面上,則二者之間必然產(chǎn)生集合縫隙[5]。相比市場(chǎng)上其他3D平臺(tái),VTK率先解決了該邊界縫隙的問(wèn)題,下面以VTK為例,介紹三維場(chǎng)景制作及二維三維態(tài)勢(shì)圖的交互式響應(yīng)。
一個(gè)簡(jiǎn)單的三維場(chǎng)景制作首先需定的以下幾個(gè)環(huán)境參數(shù):光源,光線投射方向,光色,光線范圍,物體表面形狀、顏色、面積、材質(zhì),背景顏色,攝像機(jī)位置,最后是空間坐標(biāo)系。若是想實(shí)現(xiàn)攝像機(jī)視角漫游及鼠標(biāo)、鍵盤控制,需新增其他事件監(jiān)聽代碼及空間位置信息。以上功能均可用java代碼實(shí)現(xiàn),開發(fā)人員只需在工程開始前導(dǎo)入相關(guān)jar包即可。
從對(duì)數(shù)據(jù)的作用形式看,目前對(duì)人一圖和圖一模之間交互的研究集中在數(shù)據(jù)表現(xiàn)和數(shù)據(jù)操作兩個(gè)方面,前者包括各種專題制圖、復(fù)雜符號(hào)表達(dá)、地圖疊置、多色彩組織和視圖組織等表達(dá)技術(shù),后者包括聚集、排序、動(dòng)畫、數(shù)據(jù)轉(zhuǎn)換和視圖連接等操作方法[2]。而本課題下二維與三維圖形的交互式響應(yīng)是指uDig下的二維態(tài)勢(shì)圖與VTK制作的3D場(chǎng)景能夠根據(jù)一種映射關(guān)系進(jìn)行數(shù)據(jù)交互。這種映射關(guān)系可以是坐標(biāo),也可以是瓦片圖的索引號(hào)。另外,為減少服務(wù)器加載3D地圖時(shí)資源的消耗,只在需要觀察3D態(tài)勢(shì)圖時(shí)才進(jìn)行3D渲染繪制。
2D/3D互響應(yīng)模塊應(yīng)擁有以下功能:
(1)用戶在3D漫游時(shí),2D場(chǎng)景要實(shí)時(shí)顯示用戶的位置和視野方向;(2)用戶在2D/3D場(chǎng)景中改變觀察位置時(shí),對(duì)應(yīng)3D/2D的觀察著位置也要改變;在2D/3D場(chǎng)景中查詢目標(biāo)屬性時(shí),對(duì)應(yīng)3D/2D場(chǎng)景中的目標(biāo)需高亮或改變顏色;(3)應(yīng)用程序初始化時(shí),不調(diào)入3D場(chǎng)景,單獨(dú)在2D地圖繪制面板上選擇一塊區(qū)域用于3D場(chǎng)景顯示。
5 態(tài)勢(shì)圖的B\S架構(gòu)實(shí)現(xiàn)
GrassGis、QGis、OpenJUMP、uDig等GIS均屬于開源桌面GIS項(xiàng)目,而當(dāng)前市場(chǎng)上GIS平臺(tái)的主要應(yīng)用紛紛建立在WEB架構(gòu)下。所以,為了能夠在互聯(lián)網(wǎng)平臺(tái)上發(fā)布該項(xiàng)目,需要一個(gè)發(fā)布平臺(tái)將上述桌面GIS工程加載到網(wǎng)站服務(wù)器中,并實(shí)現(xiàn)通過(guò)瀏覽器進(jìn)行瀏覽。
uDig下的態(tài)勢(shì)圖在B\S平臺(tái)下的發(fā)布相較其他GIS軟件容易得多,GeoServer是OpenGIS Web服務(wù)器規(guī)范的J2EE實(shí)現(xiàn)。利用GeoServer可以方便地發(fā)布地圖數(shù)據(jù),允許用戶對(duì)特征數(shù)據(jù)進(jìn)行更新、刪除、插入操作,通過(guò)GeoServer可以比較容易地在用戶之間迅速共享空間地理信息。GeoServer為開發(fā)者提供了Web發(fā)布服務(wù)器上所需的基本組件,相比其他開源軟件具有:
(1)基于serlet、STRUTS框架、支持高效的Spring框架開發(fā);
(2)兼容WMS、WFS Feature;
(3)支持PostGis、Shapefile、Oracle、DB2、MySQL等數(shù)據(jù)庫(kù);
(4)支持多種坐標(biāo)投影;
(5)可以運(yùn)行在任何基于J2EE/Servlet的容器之上;
(6)嵌入MapBuilder支持Ajax的地圖客戶端;針對(duì)Web端顯示地圖數(shù)據(jù)還需在網(wǎng)站項(xiàng)目中新增mapbuilder.js方法,該方法是由MapBuilder平臺(tái)提供的。開發(fā)人員需從官網(wǎng)下載GeoServer平臺(tái),在GIS服務(wù)器上安裝完成后加載uDig工程、導(dǎo)入MapBuilder相關(guān)文件。最后根據(jù)需求在Web項(xiàng)目中新增數(shù)個(gè).xml文件用于網(wǎng)頁(yè)布局配置、功能模塊添加、瀏覽器下坐標(biāo)系定義等即可完成uDig工程在互聯(lián)網(wǎng)平臺(tái)上的發(fā)布。
6 展望
上述部分展示的功能實(shí)現(xiàn)只是GIS態(tài)勢(shì)圖中很小的一部分并對(duì)未來(lái)態(tài)勢(shì)圖中的功能模塊進(jìn)行了劃分,下一步的開發(fā)與測(cè)試還面對(duì)這以下問(wèn)題:
目前雖然實(shí)現(xiàn)了JAVA框架下的3D地形地貌的繪制,但存在著系統(tǒng)幀數(shù)低,圖形化計(jì)算速度較慢的問(wèn)題,這是由于3D顯示方法(引擎)設(shè)計(jì)過(guò)于簡(jiǎn)單,占用大量顯存造成的。這個(gè)問(wèn)題上,可以參考OpenGL與DX的圖形加速算法;第二個(gè)問(wèn)題在于2D/3D圖像之間的轉(zhuǎn)換,特別是坐標(biāo)轉(zhuǎn)換,隨著三維地圖數(shù)據(jù)的增加,系統(tǒng)需要一個(gè)統(tǒng)一的坐標(biāo)轉(zhuǎn)換算法,而不是針對(duì)每一個(gè)坐標(biāo)點(diǎn)設(shè)計(jì)與3D圖形投影坐標(biāo)的對(duì)應(yīng)關(guān)系;第三個(gè)要解決的問(wèn)題是二維柵格圖的分片與無(wú)縫粘貼,這是系統(tǒng)在讀取顯示高清衛(wèi)星遙感圖的時(shí)候需要解決的,面對(duì)可能大至T字節(jié)的柵格圖時(shí),圖形不分片,一般服務(wù)器或集群都無(wú)法短時(shí)間內(nèi)處理,而分片后又怎樣將數(shù)張圖片文件融合成一張新的圖片也是下一步工作需要研究的。
參考文獻(xiàn)
[1]黃健熙,郭利華,龍毅,等.二維地圖與三維虛擬場(chǎng)景的互響應(yīng)設(shè)計(jì)與實(shí)現(xiàn)[J].測(cè)繪信息與工程,2003,28(1).
[2]樊明輝,陳崇成.基于地圖的交互式可視化技術(shù)[J].華南理工大學(xué)學(xué)報(bào),2008,36(5).
[3]G.Formetta,A.Antonello,S.Franceschi,O.David,R.Rigon,Hydrological.modeling with components:A GIS-based open-source framework.Environmental Modelling &Software,2014,55:190-200.
[4]Yanming Chen,Jiechen Wang,Manchun Li,Jie Liu,Liang Cheng,Kang Yang,Dong Cai,3D Visualization of Electromagnetic Environment,978-1-61284-848-8/11 2011 IEEE.
[5]Smita Sengupta,Kavita V V Ganeshan,N.LSarda,A2CWiC,Developing IITB Smart CampusGIS Grid,2010,9:16-17.