王雪嬌 宋學(xué)山 柴志勇 劉金玉
中水北方勘測設(shè)計研究有限責(zé)任公司,中國·天津 300222
Oracle Spatial;Geodatabase;地籍;入庫
空間數(shù)據(jù)的存儲與管理往往是GIS 研究的重點,比較常用的空間數(shù)據(jù)存儲機制是ESRI 公司提供的面向?qū)ο蟮腉eodatabase 的空間存儲方案,這種空間存儲方式將客觀世界的實體對象抽象化實現(xiàn)對空間數(shù)據(jù)的存儲,Geodatabase 能夠很好的再現(xiàn)客觀地理實體對象的特點,[4]但是Geodatabase 空間數(shù)據(jù)模型實際處于邏輯概念模型階段,實際應(yīng)用中對空間數(shù)據(jù)的存儲依然是將屬性與規(guī)則分解進行存儲的。本文以O(shè)racle Spatial 為空間數(shù)據(jù)庫,分析其數(shù)據(jù)模型特點并結(jié)合Geodatabase 數(shù)據(jù)模型搭建語義映射轉(zhuǎn)換模型,實現(xiàn)空間數(shù)據(jù)的入庫預(yù)加載。
甲骨文(Oracle)為實現(xiàn)空間數(shù)據(jù)的存儲于管理的方式是他們推出了Oracle Spatial 數(shù)據(jù)庫組件。Oracle Spatial 由以下幾個部分組成:(1)規(guī)定了支持的各種空間數(shù)據(jù)(包括矢量數(shù)據(jù)和柵格數(shù)據(jù))幾何類型規(guī)范、元數(shù)據(jù)語義和存儲方法函數(shù)的模塊(MDSYS);(2)空間索引機制;(3)用于執(zhí)行興趣區(qū)域查詢、空間連接查詢和其他空間分析操作的操作符、函數(shù)和過程;(4)用于表示在網(wǎng)絡(luò)中建模為節(jié)點和鏈接的功能或?qū)ο蟮木W(wǎng)絡(luò)數(shù)據(jù)模型;(5)用于處理拓撲中節(jié)點、邊和面的數(shù)據(jù)的拓撲數(shù)據(jù)模型[1]。
Oracle Spatial 是由一組對象數(shù)據(jù)類型、方法以及使用這些類型的運算符,函數(shù)和過程組成的數(shù)據(jù)庫組件,最新版本的Oracle Spatial 的矢量空間數(shù)據(jù)模型只有對象數(shù)據(jù)模型(SDO_Geometry)。空間索引創(chuàng)建和維護使用基本的DDL(CREATE,ALTER,DROP) 和DML(INSERT,UPDATE,DELETE)語句完成。
Oracle Spatial 旨在使位置啟用的應(yīng)用程序和地理信息系統(tǒng)(GIS)應(yīng)用程序的用戶更輕松,更自然地進行空間數(shù)據(jù)管理。一旦將空間數(shù)據(jù)存儲在Oracle 數(shù)據(jù)庫中,便可輕松操作,檢索數(shù)據(jù),并將其與存儲在數(shù)據(jù)庫中的所有其他數(shù)據(jù)相關(guān)聯(lián)。
Oracle Spatial 擺脫了以序列化的二進制實現(xiàn)空間數(shù)據(jù)存儲的方式,采用一個MDSYS 模塊,定義了一些結(jié)構(gòu)化類型來實現(xiàn)幾何空間數(shù)據(jù)的存儲于管理。MDSYS 定義了很多空間存儲類型,比如,用于存儲Shapefile 等矢量數(shù)據(jù)格式的SDO_GEOMETRY 類型和用于存儲影像等柵格數(shù)據(jù)類型的SDO_RASTER 類型。
客觀世界的地理實體對象的幾何描述(空間參考、幾何坐標(biāo)、幾何類型等信息)會作為對象存儲在Oracle Spatial中MDSYS 模塊的矢量數(shù)據(jù)對象的數(shù)據(jù)類型(比如SDO_GEOMETRY)當(dāng)中。任何具有SDO_GEOMETRY 類型列的表都必須具有另一列或一組列,這些列或表定義了該表的唯一主鍵。這種表格有時被稱為空間表格或空間幾何表格。SDO_GEOMETRY 類型是空間數(shù)據(jù)在Oracle Spatial 存儲的關(guān)鍵所在,其中SDO_GEOMETRY 類型定義如下:
CREATE TYPE sdo_geometry AS OBJECT(
SDO_GTYPE NUMBER,//幾何數(shù)據(jù)類型標(biāo)識
SDO_SRID NUMBER,//空間坐標(biāo)系統(tǒng)標(biāo)識
SDO_POINT SDO_POINT_TYPE,//單點幾何數(shù)據(jù)類型
SDO_ELEM_INFO SDO_ELEM_INFO_ARRAY// 坐標(biāo)點的排列方式
SDO_ORDINATES SDO_ORDINATE_ARRAY)// 坐標(biāo)點集合;
Geodatabase(地理數(shù)據(jù)庫)數(shù)據(jù)模型是在汲取以往數(shù)據(jù)模型工作成果的基礎(chǔ)上,采用面向?qū)ο笏枷胩岢龅倪m合關(guān)系數(shù)據(jù)庫管理系統(tǒng)的空間數(shù)據(jù)模型[3]。在Geodatabase 中,每一個對象都定義了一個組件,允許用戶在這些基本數(shù)據(jù)模型的基礎(chǔ)上擴展自己的面向?qū)ο竽P?。Geodatabase 利用面對對象理論,將現(xiàn)實客觀世界共同特征抽象成Object Class(對象類)、Feature Class(要素類)、Relationship Class(關(guān)系類)和Feature Dataset(要素數(shù)據(jù)集)實現(xiàn)對地理實體對象的存儲和管理。地理實體對象一般包括空間數(shù)據(jù)和非空間數(shù)據(jù),在Geodatabase中,對象類通過表(Table)實現(xiàn)非空間數(shù)據(jù)的存儲和管理;如圖1所示,Geodatabase 將幾何對象的數(shù)據(jù)和屬性通過要素進行存儲,而具有同一類要素的集合被稱為要素類;當(dāng)不同的要素類之間存在某種聯(lián)系時,可以通過要素數(shù)據(jù)集來組織和管理這些要素類,而不同要素之間的關(guān)聯(lián)關(guān)系則用關(guān)系類描述[2]。
圖1 Geodatabase 的數(shù)據(jù)組織結(jié)構(gòu)
Geodatabase 提供了Workspace(工作空間)充當(dāng)空間數(shù)據(jù)和非空間數(shù)據(jù)的臨時容器,并提供了實例化現(xiàn)有數(shù)據(jù)集和創(chuàng)建新的數(shù)據(jù)集的方法。如圖2所示,Geodatabase 可以利用Workspace 接口操作不同數(shù)據(jù)類型的Workspace Factory(工作空間工廠)實現(xiàn)對不同數(shù)據(jù)格式的空間數(shù)據(jù)的存儲和管理。比較常見的工作空間工廠有操作CAD 格式數(shù)據(jù)的CAD Workspace Factory、操作Shape file 格式數(shù)據(jù)的Shape file Workspace Factory、操作SDE 數(shù)據(jù)庫空間數(shù)據(jù)的SDE Workspace Factory和操作coverage 矢量數(shù)據(jù)的ARC Info Workspace Factory。
圖2 利用Workspace 實現(xiàn)對不同ArcGIS 數(shù)據(jù)的操作
Geodatabase 不只是存儲地理實體對象的空間數(shù)據(jù)和屬性數(shù)據(jù),還將客觀世界的地理實體對象的行為、關(guān)系和拓撲規(guī)則引入到地理要素中,盡最大可能的模仿現(xiàn)實客觀地理要素對象。使得地理實體對象在空間數(shù)據(jù)庫的存儲不再是簡單的點、線、面幾何對象, 而更加接近人類對現(xiàn)實客觀世界的表達。而且Geodatabase 具備面向?qū)ο蟮目衫^承性和多態(tài)性,用戶可以基于已有的數(shù)據(jù)模型對象進行拓展構(gòu)建出符合自身需求的數(shù)據(jù)對象。但是Geodatabase 空間數(shù)據(jù)模型實際處于邏輯概念模型階段,實際應(yīng)用中對空間數(shù)據(jù)的存儲依然是將屬性與規(guī)則分解進行存儲的。
客觀地理實體中,每一種地理要素被稱為要素類,要素類中通過屬性表的方式存儲地理實體的空間數(shù)據(jù)和非空間數(shù)據(jù)的,而地理實體中的單個要素對象就是要素類屬性表中的一條記錄轉(zhuǎn)換到Oracle Spatial 中也是關(guān)系表中的一行數(shù)據(jù)。所以,Oracle Spatial 與Geodatabase 的語義映射過程實質(zhì)上就是要素類屬性表結(jié)構(gòu)向Oracle Spatial 空間數(shù)據(jù)表結(jié)構(gòu)的轉(zhuǎn)換。在建立Oracle Spatial 與Geodatabase 的語義建模過程一般包括:幾何類型的語義映射、空間坐標(biāo)系的語義映射和字段類型的語義映射,如圖3所示。
圖3 Oracle Spatial 與Geodatabase 的語義轉(zhuǎn)換模型
Geodatabase 的要素具有:幾何形狀、屬性、行為和關(guān)系等特性。要素具有表示幾何形狀和空間位置的特殊字段,名稱為“SHAPE”,字段類型為“Geometry”。ArcGIS 地理實體的幾何類型是通過esri Geometry Type 描述的。而Geodatabase 的幾何要素一般為點、線、面、多點(屬性相同的一組點的無序集合)和多面體。Oracle Spatial 通過SDO_Geometry 對象數(shù)據(jù)類型存儲空間對象的幾何描述(空間坐標(biāo)參考、坐標(biāo)點信息和幾何類型形狀),如表1所示,Oracle Spatial支持的點狀幾何類型(2001)映射到Geodatabase 的點要素對象(esri Geometry Point);Oracle Spatial 中的由直線或曲線組成的多義線(2002)映射到Geodatabase的線狀要素對象(esri Geometry Polyline);Oracle Spatial 中的由直線或曲線組成的封閉多邊形(2002)映射到Geodatabase 的線狀要素對象(esri Geometry Polygon)。
表1 SDO_GType 與esri Geometry Type 對照表
要素的幾何形狀是由一組結(jié)構(gòu)化的x,y,z 坐標(biāo)存儲的,這些坐標(biāo)通過空間坐標(biāo)系統(tǒng)與地球?qū)嶋H形狀相關(guān)聯(lián)。其中,地理坐標(biāo)系是描述地理空間實體對象在理想化的地球橢球面上的位置的坐標(biāo)系統(tǒng)(用B,L,H 表示);而投影坐標(biāo)系就是按照一定的投影方式(如高斯-克呂格投影)將地球橢球面轉(zhuǎn)換成二維平面并加上高程所形成的三維坐標(biāo)系統(tǒng)(用x,y,z 表示)。Geodatabase 和Oracle Spatial 一般采用文本標(biāo)志語言WKT(well-known text)記錄坐標(biāo)系的中的元素信息(地球橢球,投影參數(shù)等信息),Geodatabase 都為每一個坐標(biāo)系的確定一個唯一的WKID(Well-Know ID)值,而Oracle Spatial 通過定義一個唯一標(biāo)識SDO_SRID 存儲坐標(biāo)信息。
Oracle Spatial 將現(xiàn)有的比較常見的地理坐標(biāo)系和投影坐標(biāo)系的相關(guān)信息都定義到SDO_COORD_REF_SYSTEM 表,且表中存儲SDO_SRID 屬性數(shù)值的SRID 具有唯一性。通過查詢此表可以獲得Oracle Spatial 坐標(biāo)系的SDO_SRID 的值,Geodatabase 也可以通過數(shù)據(jù)框?qū)傩灾械淖鴺?biāo)系獲得WKID 的值,將查詢結(jié)果進行對比得到表2和表3。
4.2.1 地理坐標(biāo)系的語義轉(zhuǎn)換
以中國常用的地理坐標(biāo)系為例查詢和對比WKID 和SDO_SRID 的值得到表2,通過表2可知,這些地理坐標(biāo)系的WKID 值和Oracle Spatial 的SDO_SRID 有一定的關(guān)系但不是完全相等對應(yīng)關(guān)系,而和Oracle Spatial 存儲空間參考信息的表中SOURCE_GEOG_SRID(下面簡稱S_SRID)列的值是對應(yīng)相等的。所以地理坐標(biāo)系的語義轉(zhuǎn)換,可以根據(jù)Geodatabase 的WKID 和Oracle Spatial 空間參考表中的S_SRID 列實現(xiàn)。
表2 常用地理坐標(biāo)系的WKID 和SDO_SRID 的值
中國常用的投影坐標(biāo)系一般是在地理坐標(biāo)系的基礎(chǔ)上經(jīng)過高斯-克呂格投影按照不同的分帶方式投影得到的。不同地區(qū)不同經(jīng)緯度下的投影坐標(biāo)系不盡相同,所以同一地理坐標(biāo)系下的投影坐標(biāo)系種類相對較多。本文對中國常用的地理坐標(biāo)系下對應(yīng)的投影坐標(biāo)系隨機抽取幾個相對應(yīng)的WKID 值并與Oracle Spatial的SDO_Srid的值進行對比得到如表3所示,通過表3發(fā)現(xiàn),投影坐標(biāo)系的WKID 的值與Oracle Spatial 的SDO_SRID 的值是對應(yīng)相等的關(guān)系,所以投影坐標(biāo)系可以通過WKID 和SDO_SRID 的值實現(xiàn)Oracle Spatial 向Geodatabased 的空間坐標(biāo)系映射轉(zhuǎn)換。
表3 常用投影坐標(biāo)系的WKID 和SDO_SRID 的值
4.2.3 自定義坐標(biāo)系的語義轉(zhuǎn)換
Oracle Spatial 和Geodatabase 的空間坐標(biāo)系大多都是基于EPSG 維護和發(fā)布的空間坐標(biāo)參數(shù)數(shù)據(jù)集?;贓PSG 標(biāo)準(zhǔn)的空間坐標(biāo)系雖然可以滿足基本用戶的使用,但對于一些特殊的情況往往需要創(chuàng)建自定義坐標(biāo)系。關(guān)于自定義坐標(biāo)系Oracle Spatial 和Geodatabase 對于空間參考的描述不僅相同,但它們的坐標(biāo)系的都是基于WKT 的,所以可以以WKT 為橋梁,實現(xiàn)Oracle Spatial 和Geodatabase 自定義坐標(biāo)系的語義轉(zhuǎn)換。
Oracle Spatial 于非空間數(shù)據(jù)類型和Oracle 數(shù)據(jù)庫的類型一樣。Oracle 支持的基本數(shù)據(jù)類型一般有字符串類型(CHAR,VarChar2),數(shù)值類型(NUMBER)、日期類型(Date,TimeStamp)和LOB 類型(用于存儲大數(shù)據(jù))。Geodatabase是通過字段存儲屬性數(shù)據(jù)和空間數(shù)據(jù)的,字段的數(shù)據(jù)類型使用枚舉類型esriFieldType 表示。將Oracle 的基本數(shù)據(jù)類型與Geodatabase 的枚舉類型esriFieldType 進行對比得到如表4所示,通過此表可以知道Geodatabase 的字段數(shù)據(jù)類型與Oracle基本數(shù)據(jù)類型的對應(yīng)關(guān)系,并實現(xiàn)Geodatabase 與Oracle 的字段類型語義轉(zhuǎn)換。
表4 Geodatabase 字段類型與Oracle 基本數(shù)據(jù)類型對照表
以某地區(qū)的地籍權(quán)屬數(shù)據(jù)為例,結(jié)合ArcGIS Engine 的二次開發(fā)技術(shù),開發(fā)地籍增量更新模型系統(tǒng),并利用Oracle Spatial 和Geodatabase 的語義映射轉(zhuǎn)換模型實現(xiàn)地籍增量過程中的地籍權(quán)屬數(shù)據(jù)的入庫和加載。模型系統(tǒng)的主界面如圖4所示。
圖4 程序主界面
地籍權(quán)屬數(shù)據(jù)一般是一種屬性數(shù)據(jù)與空間數(shù)據(jù)分離的CAD 數(shù)據(jù),本次實驗中所用到的地籍權(quán)屬數(shù)據(jù)時DGN 格式的矢量權(quán)屬數(shù)據(jù),可以通過FME 數(shù)據(jù)轉(zhuǎn)換技術(shù)將DGN 格式的權(quán)屬數(shù)據(jù)轉(zhuǎn)換為屬性空間一體化的Shape file 格式的數(shù)據(jù),并通過Oracle Spatial 與Geodatabase 語義映射轉(zhuǎn)換模型將地籍權(quán)屬數(shù)據(jù)導(dǎo)入到Oracle Spatial 空間數(shù)據(jù)庫中。地籍增量過程一般分宗地新增、宗地合并、宗地滅失、宗地分割和宗地公共邊界調(diào)整五種變更方式。每一種的變更過程中都會涉及到地籍權(quán)屬數(shù)據(jù)的入庫和加載,通過Oracle Spatial 和Geodatabase 語義映射轉(zhuǎn)換模型能夠直接操作Oracle Spatial 中不同時間段的地籍權(quán)屬數(shù)據(jù)實現(xiàn)地籍增量更新過程。通過本次實驗可以表明該模型能夠?qū)崿F(xiàn)點、線、面Shape file 格式的地籍權(quán)屬數(shù)據(jù)向Oracle Spatial 空間數(shù)據(jù)庫的入庫與加載。