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