王夢(mèng)雪
(成都理工大學(xué)信息科學(xué)與技術(shù)學(xué)院,四川 成都 610059)
由于空間數(shù)據(jù)具有海量、異構(gòu)、多源、多尺度及來(lái)源于不同提供者等特點(diǎn)[1],所以對(duì)空間數(shù)據(jù)的存儲(chǔ)管理和應(yīng)用也尤為重要。近年來(lái)出現(xiàn)的Google Earth、NASA World Wind等三維地理信息平臺(tái)都是以大量的空間數(shù)據(jù)服務(wù)為支撐,通過(guò)自有的或通過(guò)其他渠道獲得的數(shù)據(jù)與服務(wù)進(jìn)行集成,因此給空間數(shù)據(jù)的利用提供了便利的平臺(tái)。本文將數(shù)據(jù)注冊(cè)中心與World Wind Java相結(jié)合,利用元數(shù)據(jù)與數(shù)據(jù)分離的分布式存儲(chǔ)方式,以KML來(lái)統(tǒng)一組織和管理各種空間數(shù)據(jù)屬性,實(shí)現(xiàn)對(duì)空間數(shù)據(jù)的存儲(chǔ)。利用World Wind Java實(shí)現(xiàn)對(duì)空間數(shù)據(jù)的讀取和展示,以便于對(duì)采集的空間數(shù)據(jù)進(jìn)行有效的存取及為行業(yè)應(yīng)用提供服務(wù),以充分發(fā)揮數(shù)據(jù)的作用。
World Wind是由美國(guó)國(guó)家航天局(NASA)的科研人員開(kāi)發(fā)的開(kāi)放源代碼三維地圖平臺(tái)。它可以將Landsat 7、航天飛機(jī)雷達(dá)地形測(cè)圖任務(wù)(Shuttle Radar Topography Mission,SRTM)、中分辨率成像光譜儀(Moderate-Resolution Imaging Spectroradiometer,MODIS)等多顆衛(wèi)星的數(shù)據(jù)以及其他WMS服務(wù)商提供的圖像通過(guò)一個(gè)三維的地球模型展現(xiàn)。World Wind有.NET和Java兩個(gè)版本,源代碼全部免費(fèi)開(kāi)發(fā),其中World Wind Java版本可以支持Windows、Linux和Mac平臺(tái),具有極好的適用性[2]。
目前,國(guó)內(nèi)廣泛應(yīng)用的商業(yè)化三維地理信息平臺(tái)主要是國(guó)外的 Google Earth、ArcGIS Engine、SkyLine以及國(guó)內(nèi)的 SuperMap 6R、VRMap、EV-Globe、LTEarth和GeoGlobe平臺(tái)。其中最為人們熟知的是Google Earth,而World Wind的定位與前面幾種明顯不同,它不是商業(yè)化軟件。
World Wind Java SDK是一個(gè)開(kāi)源的軟件,它可以在用戶程序中作為組件,并且獲取NASA的數(shù)據(jù),開(kāi)發(fā)者通過(guò)自己開(kāi)發(fā)的需求,可以充分而深入地使用這些數(shù)據(jù)。World Wind Java SDK還提供了其他星球的影像。從設(shè)計(jì)角度來(lái)看,World Wind Java SDK具有極強(qiáng)的可擴(kuò)展性,將World Wind Java SDK與開(kāi)發(fā)者的項(xiàng)目集成,開(kāi)發(fā)自己的GIS平臺(tái),應(yīng)用于不同的領(lǐng)域[3]。
KML(Keyhole Markup Language)是一種基于XML語(yǔ)法與格式的、用于描述和保存地理信息(如點(diǎn)、線、圖像、多邊形和模型等)的編碼規(guī)范,可以被Google Earth和Google Maps識(shí)別并顯示。用于在地球?yàn)g覽器(例如Google地球、Google地圖和谷歌手機(jī)地圖)中顯示地理數(shù)據(jù)。KML是由開(kāi)放地理空間聯(lián)盟(Open Geospatial Consortium,OGC)維護(hù)的國(guó)際標(biāo)準(zhǔn)[4]。
至今,空間數(shù)據(jù)的存儲(chǔ)經(jīng)歷了5個(gè)階段[5]:
(1)文件系統(tǒng)存儲(chǔ)階段,主要采用空間和非空間數(shù)據(jù)用文件分開(kāi)存儲(chǔ),2個(gè)文件中的空間數(shù)據(jù)和屬性數(shù)據(jù)用唯一標(biāo)識(shí)連接的方式。其優(yōu)點(diǎn)是數(shù)據(jù)模型簡(jiǎn)單、易處理;缺點(diǎn)是數(shù)據(jù)安全性低,無(wú)法保證數(shù)據(jù)的一致性,無(wú)法建立復(fù)雜的數(shù)據(jù)模型。
(2)混合數(shù)據(jù)存儲(chǔ)階段,以文件形式存儲(chǔ),關(guān)系數(shù)據(jù)庫(kù)管理屬性數(shù)據(jù)。以指針聯(lián)系空間數(shù)據(jù)文件和屬性數(shù)據(jù)庫(kù)。其優(yōu)點(diǎn)是屬性數(shù)據(jù)管理和訪問(wèn)都容易;缺點(diǎn)是無(wú)法保證數(shù)據(jù)的一致性和數(shù)據(jù)安全。
(3)關(guān)系數(shù)據(jù)庫(kù)存儲(chǔ)階段,存儲(chǔ)中在關(guān)系庫(kù)中引入復(fù)雜的數(shù)據(jù)類型。其優(yōu)點(diǎn)是數(shù)據(jù)完整性及一致性較好;缺點(diǎn)是空間分析能力欠缺。
(4)面向?qū)ο髷?shù)據(jù)庫(kù)存儲(chǔ)階段,利用面向?qū)ο蠓椒ń?shù)據(jù)存儲(chǔ)和處理。其優(yōu)點(diǎn)是能準(zhǔn)確地描述空間對(duì)象及行為,建模能力強(qiáng);缺點(diǎn)是查詢能力欠缺。
(5)對(duì)象關(guān)系型存儲(chǔ)階段,采用關(guān)系數(shù)據(jù)庫(kù)和面向?qū)ο蠹夹g(shù)結(jié)合的方式存儲(chǔ)。其優(yōu)點(diǎn)是準(zhǔn)確描述空間對(duì)象,數(shù)據(jù)完整性、一致性好;缺點(diǎn)是空間分析能力和查詢能力欠缺。
目前數(shù)據(jù)庫(kù)軟件的數(shù)據(jù)存儲(chǔ)方式有如下幾種。
(1)ArcSDE利用數(shù)據(jù)庫(kù)提供的標(biāo)準(zhǔn)數(shù)據(jù)類型來(lái)組織存儲(chǔ)空間數(shù)據(jù)。存儲(chǔ)類型如下:
①ArcSDE壓縮二進(jìn)制。這是ArcSDE特有的存儲(chǔ)方案,支持 Oracle和 SQL Server。Oracle以“l(fā)ong row”存儲(chǔ),SQL Server以“image”類型存儲(chǔ)。
②BLOB類型存儲(chǔ),支持Oracle數(shù)據(jù)庫(kù)。
③Oracle Spatial標(biāo)準(zhǔn)化方案。僅在Oracle(包括Spatial擴(kuò)展)中可用。
(2)Oracle Spatial空間擴(kuò)展提供了一系列存儲(chǔ)過(guò)程和函數(shù),實(shí)現(xiàn)了空間數(shù)據(jù)在Oracle數(shù)據(jù)庫(kù)中的存儲(chǔ)訪問(wèn)。
(3)DB2和 Informix。IBM DB2 Spatial Extender和IBM Informix Spatial DataBlade通過(guò)擴(kuò)展數(shù)據(jù)原有的標(biāo)準(zhǔn)數(shù)據(jù)類型,使用戶可以為表定義空間列,并且制定空間列的類型為ST_Geometry,從而存儲(chǔ)空間數(shù)據(jù)。
(4)MySQL用自己的Geometry數(shù)據(jù)類型存儲(chǔ)空間數(shù)據(jù)。
數(shù)據(jù)注冊(cè)中心是注冊(cè)元數(shù)據(jù)的信息系統(tǒng)。元數(shù)據(jù)注冊(cè)系統(tǒng)是對(duì)元數(shù)據(jù)的定義信息及其編碼、轉(zhuǎn)換、應(yīng)用等規(guī)范進(jìn)行發(fā)布、注冊(cè)、管理和檢索的系統(tǒng)。與傳統(tǒng)的數(shù)據(jù)標(biāo)準(zhǔn)機(jī)制不一樣,元數(shù)據(jù)注冊(cè)系統(tǒng)是一個(gè)面向網(wǎng)絡(luò)、面向服務(wù)的全新的數(shù)據(jù)標(biāo)準(zhǔn)化機(jī)制。元數(shù)據(jù)注冊(cè)系統(tǒng)具有4大服務(wù)功能,分別是對(duì)元數(shù)據(jù)的管理、元數(shù)據(jù)互操作、元數(shù)據(jù)的開(kāi)放應(yīng)用、元數(shù)據(jù)的復(fù)用。在此模型實(shí)現(xiàn)交互的過(guò)程中,數(shù)據(jù)注冊(cè)中心主要完成3方面的操作:(1)制定空間數(shù)據(jù)的KML規(guī)范;(2)根據(jù)指定的空間數(shù)據(jù)標(biāo)準(zhǔn),在不同資源類型的系統(tǒng)進(jìn)行數(shù)據(jù)交互時(shí),數(shù)據(jù)注冊(cè)中心可以根據(jù)注冊(cè)的元數(shù)據(jù)規(guī)范提供轉(zhuǎn)換模式,自動(dòng)進(jìn)行轉(zhuǎn)換服務(wù);(3)提供行業(yè)服務(wù),即通過(guò)數(shù)據(jù)注冊(cè)中心的服務(wù)接口為行業(yè)應(yīng)用提供相關(guān)數(shù)據(jù)[6]。
本文提出的基于數(shù)據(jù)注冊(cè)中心的空間數(shù)據(jù)存取模型的層次圖如圖1所示,分為3個(gè)層次:數(shù)據(jù)服務(wù)層、數(shù)據(jù)交換層和數(shù)據(jù)存儲(chǔ)層。
圖1 基于數(shù)據(jù)注冊(cè)中心的空間數(shù)據(jù)存取模型的層次圖
對(duì)空間數(shù)據(jù)存取的研究主要是為各行業(yè)應(yīng)用提供安全高效的服務(wù),實(shí)現(xiàn)對(duì)空間數(shù)據(jù)的共享和利用,經(jīng)由數(shù)據(jù)交換層KML解析之后的數(shù)據(jù)結(jié)果通過(guò)數(shù)據(jù)訪問(wèn)層返回到客戶端的服務(wù)接口,然后為客戶端提供方便高效的服務(wù),此處的數(shù)據(jù)服務(wù)層就是為了利用聚合之后的數(shù)據(jù)來(lái)方便服務(wù)[7]。
根據(jù)制定的符合規(guī)范的KML請(qǐng)求格式,在提取客戶端提交的KML數(shù)據(jù)流時(shí),在處理模塊完成對(duì)KML的解析和裝載,對(duì)數(shù)據(jù)進(jìn)行描述,即在各客戶終端上,對(duì)空間數(shù)據(jù)進(jìn)行注冊(cè)并存儲(chǔ),注冊(cè)時(shí)完成對(duì)空間元數(shù)據(jù)的提取,存儲(chǔ)在元數(shù)據(jù)庫(kù)中;在為客戶端返回結(jié)果數(shù)據(jù)的時(shí)候,針對(duì)KML規(guī)范開(kāi)發(fā)的服務(wù)端處理程序,通過(guò)服務(wù)器端的處理程序?qū)ML結(jié)構(gòu)數(shù)據(jù)流進(jìn)行解析,最后將解析結(jié)果返回給客戶端。
提供空間數(shù)據(jù)的存儲(chǔ),包括分布式元數(shù)據(jù)庫(kù)和分布式文件數(shù)據(jù)庫(kù)。分布式元數(shù)據(jù)庫(kù)主要完成對(duì)數(shù)據(jù)存儲(chǔ)時(shí),對(duì)錄入的元數(shù)據(jù)的管理和存儲(chǔ),即對(duì)KML文件的存儲(chǔ)和管理;分布式文件數(shù)據(jù)庫(kù)完成對(duì)空間數(shù)據(jù)本身的存儲(chǔ)。
模型的總體架構(gòu)設(shè)計(jì)如圖2所示,此模型架構(gòu)中數(shù)據(jù)注冊(cè)中心是實(shí)現(xiàn)空間數(shù)據(jù)存取的主要部分。由于空間數(shù)據(jù)的種類復(fù)雜,不同類型的數(shù)據(jù)之間還存在著關(guān)聯(lián),并以行業(yè)數(shù)據(jù)集的形式為外界提供數(shù)據(jù)服務(wù),因此通過(guò)數(shù)據(jù)注冊(cè)中心將不同數(shù)據(jù)源的元數(shù)據(jù)信息集中起來(lái),通過(guò)對(duì)元數(shù)據(jù)的統(tǒng)一管理,達(dá)到對(duì)資源信息共享。一方面,數(shù)據(jù)注冊(cè)中心可以對(duì)元數(shù)據(jù)進(jìn)行統(tǒng)一管理和維護(hù),另一方面,數(shù)據(jù)注冊(cè)中心要為數(shù)據(jù)訪問(wèn)者提供可靠的信息發(fā)現(xiàn)機(jī)制,確保信息資源的精確定位和訪問(wèn)[8]。
圖2 模型總體架構(gòu)
主要的存儲(chǔ)和響應(yīng)流程如下:
(1)接收來(lái)自各種終端的數(shù)據(jù)。
(2)通過(guò)HTTP提交數(shù)據(jù)后,若此數(shù)據(jù)是首次向該數(shù)據(jù)管理模型提交,則該數(shù)據(jù)本身存儲(chǔ)在分布式文件數(shù)據(jù)庫(kù)中。與之相關(guān)的元數(shù)據(jù)通過(guò)KML完成數(shù)據(jù)交換的數(shù)據(jù)注冊(cè)過(guò)程,產(chǎn)生一個(gè)針對(duì)行業(yè)應(yīng)用的KML文件。文件存儲(chǔ)于分布式元數(shù)據(jù)服務(wù)器群中。KML文件對(duì)數(shù)據(jù)進(jìn)行了描述,在存儲(chǔ)的過(guò)程中,自動(dòng)為此數(shù)據(jù)的存儲(chǔ)形成唯一標(biāo)識(shí)GUID,并且存入該數(shù)據(jù)在分布式文件服務(wù)器群中的URL。
(3)若客戶端直接請(qǐng)求數(shù)據(jù)庫(kù)中的數(shù)據(jù),則對(duì)該客戶進(jìn)行授權(quán)。通過(guò)注冊(cè)數(shù)據(jù)時(shí)的唯一標(biāo)識(shí)GUID,找到該數(shù)據(jù)對(duì)應(yīng)的KML文檔。通過(guò)對(duì)文檔的解析,向終端返回該空間數(shù)據(jù)在數(shù)據(jù)服務(wù)器群中存儲(chǔ)的URL。
(4)終端直接通過(guò)得到的URL訪問(wèn)分布式文件服務(wù)器群,最終準(zhǔn)確快速地返回待訪問(wèn)的空間數(shù)據(jù)。
圖3為對(duì)空間數(shù)據(jù)在數(shù)據(jù)注冊(cè)中心中實(shí)現(xiàn)存取的基本流程圖。在實(shí)現(xiàn)過(guò)程中,采用MySQL數(shù)據(jù)庫(kù)完成對(duì)元數(shù)據(jù)的存儲(chǔ)和管理,用Java完成對(duì)不同格式、不同系統(tǒng)間數(shù)據(jù)的交換,用Tomcat和Apache完成對(duì)元數(shù)據(jù)庫(kù)的發(fā)布。
圖3 數(shù)據(jù)注冊(cè)中心下空間數(shù)據(jù)交換流程圖
利用World Wind Java SDK和Eclipse集成作為開(kāi)發(fā)環(huán)境,完成對(duì)空間信息的展示。搭建過(guò)程如下:
首先是安裝Java SDK,配置Java的環(huán)境變量,在確認(rèn)好Java的運(yùn)行環(huán)境無(wú)誤之后,解壓下載的E-clipse,然后啟動(dòng) Eclipse。
然后是本機(jī)上服務(wù)器的安裝配置,主要完成A-pache和Tomcat的安裝,并將兩者整合。
同時(shí)還要安裝JOGL(Java Bindings for OpenGL)和配置JOGL。JOGL是一種利用OpenGL的Java繪圖技術(shù),安裝JOGL是為了支持客戶端和服務(wù)器的運(yùn)行和支持Eclipse開(kāi)發(fā)。
最重要的就是World Wind Java SDK和Eclipse的集成:將下載的World Wind Java SDK中的World-Wind.jar和 jogl.jar引入到 Eclipse新建的項(xiàng)目中,項(xiàng)目中初步的結(jié)構(gòu)圖如圖4所示。
圖4 實(shí)驗(yàn)中項(xiàng)目的初步結(jié)構(gòu)圖
本文以世界七大奇跡的空間數(shù)據(jù)屬性為實(shí)驗(yàn)數(shù)據(jù),以基于數(shù)據(jù)注冊(cè)中心和World Wind Java的空間數(shù)據(jù)的存儲(chǔ)模型為實(shí)現(xiàn)架構(gòu),以KML規(guī)范為數(shù)據(jù)交換標(biāo)準(zhǔn),完成世界七大奇跡數(shù)據(jù)的展示。
由于對(duì)不同的行業(yè)應(yīng)用不同的空間數(shù)據(jù),KML對(duì)空間數(shù)據(jù)沒(méi)有統(tǒng)一的規(guī)范標(biāo)準(zhǔn),所以首先需要制定針對(duì)某行業(yè)應(yīng)用的KML標(biāo)準(zhǔn),以便對(duì)空間數(shù)據(jù)進(jìn)行統(tǒng)一的描述[10],在模式實(shí)現(xiàn)的過(guò)程中,利用世界七大奇跡的空間數(shù)據(jù)屬性為實(shí)驗(yàn)數(shù)據(jù),根據(jù)此空間數(shù)據(jù)類型提供相應(yīng)的KML規(guī)范,如圖5所示。
圖5 空間數(shù)據(jù)的存儲(chǔ)規(guī)范
空間數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)主要包括對(duì)元數(shù)據(jù)描述的字段設(shè)計(jì),用于對(duì)數(shù)據(jù)注冊(cè)中心的元數(shù)據(jù)的管理,如表1所示。GUID作為該數(shù)據(jù)表的主鍵。
表1 元數(shù)據(jù)庫(kù)字段設(shè)計(jì)
在建立的世界七大奇跡的空間數(shù)據(jù)的數(shù)據(jù)交換標(biāo)準(zhǔn)和數(shù)據(jù)庫(kù)表的基礎(chǔ)上,將KML文檔中的數(shù)據(jù)和數(shù)據(jù)庫(kù)表中數(shù)據(jù)實(shí)現(xiàn)互操作,即實(shí)現(xiàn)將KML文檔中的數(shù)據(jù)插入數(shù)據(jù)庫(kù)表中和實(shí)現(xiàn)將數(shù)據(jù)庫(kù)表中的數(shù)據(jù)生成相應(yīng)的KML文檔[11]。將KML文檔中的數(shù)據(jù)插入到數(shù)據(jù)庫(kù)表中是將空間數(shù)據(jù)以結(jié)構(gòu)化的形式存儲(chǔ)在數(shù)據(jù)庫(kù)中,通過(guò)DOMDocument對(duì)象實(shí)現(xiàn)隨KML文檔中Node節(jié)點(diǎn)的解析,并將相應(yīng)解析結(jié)果存儲(chǔ)至數(shù)據(jù)庫(kù)中;將數(shù)據(jù)庫(kù)表中的數(shù)據(jù)形成KML是為不同類型的空間數(shù)據(jù)的格式統(tǒng)一,通過(guò)Documentbuilder實(shí)現(xiàn)對(duì)KML文檔的創(chuàng)建,簡(jiǎn)化了對(duì)空間數(shù)據(jù)的管理。
在通過(guò)對(duì)世界七大奇跡的KML文件的裝載和存儲(chǔ)之后,利用相應(yīng)的KML文件實(shí)現(xiàn)空間數(shù)據(jù)的展示。在此KML文件中,詳細(xì)地描述了世界七大奇跡的屬性數(shù)據(jù),然后通過(guò)對(duì)此KML數(shù)據(jù)的解析,展現(xiàn)空間數(shù)據(jù)[12],如圖 6 所示。
圖6 實(shí)驗(yàn)展示圖
本文針對(duì)空間數(shù)據(jù)的存取問(wèn)題,提出一個(gè)基于數(shù)據(jù)注冊(cè)中心和World Wind Java空間數(shù)據(jù)的存儲(chǔ)方案,并且利用世界七大奇跡為實(shí)驗(yàn)數(shù)據(jù),在搭建好的Eclipse和World Wind Java SDK的集成平臺(tái)上對(duì)解析之后的數(shù)據(jù)進(jìn)行了展示,為空間信息的存取提供了一種新的思路[13]。
[1]刁明光,薛濤,李建存,等.基于地質(zhì)信息元數(shù)據(jù)標(biāo)準(zhǔn)的多源空間數(shù)據(jù)管理系統(tǒng)[J].國(guó)土資源遙感,2013,25(1):165-170.
[2]周玲,高延銘,王海紅,等.World Wind Java三維地理信息系統(tǒng)開(kāi)發(fā)技術(shù)指南[M].北京:機(jī)械工業(yè)出版社,2013:25-28.
[3]盧海濱,鄭文鋒,銀正彤,等.NASA World Wind JavaSDK數(shù)字地球客戶端開(kāi)發(fā)[J].測(cè)繪科學(xué),2009,34(3):169-170,139.
[4]顏小平,耿曉民,初啟鳳.基于KML在Google Earth批量標(biāo)記方法[J].測(cè)繪與空間地理信息,2012,35(4):92-93.
[5]李驍,范沖,鄒崢嶸.空間數(shù)據(jù)存儲(chǔ)模式的比較研究[J].工程地質(zhì)計(jì)算機(jī)應(yīng)用,2009(2):8-10.
[6]強(qiáng)韶華,吳鵬,嚴(yán)明.面向信息資源整合的元數(shù)據(jù)注冊(cè)系統(tǒng)研究[J].情報(bào)科學(xué),2008,26(12):1878-1881,1911.
[7]董智慧.基于空間信息服務(wù)云月球數(shù)據(jù)共享機(jī)制研究[D].成都:成都理工大學(xué),2012.
[8]李銳,林艷萍,徐正全,等.空間數(shù)據(jù)存儲(chǔ)對(duì)象的元數(shù)據(jù)可伸縮性管理[J].計(jì)算機(jī)應(yīng)用研究,2011,28(12):4567-4571.
[9]蒙安泰.G/S模式下空間信息服務(wù)云數(shù)據(jù)注冊(cè)機(jī)制研究[D].成都:成都理工大學(xué),2012.
[10]史婷婷,李巖,王鵬.基于GML空間數(shù)據(jù)存儲(chǔ)方法研究與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2006,26(10):2408-2412.
[11]尹建璋.基于XML的應(yīng)用層數(shù)據(jù)交換技術(shù)的研究[J].計(jì)算機(jī)與現(xiàn)代化,2009(8):97-100,104.
[12]蔣佩伶.HGML在基于G/S模式的地學(xué)瀏覽器平臺(tái)中的解析與應(yīng)用[D].成都:成都理工大學(xué),2011.
[13]王宇,張軍,盧虎.World Wind平臺(tái)地理環(huán)境建模方法的研究與改進(jìn)[J].計(jì)算機(jī)工程與應(yīng)用,2012,48(36):75-79.
[14]謝倩茹,周明全,耿國(guó)華.基于ADO技術(shù)的XML數(shù)據(jù)交換[J].計(jì)算機(jī)應(yīng)用與軟件,2004,21(1):123-125.