空间数据引擎oracle_GIS 与Oracle 数据库空间数据格式的转换
近幾十年來(lái),由于社會(huì)應(yīng)用需求的增長(zhǎng)和多年研究工作的積累,地理信息系統(tǒng)(GIS)技術(shù)有了明顯的進(jìn)步,正朝著跨平臺(tái)運(yùn)行、分布式處理、開(kāi)放式開(kāi)發(fā)、網(wǎng)絡(luò)化集成的方向發(fā)展。從空間數(shù)據(jù)管理角度看,GIS 已經(jīng)從純文件方式管理圖形數(shù)據(jù)和屬性數(shù)據(jù)向圖形數(shù)據(jù)文件方式管理和屬性數(shù)據(jù)關(guān)系型數(shù)據(jù)庫(kù)管理方式發(fā)展。然而由于GIS 的圖形數(shù)據(jù)格式多樣,圖形數(shù)據(jù)用文件來(lái)管理的模式給信息共享帶來(lái)了極大不便,特別是隨著GIS 應(yīng)用領(lǐng)域的不斷拓寬,數(shù)據(jù)量的快速增大,在實(shí)現(xiàn)數(shù)據(jù)共享、網(wǎng)絡(luò)通信、并發(fā)控制及數(shù)據(jù)安全恢復(fù)機(jī)制等方面呈現(xiàn)出明顯局限,出現(xiàn)了諸多難以解決的問(wèn)題。
目前,大多數(shù)GIS 軟件都逐漸傾向于采用空間數(shù)據(jù)與屬性數(shù)據(jù)一體化的管理方式,而且選用Oracle 數(shù)據(jù)庫(kù)作為存儲(chǔ)空間數(shù)據(jù)和屬性數(shù)據(jù)的數(shù)據(jù)庫(kù)管理系統(tǒng),特別是Oracle 推出Spatial 之后,基于Oracle Spatial 的空間數(shù)據(jù)管理方式逐漸被認(rèn)同[1]。然而,由于各個(gè)不同的GIS 軟件的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)是封閉的,各自采用不同的數(shù)據(jù)格式,在數(shù)據(jù)上載Oracle Spatial 中存在數(shù)據(jù)語(yǔ)義表達(dá)的不一致性,彼此之間難以實(shí)現(xiàn)數(shù)據(jù)互訪,并且用戶又難以控制,本文針對(duì)這一問(wèn)題以MAPGIS 平臺(tái)和Oracle 數(shù)據(jù)庫(kù)為例探討GIS 軟件與Oracle 數(shù)據(jù)庫(kù)數(shù)據(jù)交換的方法。
2 MAPGIS 明碼格式
MAPGIS 的明碼格式數(shù)據(jù)接口是一個(gè)開(kāi)放式的軟件數(shù)據(jù)接口,用戶用其他軟件獲取的數(shù)據(jù)只要按照明碼格式寫(xiě)成圖形文件,就可以由MAPGIS 系統(tǒng)讀取。其明碼數(shù)據(jù)格式是ASCII 碼的文件,較全面、清晰,且以點(diǎn)、線、面分開(kāi)的方式存儲(chǔ)空間實(shí)體,易于讀寫(xiě)。下面以線文件為例,分析其明碼數(shù)據(jù)格式的構(gòu)成。線文件結(jié)構(gòu)如下:
邏輯結(jié)構(gòu):文件頭 線數(shù) 1 號(hào)線 2 號(hào)線......
具體為:
文件頭, 8 個(gè)字節(jié)WMAP9021
線數(shù)n
1號(hào)線線型號(hào)輔助線型號(hào)顏色
線寬x系數(shù)y系數(shù)輔助色
圖層透明輸出
線點(diǎn)數(shù)m1
x x1y1; x2y2;…; xm1ym1
ID 線長(zhǎng)度
2號(hào)線線型號(hào)輔助線型號(hào)顏色
線寬x系數(shù)y系數(shù)輔助色
圖層透明輸出
線點(diǎn)數(shù)m2
x x1 y1; x2y2; …; xm2 ym2
ID 線長(zhǎng)度
……
n號(hào)線線型號(hào)輔助線型號(hào)顏色
線寬x系數(shù)y系數(shù)輔助色
圖層透明輸出
線點(diǎn)數(shù)mn
x1 y1; x2y2; …; xmn ymn
ID 線長(zhǎng)度
3 Oracle Spatial 數(shù)據(jù)結(jié)構(gòu)
在Oracle Spatial 的對(duì)象—關(guān)系模型中,一個(gè)空間實(shí)體的空間信息是存儲(chǔ)在字段類(lèi)型為SDO_EOMETRY 的對(duì)象類(lèi)型記錄中。SDO_ GEOMETRY 在
Oracle 中的定義如下:
CREATE TYPE SDO_GEOMETRY AS OBJECT(
SDO_GTYPE NUMBER,
SDO_SRID NUMBER,
SDO_POINT SDO_POINT_TYPE,
SDO_ELEM_INFO
MDSYS.SDO_ELEM_INFO_ARRAY,
SDO_ORDINATES
MDSYS.SDO_ORDINATE_ARRAY);
在MAPGIS 明碼數(shù)據(jù)上載Oracle Spatial 之前,先在Oracle 中建立與MAPGIS 明碼格式相一致的空間類(lèi)型信息和圖形屬性信息庫(kù)結(jié)構(gòu),見(jiàn)表1 所示:
表1 線信息數(shù)據(jù)庫(kù)結(jié)構(gòu)
名稱(chēng)數(shù)據(jù)類(lèi)型含義名稱(chēng)數(shù)據(jù)類(lèi)型含義
Line_ID GUID 線對(duì)象代碼Line_WD int 線寬
Line_xy GEOMETRY 坐標(biāo)序列Line_X float x 系數(shù)
Line_TID Int 線型號(hào)Line_Y float y 系數(shù)
Line_TFID Int 輔助線型號(hào)Line_CLR int 輔助色
Line_CL Int 顏色Line_OUT log 透明輸出
Line_LAY char 圖層Line_LEG float 周長(zhǎng)
4 空間數(shù)據(jù)引擎實(shí)現(xiàn)方法
4.1 基本過(guò)程
目前,各類(lèi)專(zhuān)題空間數(shù)據(jù)庫(kù)建立的過(guò)程包括技術(shù)設(shè)計(jì)、資料準(zhǔn)備、數(shù)據(jù)獲取和數(shù)據(jù)入庫(kù)等內(nèi)容。數(shù)據(jù)的獲取常可利用現(xiàn)有的GIS 軟件如GeoStar、MAPGIS、SUPERMAP、ARCGIS 等來(lái)實(shí)現(xiàn),獲得的數(shù)據(jù)通過(guò)某一空間數(shù)據(jù)引擎(如Easyloader)上載到Oracle 數(shù)據(jù)庫(kù)中,實(shí)現(xiàn)利用Oracle Spatial 存儲(chǔ)、管理空間數(shù)據(jù)。MAPORA 引擎是把MAPGIS 的明碼格式通過(guò)編程實(shí)現(xiàn)空間數(shù)據(jù)上載Oracle Spatial 的一種方法,其具體過(guò)程如圖1 所示[2]:
4.2 實(shí)現(xiàn)程序代碼
1)利用Oracle JDBC 驅(qū)動(dòng)程序連接Oracle 數(shù)據(jù)庫(kù)。其java 程序段如下:
myconnection=DriverManager.getConnection(
“jdbc:oracle:thin:@localhost:1521:orcl”,
“scott”
“tiger”);
2)使用CREATE 語(yǔ)句創(chuàng)建數(shù)據(jù)庫(kù)表單:
CREATE TABLE F001B (
Point_id INTEGER CONSTRAINT PRIMARY
KEY,
Point_xy MDSYS.SDO_GEOMETRY,
file://坐標(biāo)對(duì)字段的定義
Point_TID INTEGER,
file://線型號(hào)字段的定義
Point_TFID INTEGER,
file://輔助線型號(hào)字段的定義
......);
3)讀取MAPGIS 明碼格式后,寫(xiě)入Oracle 數(shù)據(jù)庫(kù)中:
INSERT INFO F001B VALUES(
1,
MDSYS.SDO_GEOMETRY(
SDO_GTYPE = 2001
SDO_SRID= NULL
SDO_POINT = (1,1,NULL)
SDO_ELEM_INFO = NULL
SDO_ORDINATES = NULL)
12,
20,
......);
超強(qiáng)干貨來(lái)襲 云風(fēng)專(zhuān)訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的空间数据引擎oracle_GIS 与Oracle 数据库空间数据格式的转换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 自动超频_AMD自动超频工具问世:让ZE
- 下一篇: add-apt-repository:找