本發(fā)明涉及數(shù)據(jù)庫技術(shù)領(lǐng)域,具體是一種基于Oracle數(shù)據(jù)庫的多源異構(gòu)空間數(shù)據(jù)流轉(zhuǎn)方法。
背景技術(shù):
隨著空間地理信息技術(shù)的不斷發(fā)展,獲取地理空間信息的手段不斷豐富,地理空間數(shù)據(jù)呈現(xiàn)出數(shù)據(jù)來源多樣化、數(shù)據(jù)模型差異化、數(shù)據(jù)存儲分散化、空間關(guān)系復(fù)雜化、數(shù)量海量化等特點,為此,以數(shù)據(jù)、應(yīng)用為導(dǎo)向的各種空間數(shù)據(jù)庫技術(shù)、空間數(shù)據(jù)引擎技術(shù)、分布式存儲管理技術(shù)應(yīng)運而生,在一定程度上或從某一方面有效地解決了地理空間數(shù)據(jù)存儲和管理的問題。
針對多源異構(gòu)空間數(shù)據(jù)的存儲、組織、管理與發(fā)布等問題,國內(nèi)外已經(jīng)有了大量的研究成果,可主要分為三大類。第一類是以傳統(tǒng)關(guān)系型數(shù)據(jù)庫為代表,直接對傳統(tǒng)數(shù)據(jù)庫管理系統(tǒng)進(jìn)行擴(kuò)展,實現(xiàn)空間數(shù)據(jù)存儲與管理功能;第二類是基于傳統(tǒng)數(shù)據(jù)庫管理系統(tǒng)開發(fā)空間數(shù)據(jù)庫引擎,以獲得傳統(tǒng)數(shù)據(jù)庫管理系統(tǒng)功能之外的空間數(shù)據(jù)存儲和管理能力;第三類是基于分布式文件系統(tǒng)構(gòu)建非關(guān)系型(NoSQL)數(shù)據(jù)庫在分布式并行計算框架下進(jìn)行數(shù)據(jù)處理。
對象關(guān)系型數(shù)據(jù)庫通過對自身的數(shù)據(jù)庫管理系統(tǒng)進(jìn)行擴(kuò)展,使之能直接存貯和管理非結(jié)構(gòu)化的空間數(shù)據(jù),如Oracle公司的Oracle Spatial、Oracle GeoRaster、Postgres SQL的PostGIS、IBM公司的DB2Spatial Extender、Informix的Spatial DataBlade、基于SQLite的SpatialLite等。這些傳統(tǒng)的數(shù)據(jù)庫產(chǎn)品其技術(shù)成熟穩(wěn)定,在各行業(yè)應(yīng)用范圍廣、用戶數(shù)量多、運行的周期長,基于其部署的應(yīng)用系統(tǒng)數(shù)量和規(guī)模巨大,其中以O(shè)racle應(yīng)用最為廣泛。但是由于Oracle提供的SDO_GEOMETRY屬于Oracle Spatial擴(kuò)展模塊內(nèi)部的存儲對象,不具有普適性,無法直接與其他數(shù)據(jù)源或數(shù)據(jù)庫直接進(jìn)行數(shù)據(jù)共享或互操作,需要進(jìn)行空間數(shù)據(jù)格式的轉(zhuǎn)換;同時,GeoRaster在柵格數(shù)據(jù)管理方面也存在諸多限制。
空間數(shù)據(jù)引擎是基于傳統(tǒng)關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(Relational Database ManagementSystem,RDBMS)開發(fā)的支持空間數(shù)據(jù)的中間件,空間數(shù)據(jù)應(yīng)用程序通過空間數(shù)據(jù)引擎將數(shù)據(jù)交給RDBMS統(tǒng)一管理,具有代表性的是ESRI公司的ArcSDE、MapInfo的Spatial-Ware、MAP GIS空間數(shù)據(jù)引擎MapGIS SDE、超圖的SuperMap XSDE等,其中基于ArcSDE應(yīng)用開發(fā)的案例最多,處于國際領(lǐng)先地位。ArcSDE是ArcGIS的空間數(shù)據(jù)引擎,采用的是客戶/服務(wù)器體系結(jié)構(gòu),其在應(yīng)用程序和RDBMS之間搭建了橋梁,通過ArcSDE提供一個連續(xù)的空間數(shù)據(jù)模型,借助這一空間數(shù)據(jù)模型,可以實現(xiàn)對RDBMS空間存儲和管理。但是ArcSDE支持的數(shù)據(jù)源有限,在大批量的數(shù)據(jù)入庫及數(shù)據(jù)遷移時效率較低,同時其部署時需要在數(shù)據(jù)庫服務(wù)器端安裝相應(yīng)的SDE環(huán)境,對未通過ArcSDE入庫的數(shù)據(jù)無法直接讀取,無形中增加了數(shù)據(jù)庫服務(wù)器端負(fù)荷,無法實現(xiàn)多源異構(gòu)數(shù)據(jù)的共享與數(shù)據(jù)的流轉(zhuǎn)。
非關(guān)系型NoSQL空間數(shù)據(jù)庫已經(jīng)取得的比較流行和成熟的解決方案是利用分布式文件系統(tǒng),基于HBase,MongoDB等NoSQL數(shù)據(jù)庫構(gòu)建遙感影像、矢量數(shù)據(jù)的結(jié)構(gòu)化(Key-Value)存儲,實現(xiàn)對高分辨率遙感影像、海量矢量數(shù)據(jù)的管理。如西密蘇里州立大學(xué)的BaoqiangYan等學(xué)者提出了一種海量空間數(shù)據(jù)處理并行框架(IDEA),可以有效的分配數(shù)據(jù)服務(wù)和計算節(jié)點,實現(xiàn)任務(wù)的有效調(diào)度,進(jìn)而達(dá)到提高I/O和通信的效率;浙江大學(xué)康俊鋒博士提出的基于整合的Hadoop和Eucalyptus云平臺的高分辨率遙感影像存儲模型C-RSM;雷德龍等人基于MongoDB和Hadoop架構(gòu),設(shè)計并實現(xiàn)了矢量空間數(shù)據(jù)云存儲與處理系統(tǒng)VectorDB,達(dá)到了海量矢量空間數(shù)據(jù)的高效存儲與處理要求。盡管基于非關(guān)系型數(shù)據(jù)庫的空間數(shù)據(jù)管理提出了很多解決方案,但在商業(yè)化應(yīng)用中使用的并不多,原因包括:分布式矢量數(shù)據(jù)的存儲、空間操作以及分布式處理的技術(shù)并不完善,需進(jìn)一步探索和研究;對多源異構(gòu)數(shù)據(jù)還無法提供充足的支持;對于如何集成已存在的關(guān)系型數(shù)據(jù)庫中的空間數(shù)據(jù),還未有很好地解決方案。
目前,國內(nèi)數(shù)據(jù)庫建設(shè)多不具備云環(huán)境,較為廣泛使用的數(shù)據(jù)庫仍然主要集中在以O(shè)racle為基礎(chǔ)的“擴(kuò)展對象關(guān)系型數(shù)據(jù)庫”、“空間數(shù)據(jù)引擎”兩方面,然而,多年的數(shù)據(jù)庫建設(shè)出現(xiàn)了種類繁多、架構(gòu)各異的GIS系統(tǒng),導(dǎo)致數(shù)據(jù)難以共享,出現(xiàn)數(shù)據(jù)遷移效率低、多源異構(gòu)數(shù)據(jù)流轉(zhuǎn)難度大、數(shù)據(jù)互操作難以實現(xiàn)等情況。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于提供一種基于Oracle數(shù)據(jù)庫的多源異構(gòu)空間數(shù)據(jù)流轉(zhuǎn)方法,將成熟的關(guān)系數(shù)據(jù)庫空間數(shù)據(jù)存儲與空間數(shù)據(jù)庫引擎技術(shù)結(jié)合,通過建立一體化的矢量、柵格數(shù)據(jù)存儲模型并優(yōu)化空間數(shù)據(jù)檢索機(jī)制,集成整合分布式存儲的各空間數(shù)據(jù)庫中的空間數(shù)據(jù),實現(xiàn)多源異構(gòu)數(shù)據(jù)的數(shù)據(jù)流轉(zhuǎn)。
為實現(xiàn)上述目的,本發(fā)明提供如下技術(shù)方案:
一種基于Oracle數(shù)據(jù)庫的多源異構(gòu)空間數(shù)據(jù)流轉(zhuǎn)方法,包括基于Oracle的多源異構(gòu)空間數(shù)據(jù)存取方法和基于Oracle的多源異構(gòu)空間數(shù)據(jù)處理方法;
所述基于Oracle的多源異構(gòu)空間數(shù)據(jù)存取方法,包括以下步驟:
步驟A1:數(shù)據(jù)管理層接收到數(shù)據(jù)應(yīng)用層數(shù)據(jù)請求,將請求傳遞給用戶權(quán)限角色認(rèn)證模塊;
步驟A2:用戶權(quán)限角色認(rèn)證模塊對用戶角色進(jìn)行審核,驗證通過后轉(zhuǎn)入數(shù)據(jù)庫節(jié)點管理模塊;
步驟A3:數(shù)據(jù)庫節(jié)點管理模塊根據(jù)數(shù)據(jù)存儲的目的地址確定訪問的數(shù)據(jù)庫節(jié)點;
步驟A4:數(shù)據(jù)請求調(diào)度模塊查找空間數(shù)據(jù)緩存區(qū),若沒有發(fā)現(xiàn)所需數(shù)據(jù),則將數(shù)據(jù)請求發(fā)送至數(shù)據(jù)統(tǒng)一訪問口模塊;
步驟A5:數(shù)據(jù)統(tǒng)一訪問接口模塊讀取多源異構(gòu)數(shù)據(jù),并通過空間數(shù)據(jù)轉(zhuǎn)換模塊進(jìn)行空間數(shù)據(jù)模型轉(zhuǎn)換,轉(zhuǎn)換為統(tǒng)一數(shù)據(jù)模型后,存入到數(shù)據(jù)緩沖區(qū)中;
步驟A6:數(shù)據(jù)預(yù)處理模塊對數(shù)據(jù)進(jìn)行簡單的質(zhì)檢;
步驟A7:數(shù)據(jù)統(tǒng)一訪問接口模塊將預(yù)處理后的數(shù)據(jù)通過空間數(shù)據(jù)存取模塊錄入到對應(yīng)的Oracle數(shù)據(jù)庫節(jié)點中,完成數(shù)據(jù)的存??;
所述基于Oracle的多源異構(gòu)空間處理方法,包括以下步驟:
步驟B1:數(shù)據(jù)管理層接收到數(shù)據(jù)應(yīng)用層數(shù)據(jù)請求;
步驟B2:用戶權(quán)限角色認(rèn)證模塊對用戶角色和數(shù)據(jù)的訪問權(quán)限進(jìn)行認(rèn)證;
步驟B3:數(shù)據(jù)庫節(jié)點管理模塊根據(jù)請求數(shù)據(jù)的基本信息確定訪問的數(shù)據(jù)庫節(jié)點信息;
步驟B4:數(shù)據(jù)請求調(diào)度模塊查找空間數(shù)據(jù)緩存區(qū),若發(fā)現(xiàn)緩存區(qū)沒有所需數(shù)據(jù),則發(fā)起數(shù)據(jù)請求;
步驟B5:數(shù)據(jù)統(tǒng)一訪問接口模塊通過數(shù)據(jù)庫操作模塊獲取所需數(shù)據(jù),存入到數(shù)據(jù)緩沖區(qū)中;
步驟B6:空間數(shù)據(jù)處理模塊對數(shù)據(jù)進(jìn)行運算與分析,將結(jié)果集存入到數(shù)據(jù)緩存區(qū);
步驟B7:數(shù)據(jù)請求調(diào)度模塊將數(shù)據(jù)結(jié)果集返回至上層應(yīng)用,完成操作。
作為本發(fā)明進(jìn)一步的方案:步驟A5中,所述統(tǒng)一數(shù)據(jù)模型包括統(tǒng)一矢量數(shù)據(jù)存儲結(jié)構(gòu)和統(tǒng)一柵格數(shù)據(jù)存儲結(jié)構(gòu)。
作為本發(fā)明再進(jìn)一步的方案:所述統(tǒng)一矢量數(shù)據(jù)存儲結(jié)構(gòu)包括基于BLOB對象存取方式的矢量數(shù)據(jù)存儲結(jié)構(gòu)和基于SDO_GEOMETRY對象存取方式的矢量數(shù)據(jù)存儲結(jié)構(gòu)。
作為本發(fā)明再進(jìn)一步的方案:所述基于BLOB對象存取方式的矢量數(shù)據(jù)存儲結(jié)構(gòu)的關(guān)系表包括矢量元數(shù)據(jù)表、矢量空間索引表、矢量空間參考表和矢量空間數(shù)據(jù)表。
作為本發(fā)明再進(jìn)一步的方案:所述基于SDO_GEOMETRY對象存取方式的矢量數(shù)據(jù)存儲結(jié)構(gòu)的關(guān)系表包括空間元數(shù)據(jù)表、空間坐標(biāo)系統(tǒng)表、空間索引信息表、空間索引元數(shù)據(jù)表和矢量空間數(shù)據(jù)表。
作為本發(fā)明再進(jìn)一步的方案:所述統(tǒng)一柵格數(shù)據(jù)存儲結(jié)構(gòu)包括:提取柵格數(shù)據(jù)元數(shù)據(jù)信息,生產(chǎn)柵格元數(shù)據(jù)信息表;按照波段對柵格數(shù)據(jù)進(jìn)行抽取,并形成波段信息表;對每一波段進(jìn)行分塊,每一塊作為一個Blob字段數(shù)據(jù)存儲在柵格數(shù)據(jù)表中;選擇重采樣算法,生成影像金字塔,形成金字塔信息表;對生成的金子塔數(shù)據(jù)先按照波段分層,同一波段內(nèi)再分塊,生成金字塔數(shù)據(jù)表。
作為本發(fā)明再進(jìn)一步的方案:所述統(tǒng)一柵格數(shù)據(jù)存儲結(jié)構(gòu)的關(guān)系表包括柵格信息表、波段信息表、金字塔信息表、柵格數(shù)據(jù)表、金字塔數(shù)據(jù)表。
作為本發(fā)明再進(jìn)一步的方案:還包括基于統(tǒng)一矢量數(shù)據(jù)存儲結(jié)構(gòu)的矢量數(shù)據(jù)查詢檢索方法;
所述基于統(tǒng)一矢量數(shù)據(jù)存儲結(jié)構(gòu)的矢量數(shù)據(jù)查詢檢索方法,包括以下步驟:
步驟C1:對于基于BLOB對象存取方式的矢量數(shù)據(jù)存儲結(jié)構(gòu)的空間數(shù)據(jù),建立空間索引后,能夠直接對BLOB對象進(jìn)行精確的空間查詢;
步驟C2:對于基于SDO_GEOMETRY對象存取方式的矢量數(shù)據(jù)存儲結(jié)構(gòu)的空間數(shù)據(jù),首先對矢量空間索引表或是建立的索引文件,對最小包圍框進(jìn)行空間查詢,初步篩選出FID結(jié)果集;
步驟C3:根據(jù)初步篩選出的FID結(jié)果集,去數(shù)據(jù)庫提取對應(yīng)要素;
步驟C4:對提取的要素與空間過濾條件進(jìn)行空間幾何運算,進(jìn)行幾何關(guān)系的精確查詢,得出滿足空間過濾條件的最終結(jié)果。
作為本發(fā)明再進(jìn)一步的方案:還包括基于統(tǒng)一柵格數(shù)據(jù)存儲結(jié)構(gòu)的柵格數(shù)據(jù)查詢檢索方法;
所述基于統(tǒng)一柵格數(shù)據(jù)存儲結(jié)構(gòu)的柵格數(shù)據(jù)查詢檢索方法,包括以下步驟:
步驟D1:根據(jù)柵格數(shù)據(jù)大小及柵格的地理范圍,計算柵格數(shù)據(jù)的cell大小:
步驟D2:根據(jù)請求的地理坐標(biāo)范圍,計算當(dāng)前請求柵格數(shù)據(jù)的大?。?/p>
其中,reqx、reqy分別表示請求的柵格數(shù)據(jù)的長度和寬度,filterminx、filtermaxx、filterminy、filtermaxy分別表示請求的地理范圍的最小x坐標(biāo)值、最大x坐標(biāo)值、最小y坐標(biāo)值、最大y坐標(biāo)值,cellx、celly分別表示柵格數(shù)據(jù)一個像素點能夠表示的地理坐標(biāo)x維度的大小和y維度的大??;
步驟D3:計算當(dāng)前視窗范圍內(nèi)的比例尺scale,找到與比例尺最近一級金字塔級別i:
其中,scale是當(dāng)前視窗比例尺,winx、winy分別為當(dāng)前視窗的寬和高度,pyramidi為第i級金字塔的比例尺,S為各級金字塔比例尺集合,level為金字塔級別總數(shù),pyramidmin為最接近scale的一級的金字塔的比例尺;
步驟D4:根據(jù)金字塔級別,查找該級金字塔在某一波段內(nèi)塊的位置:
其中,blockx、blocky分別表示柵格數(shù)據(jù)某一波段中切割塊的長度和寬度,tileminx、tileminy、tilemaxx、tilemaxy分別為所請求的塊號的最小行號、最小列號、最大行號、最大列號,reqminx、reqminy、reqmaxx、reqmaxy分別標(biāo)識請求的地理范圍的最小x坐標(biāo)值、最小y坐標(biāo)值、最大x坐標(biāo)值、最大y坐標(biāo)值,imgminx、imgminy分別表示柵格數(shù)據(jù)地理范圍的最小x坐標(biāo)值、最小y坐標(biāo)值;
步驟D5:按照塊號請求數(shù)據(jù)后,對柵格邊界的塊進(jìn)行塊內(nèi)查找,得到最終查詢的柵格數(shù)據(jù)實體。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:
本發(fā)明將成熟的關(guān)系數(shù)據(jù)庫空間數(shù)據(jù)存儲與空間數(shù)據(jù)庫引擎技術(shù)結(jié)合,通過建立一體化的矢量、柵格數(shù)據(jù)存儲模型并優(yōu)化空間數(shù)據(jù)檢索機(jī)制,整合分布式存儲的各空間數(shù)據(jù)庫中的空間數(shù)據(jù),實現(xiàn)多源異構(gòu)數(shù)據(jù)的數(shù)據(jù)流轉(zhuǎn)。采用本發(fā)明提供的方法,可以提高多源異構(gòu)數(shù)據(jù)流轉(zhuǎn)的效率,基于本發(fā)明技術(shù)所開發(fā)的Oracle數(shù)據(jù)驅(qū)動引擎NMSDE,其存儲與查詢效率測試均優(yōu)于ArcSDE。
附圖說明
圖1為本發(fā)明提供的基于Oracle數(shù)據(jù)庫的多源異構(gòu)空間數(shù)據(jù)流轉(zhuǎn)方法示意圖。
圖2為本發(fā)明的提供的基于Oracle的空間數(shù)據(jù)管理系統(tǒng)總體架構(gòu)示意圖。
圖3為本發(fā)明提出的Oracle全局?jǐn)?shù)據(jù)庫中統(tǒng)一矢量數(shù)據(jù)存儲結(jié)構(gòu)的關(guān)系表示意圖。
圖4為本發(fā)明提出的Oracle全局?jǐn)?shù)據(jù)庫中統(tǒng)一柵格數(shù)據(jù)存儲結(jié)構(gòu)示意圖;
圖5為本發(fā)明提出的Oracle全局?jǐn)?shù)據(jù)庫中統(tǒng)一柵格數(shù)據(jù)存儲結(jié)構(gòu)的關(guān)系表示意圖;
圖6為本發(fā)明提出的Oracle全局?jǐn)?shù)據(jù)庫中矢量空間數(shù)據(jù)查詢流程示意圖;
圖7為本發(fā)明提出的方法與ArcSDE的柵格數(shù)據(jù)存取效率對比示意圖,其中(a)為柵格數(shù)據(jù)入庫效率對比示意圖,(b)為柵格數(shù)據(jù)導(dǎo)出效率對比示意圖;
圖8為本發(fā)明提出的方法與ArcSDE的柵格數(shù)據(jù)查詢效率對比示意圖。
具體實施方式
下面結(jié)合具體實施方式對本發(fā)明的技術(shù)方案作進(jìn)一步詳細(xì)地說明。
請參閱圖1,一種基于Oracle數(shù)據(jù)庫的多源異構(gòu)空間數(shù)據(jù)流轉(zhuǎn)方法,包括基于Oracle的多源異構(gòu)空間數(shù)據(jù)存取方法和基于Oracle的多源異構(gòu)空間數(shù)據(jù)處理方法?;贠racle的多源異構(gòu)空間數(shù)據(jù)存取方法主要是針對數(shù)據(jù)的遷移、數(shù)據(jù)的出入庫以及數(shù)據(jù)的遠(yuǎn)程存取;基于Oracle的多源異構(gòu)空間數(shù)據(jù)處理方法主要是針對數(shù)據(jù)查詢、空間數(shù)據(jù)分析、空間數(shù)據(jù)操作等,以滿足上層數(shù)據(jù)應(yīng)用的需求,實現(xiàn)數(shù)據(jù)的查詢、分析和更新等。
所述基于Oracle的多源異構(gòu)空間數(shù)據(jù)存取方法,包括以下步驟:
步驟A1:數(shù)據(jù)管理層接收到數(shù)據(jù)應(yīng)用層數(shù)據(jù)請求后,由用戶數(shù)據(jù)請求處理模塊對數(shù)據(jù)請求進(jìn)行解析,明確請求的類型為數(shù)據(jù)存取請求,并獲得請求數(shù)據(jù)的基本信息(數(shù)據(jù)源的地址、數(shù)據(jù)類型、數(shù)據(jù)的存儲的目的地址、鏈接的信息等)和請求發(fā)起者的基本信息(用戶角色信息、訪問權(quán)限)等,將請求傳遞給用戶權(quán)限角色認(rèn)證模塊;
步驟A2:用戶權(quán)限角色認(rèn)證模塊對用戶角色進(jìn)行審核,對其數(shù)據(jù)的訪問權(quán)限進(jìn)行認(rèn)證,同時將驗證相關(guān)信息傳遞給日志管理模塊,記錄日志,驗證通過后轉(zhuǎn)入數(shù)據(jù)庫節(jié)點管理模塊;
步驟A3:數(shù)據(jù)庫節(jié)點管理模塊根據(jù)數(shù)據(jù)存儲的目的地址確定訪問的數(shù)據(jù)庫節(jié)點;
步驟A4:數(shù)據(jù)請求調(diào)度模塊查找空間數(shù)據(jù)緩存區(qū),發(fā)現(xiàn)數(shù)據(jù)未命中即未有請求的數(shù)據(jù),將數(shù)據(jù)請求發(fā)送至數(shù)據(jù)統(tǒng)一訪問口模塊;
步驟A5:數(shù)據(jù)統(tǒng)一訪問接口模塊根據(jù)數(shù)據(jù)源地址、數(shù)據(jù)類型,調(diào)用相應(yīng)的數(shù)據(jù)源驅(qū)動程序讀取多源異構(gòu)數(shù)據(jù),并通過空間數(shù)據(jù)轉(zhuǎn)換模塊進(jìn)行空間數(shù)據(jù)模型轉(zhuǎn)換,轉(zhuǎn)換為統(tǒng)一數(shù)據(jù)模型后,存入到數(shù)據(jù)緩沖區(qū)中;
步驟A6:數(shù)據(jù)預(yù)處理模塊對數(shù)據(jù)進(jìn)行簡單的質(zhì)檢,如檢查多邊形是否閉合、多邊形是否有交叉點、空間數(shù)據(jù)是否一致等;
步驟A7:數(shù)據(jù)統(tǒng)一訪問接口模塊將預(yù)處理后的數(shù)據(jù)通過空間數(shù)據(jù)存取模塊錄入到對應(yīng)的Oracle數(shù)據(jù)庫節(jié)點中,完成數(shù)據(jù)的存取。
其流程如圖1:1→2→3/4→5→11→6→8→6→11→9→11→6→3/7。
所述基于Oracle的多源異構(gòu)空間處理方法,包括以下步驟:
步驟B1:數(shù)據(jù)管理層接收到數(shù)據(jù)應(yīng)用層數(shù)據(jù)請求后,獲得請求數(shù)據(jù)的基本信息和數(shù)據(jù)用戶的基本信息等;
步驟B2:用戶權(quán)限角色認(rèn)證模塊對用戶角色和數(shù)據(jù)的訪問權(quán)限進(jìn)行認(rèn)證并記錄到日志管理模塊中;
步驟B3:數(shù)據(jù)庫節(jié)點管理模塊根據(jù)請求數(shù)據(jù)的基本信息確定訪問的數(shù)據(jù)庫節(jié)點信息;
步驟B4:數(shù)據(jù)請求調(diào)度模塊查找空間數(shù)據(jù)緩存區(qū),發(fā)現(xiàn)緩存區(qū)未有請求的數(shù)據(jù)將發(fā)起數(shù)據(jù)請求;
步驟B5:數(shù)據(jù)統(tǒng)一訪問接口模塊根據(jù)數(shù)據(jù)源地址、數(shù)據(jù)類型,通過數(shù)據(jù)庫操作模塊獲取所需數(shù)據(jù),存入到數(shù)據(jù)緩沖區(qū)中,并將訪問數(shù)據(jù)庫的操作信息寫入到日志管理;
步驟B6:空間數(shù)據(jù)處理模塊對數(shù)據(jù)進(jìn)行過濾、空間運算、分析等操作,獲得請求數(shù)據(jù)結(jié)果集存入到數(shù)據(jù)緩存區(qū),如果請求的是多個數(shù)據(jù)庫節(jié)點或多種數(shù)據(jù)類型時,如進(jìn)行多個圖層空間分析、矢量與柵格數(shù)據(jù)疊加分析等,還需進(jìn)行空間數(shù)據(jù)的預(yù)處理如空間坐標(biāo)轉(zhuǎn)換、數(shù)據(jù)校準(zhǔn)等,最終將處理結(jié)果放入到數(shù)據(jù)緩存中;
步驟B7:數(shù)據(jù)請求調(diào)度模塊將數(shù)據(jù)結(jié)果集返回至上層應(yīng)用,完成操作。
其流程如圖1:1→2→3/4→5→11→6→3/7→6→11→10/9→11→5。
所述基于Oracle數(shù)據(jù)庫的多源異構(gòu)空間數(shù)據(jù)流轉(zhuǎn)方法涉及全局Oracle數(shù)據(jù)庫與局部空間數(shù)據(jù)庫中的數(shù)據(jù)交換,其框架圖如圖2所示:
Oracle全局?jǐn)?shù)據(jù)庫接受用戶請求,空間數(shù)據(jù)引擎中的數(shù)據(jù)統(tǒng)一訪問接口根據(jù)數(shù)據(jù)源地址、數(shù)據(jù)類型,調(diào)用相應(yīng)的數(shù)據(jù)源驅(qū)動程序從局部空間數(shù)據(jù)庫中讀取多源異構(gòu)數(shù)據(jù),通過空間數(shù)據(jù)轉(zhuǎn)換接口將數(shù)據(jù)轉(zhuǎn)換為本發(fā)明提出的統(tǒng)一數(shù)據(jù)模型,進(jìn)行空間數(shù)據(jù)一致性檢查后,將處理后的數(shù)據(jù)錄入到Oracle數(shù)據(jù)庫中,完成數(shù)據(jù)的存取,整個過程對于用戶來說是透明的。
對數(shù)據(jù)進(jìn)行分析時,空間數(shù)據(jù)引擎對數(shù)據(jù)進(jìn)行過濾、空間運算、分析等操作,獲得請求數(shù)據(jù)結(jié)果集存入到數(shù)據(jù)緩存區(qū),如果請求的是多個數(shù)據(jù)庫節(jié)點或多種數(shù)據(jù)類型時,如進(jìn)行多個圖層空間分析、矢量與柵格數(shù)據(jù)疊加分析等,還需進(jìn)行空間數(shù)據(jù)的預(yù)處理如空間坐標(biāo)轉(zhuǎn)換、數(shù)據(jù)校準(zhǔn)等,最終將處理結(jié)果放入到數(shù)據(jù)緩存中。
步驟A5中,所述統(tǒng)一數(shù)據(jù)模型包括統(tǒng)一矢量數(shù)據(jù)存儲結(jié)構(gòu)和統(tǒng)一柵格數(shù)據(jù)存儲結(jié)構(gòu),統(tǒng)一矢量數(shù)據(jù)存儲結(jié)構(gòu)如圖3所示,統(tǒng)一柵格數(shù)據(jù)存儲結(jié)構(gòu)及模型如圖4/5所示。
如圖3所示,本發(fā)明提出的Oracle全局?jǐn)?shù)據(jù)庫中矢量數(shù)據(jù)存儲關(guān)系表包括元數(shù)據(jù)表、空間數(shù)據(jù)索引表、空間參考表等,下面分別介紹:
矢量數(shù)據(jù)的空間幾何信息在Oracle中存儲支持兩種方式:一種是以WKB的形式存儲在BLOB對象中;另一種是采用Oracle Spatial擴(kuò)展模塊,將空間幾何信息轉(zhuǎn)化為SDO_GEOMETRY對象進(jìn)行存儲。
因此,統(tǒng)一矢量數(shù)據(jù)存儲結(jié)構(gòu)包括基于BLOB對象存取方式的矢量數(shù)據(jù)存儲結(jié)構(gòu)和基于SDO_GEOMETRY對象存取方式的矢量數(shù)據(jù)存儲結(jié)構(gòu)。
如圖3所示,基于BLOB對象存取方式的矢量數(shù)據(jù)存儲結(jié)構(gòu)的關(guān)系表包括矢量元數(shù)據(jù)表、矢量空間索引表、矢量空間參考表和矢量空間數(shù)據(jù)表。
基于SDO_GEOMETRY對象存取方式的矢量數(shù)據(jù)存儲結(jié)構(gòu)的關(guān)系表包括空間元數(shù)據(jù)表(SDO_GEOM_METADATA)、空間坐標(biāo)系統(tǒng)表(SDO_COORD_SYSTEM)、空間索引信息表(SDO_INDEX_INFO)、空間索引元數(shù)據(jù)表(SDO_INDEX_METADATA)和矢量空間數(shù)據(jù)表,采用Oracle Spatial擴(kuò)展模塊管理矢量空間數(shù)據(jù)需要對SDO_GEOM_METADATA(空間元數(shù)據(jù)表)、矢量空間數(shù)據(jù)表進(jìn)行維護(hù)和操作,同時Oracle Spatial會自動維護(hù)SDO_INDEX_INFO(空間索引信息表)、SDO_INDEX_METADATA(空間索引元數(shù)據(jù)表)以及SDO_COORD_SYSTEM(空間坐標(biāo)系統(tǒng)表)等視圖。
空間元數(shù)據(jù)表主要描述圖層空間數(shù)據(jù)的空間幾何類型、維度、空間坐標(biāo)范圍、空間坐標(biāo)參考等基本信息,用于數(shù)據(jù)庫內(nèi)各空間數(shù)據(jù)基本信息的查詢;矢量空間數(shù)據(jù)表主要描述空間數(shù)據(jù)的屬性信息、空間幾何信息,是空間數(shù)據(jù)的實際載體,包含空間數(shù)據(jù)唯一標(biāo)識、各屬性字段、幾何信息字段;矢量空間索引表主要描述每個要素的唯一標(biāo)識和空間范圍,該邏輯關(guān)系表可以用作索引亦可用于創(chuàng)建四叉樹、R-Tree等空間索引或自定義索引,其包含空間數(shù)據(jù)唯一標(biāo)識以及每個要素的空間范圍;矢量空間參考表主要描述各種空間坐標(biāo)系的定義及描述,主要用于坐標(biāo)系統(tǒng)的轉(zhuǎn)換,以及空間數(shù)據(jù)坐標(biāo)的校準(zhǔn)和查詢,其包括SRID、坐標(biāo)系統(tǒng)類型、坐標(biāo)系統(tǒng)的定義。
本發(fā)明提出的,所述統(tǒng)一柵格數(shù)據(jù)存儲結(jié)構(gòu)如圖4所示:
結(jié)合柵格數(shù)據(jù)的特點以及在實際應(yīng)用中的需求,發(fā)明采用先按波段分層、再層內(nèi)分塊、最后構(gòu)建金字塔的思想,設(shè)計了具有支持多種柵格數(shù)據(jù)格式、易于遠(yuǎn)程存取、提取檢索快捷的邏輯存儲結(jié)構(gòu)。
所述統(tǒng)一柵格數(shù)據(jù)存儲結(jié)構(gòu)包括:提取柵格數(shù)據(jù)元數(shù)據(jù)信息,生產(chǎn)柵格元數(shù)據(jù)信息表;按照波段對柵格數(shù)據(jù)進(jìn)行抽取,并形成波段信息表;對每一波段進(jìn)行分塊,塊大小根據(jù)實際需求指定,一般默認(rèn)分塊為256×256像素大小,每一塊作為一個Blob字段數(shù)據(jù)存儲在柵格數(shù)據(jù)表中;根據(jù)實際需求選擇適當(dāng)?shù)闹夭蓸铀惴?,生成影像金字塔,形成金字塔信息表;對生成的金子塔?shù)據(jù)采取上述類似方法,先按照波段分層,同一波段內(nèi)再分塊,生成金字塔數(shù)據(jù)表。
所述統(tǒng)一柵格數(shù)據(jù)存儲結(jié)構(gòu)的關(guān)系表如圖5所示:
所述統(tǒng)一柵格數(shù)據(jù)存儲結(jié)構(gòu)的關(guān)系表包括柵格信息表、波段信息表、金字塔信息表、柵格數(shù)據(jù)表、金字塔數(shù)據(jù)表,其中,RASTER_ID作為柵格數(shù)據(jù)的唯一標(biāo)識,把相關(guān)表進(jìn)行關(guān)聯(lián)。其中,柵格信息表主要描述了柵格數(shù)據(jù)波段、像素、空間信息等元數(shù)據(jù)信息,便于對柵格數(shù)據(jù)的查詢、統(tǒng)計、存取以及格式轉(zhuǎn)換。金字塔信息表主要描述金字塔所屬波段號、金字塔級數(shù)以及構(gòu)建金子塔進(jìn)行塊采樣的大小等基本信息,主要用于金字塔信息的提取和查詢。柵格數(shù)據(jù)表主要描述柵格數(shù)據(jù)所屬的波段、所在波段中塊的位置、塊的空間范圍信息以及數(shù)據(jù)塊實體。金字塔數(shù)據(jù)表主要描述金字塔數(shù)據(jù)所屬波段、所屬級別、在該級別所屬塊位置、塊的空間范圍以及數(shù)據(jù)實體??梢钥闯觯景l(fā)明提出的柵格數(shù)據(jù)存儲模型較完備地存儲了柵格數(shù)據(jù)的基本信息,可以方便的抽取波段信息、快速查找定位空間范圍內(nèi)的柵格數(shù)據(jù)。
圖1步驟4中,所述“數(shù)據(jù)請求調(diào)度模塊”包括如圖6所示矢量數(shù)據(jù)查詢檢索流程及根據(jù)本發(fā)明所建立的統(tǒng)一柵格數(shù)據(jù)存儲結(jié)構(gòu)匹配的柵格數(shù)據(jù)查詢檢索流程。
對于空間數(shù)據(jù)的索引,Oracle Spatial提供了R-Tree索引機(jī)制,對空間數(shù)據(jù)具有良好的空間查詢能力。為了提高索引機(jī)制的可擴(kuò)展性和靈活性,同時兼顧以Blob和SDOGeometry存儲的情況,本發(fā)明設(shè)計了基于Oracle的二級索引機(jī)制,可以有效兼容不同存儲方式的空間數(shù)據(jù)檢索。
基于統(tǒng)一矢量數(shù)據(jù)存儲結(jié)構(gòu)的矢量數(shù)據(jù)查詢檢索方法,包括以下步驟:
步驟C1:對于基于BLOB對象存取方式的矢量數(shù)據(jù)存儲結(jié)構(gòu)的空間數(shù)據(jù),建立空間索引后,能夠直接對BLOB對象進(jìn)行精確的空間查詢;
步驟C2:對于基于SDO_GEOMETRY對象存取方式的矢量數(shù)據(jù)存儲結(jié)構(gòu)的空間數(shù)據(jù),首先對矢量空間索引表或是建立的索引文件,對最小包圍框(Minimizing BoundingRectangle,MBR)進(jìn)行空間查詢,初步篩選出FID結(jié)果集;
步驟C3:根據(jù)初步篩選出的FID結(jié)果集,去數(shù)據(jù)庫提取對應(yīng)要素;
步驟C4:對提取的要素與空間過濾條件進(jìn)行空間幾何運算,進(jìn)行幾何關(guān)系的精確查詢,得出滿足空間過濾條件的最終結(jié)果。
基于統(tǒng)一柵格數(shù)據(jù)存儲結(jié)構(gòu)的柵格數(shù)據(jù)查詢檢索方法,包括以下步驟:
步驟D1:根據(jù)柵格數(shù)據(jù)大小及柵格的地理范圍,計算柵格數(shù)據(jù)的cell(單個像素代表的實際地理范圍)大小。
步驟D2:根據(jù)請求的地理坐標(biāo)范圍,計算當(dāng)前請求柵格數(shù)據(jù)的大小。
其中,reqx、reqy分別表示請求的柵格數(shù)據(jù)的長度和寬度(柵格像素數(shù)),filterminx、filtermaxx、filterminy、filtermaxy表示請求的地理范圍的最小x坐標(biāo)值、最大x坐標(biāo)值、最小y坐標(biāo)值、最大y坐標(biāo)值,cellx,celly分別表示柵格數(shù)據(jù)一個像素點能夠表示的地理坐標(biāo)x維度的大小和y維度的大小。
步驟D3:計算當(dāng)前視窗范圍內(nèi)的比例尺scale,找到與比例尺最近一級金字塔級別i。
其中,scale是當(dāng)前視窗比例尺,winx、winy分別為當(dāng)前視窗的寬和高度(屏幕像素數(shù)),pyramidi為第i級金字塔的比例尺,S為各級金字塔比例尺集合,level為金字塔級別總數(shù),pyramidmin為最接近scale的一級的金字塔的比例尺。
步驟D4:根據(jù)金字塔級別,查找該級金字塔在某一波段內(nèi)塊的位置。
其中,blockx、blocky分別表示柵格數(shù)據(jù)某一波段中切割塊的長度和寬度(柵格像素數(shù)),tileminx、tileminy、tilemaxx、tilemaxy分別為所請求的塊號的最小行號、最小列號、最大行號、最大列號,reqminx、reqminy、reqmaxx、reqmaxy分別標(biāo)識請求的地理范圍的最小x坐標(biāo)值、最小y坐標(biāo)值、最大x坐標(biāo)值、最大y坐標(biāo)值,imgminx、imgminy分別表示柵格數(shù)據(jù)地理范圍的最小x坐標(biāo)值、最小y坐標(biāo)值。
步驟D5:按照塊號請求數(shù)據(jù)后,對柵格邊界的塊進(jìn)行塊內(nèi)查找,得到最終查詢的柵格數(shù)據(jù)實體,本發(fā)明不再贅述。
實施案例
申請人基于NewMap軟件空間數(shù)據(jù)庫引擎API,利用上述技術(shù)開發(fā)了Oracle數(shù)據(jù)驅(qū)動引擎(以下稱為NewMap SDE,簡稱NMSDE),空間數(shù)據(jù)的幾何信息采用SDO_GEOMETRY對象存儲,與ArcSDE(空間數(shù)據(jù)幾何信息采用ST_GEOMETRY對象存儲)在相同的計算機(jī)(CPU 8核3.6GHz、4G內(nèi)存、100M以太網(wǎng)卡)、相同的網(wǎng)絡(luò)帶寬(百兆以太網(wǎng))、相同的Oracle數(shù)據(jù)庫服務(wù)器(CPU 8核2.40GHz、16G內(nèi)存、100M以太網(wǎng)卡)下進(jìn)行存儲與查詢效率測試。
試驗數(shù)據(jù)采用OpenStreetMap(OSM)提供的2016年3月、亞洲地區(qū)日本、格式為Shapefile的矢量數(shù)據(jù),數(shù)據(jù)大小3.29GB,共8個圖層,其中點圖層2個,線和面圖層各3個;柵格數(shù)據(jù)采用的是3個波段18915×15772的TIFF格式影像數(shù)據(jù)TIFF01(0.874GB)、3個波段21340×26284的IMG格式影像數(shù)據(jù)IMG01(1.653GB)和1個波段的30994×72079的TIFF格式的影像數(shù)據(jù)TIFF02(2.182GB),測試結(jié)果如下所示。
表1矢量數(shù)據(jù)存取效率對比
從表1中可以看出,NMSDE對矢量數(shù)據(jù)的存取效率整體要優(yōu)于ArcSDE,特別是數(shù)據(jù)量越大,如線數(shù)據(jù)(roads)、面數(shù)據(jù)(buildings),NMSDE導(dǎo)入數(shù)據(jù)效率優(yōu)勢越明顯。對于柵格數(shù)據(jù)導(dǎo)出,本發(fā)明基于NewMap數(shù)據(jù)引擎API,通過SQL語句分批將SDOGeometry對象讀出,利用NewMap數(shù)據(jù)庫引擎將其轉(zhuǎn)換成NewMap所需內(nèi)存幾何對象,直接導(dǎo)出到Shape文件中,可以看出NMSDE效率略優(yōu)于ArcSDE。
對于柵格數(shù)據(jù)的導(dǎo)入效率,本發(fā)明分別采用了128×128、256×256、512×512塊大小(像素大小)對柵格數(shù)據(jù)進(jìn)行分割導(dǎo)入,在導(dǎo)入過程中均未生成金字塔,并且對數(shù)據(jù)未進(jìn)行任何壓縮(在實際應(yīng)用過程中,可針對用戶需求對數(shù)據(jù)進(jìn)行有損或無損壓縮),其中ArcSDE不支持512×512分塊大小,本發(fā)明未對此種情況進(jìn)行測試。從圖7a中可以看出,NMSDE的柵格數(shù)據(jù)導(dǎo)入效率優(yōu)于ArcSED,并且隨著分塊大小的遞增,入庫效率也有明顯提升,如512×512分塊優(yōu)于256×256分塊、256×256分塊優(yōu)于128×128分塊。對于柵格數(shù)據(jù)導(dǎo)出效率測試,如圖7b所示,在相同分塊大小的情況下,ArcSDE性能略優(yōu),主要原因是ArcSDE對柵格數(shù)據(jù)進(jìn)行了壓縮,數(shù)據(jù)傳輸量明顯減少,但是當(dāng)NMSDE采用分塊大小為512×512時效率最好,原因是隨著柵格數(shù)據(jù)分塊的遞增,單次SQL通信過程中數(shù)據(jù)傳輸量增大,減少了與數(shù)據(jù)庫通信次數(shù),降低了通信代價。
對于空間數(shù)據(jù)的查詢效率測試。本發(fā)明對空間數(shù)據(jù)選取同一地理范圍內(nèi)的數(shù)據(jù),分別對NMSDE和ArcSDE進(jìn)行測試。如表2所示,對于矢量數(shù)據(jù)查詢效率NMSDE略優(yōu)于ArcSDE,如圖8所示,對于柵格數(shù)據(jù)查詢效率NMSDE優(yōu)于ArcSDE,并隨著分塊大小的遞增效率越高,在分塊大小為512×512時,效率最高。
表2矢量數(shù)據(jù)查詢效率對比
本發(fā)明將成熟的關(guān)系數(shù)據(jù)庫空間數(shù)據(jù)存儲與空間數(shù)據(jù)庫引擎技術(shù)結(jié)合,通過建立一體化的矢量、柵格數(shù)據(jù)存儲模型并優(yōu)化空間數(shù)據(jù)檢索機(jī)制,集成整合分布式存儲的各空間數(shù)據(jù)庫中的空間數(shù)據(jù),實現(xiàn)多源異構(gòu)數(shù)據(jù)的數(shù)據(jù)流轉(zhuǎn)?;诒景l(fā)明技術(shù)所開發(fā)的Oracle數(shù)據(jù)驅(qū)動引擎NMSDE,其存儲與查詢效率測試均優(yōu)于ArcSDE。
上面對本發(fā)明的較佳實施方式作了詳細(xì)說明,但是本發(fā)明并不限于上述實施方式,在本領(lǐng)域的普通技術(shù)人員所具備的知識范圍內(nèi),還可以在不脫離本發(fā)明宗旨的前提下作出各種變化。