GIS 與Oracle 數據庫空間數據格式的轉換
1 概述
近幾十年來,由于社會應用需求的增長和多年研究工作的積累,地理信息系統(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,
......);
5 數據應用
目前,雖然GIS 軟件產品較多,但由于GIS 應用于各行各業,不可能解決所有的專業問題,還必須根據用戶的實際需要進行開發,例如MapInfo 公司提供的MapBasic、MapX,ESRI 公司提供的AVENUE、ArcObjects 等語言和開發組件都方便用戶進行二次開發。
MapX 是一個基于Windows 操作系統的標準控件,不僅支持Visual Basic、Delphi、Visual C++等面向對象語言,而且支持Oracle Spatial。本文利用Oracle 數據庫存儲空間數據,利用MapX 控件和Visual Basic 語言實現空間數據的交換及應用開發,其過程如圖2 所示。
6 結論
1)采用Oracle Spatial 存儲、管理空間數據,易于解決數據共享、分布式處理、網絡通信、開放式開發、并發控制、網絡化集成、跨平臺運行及數據安全恢復機制等方面的難題。
2)MAPORA 數據引擎為用戶提供了ASCII 碼格式的空間數據上載Oracle Spatial 的一種便利方法,用戶可以把通過野外測量或其他途徑獲取的數據較方便的上載到Oracle 數據庫中,同時用戶又可以通過SQL 語言操作數據庫,實現遠程數據的應用。
聲明①:文章部分內容來源互聯網,如有侵權請聯系刪除,郵箱 cehui8@qq.com
聲明②:中測網登載此文出于傳遞更多信息之目的,并不意味著贊同其觀點或證實其描述,文章內容僅供參考。
加群提示:我們創建了全國32個省份的地方測繪群,旨在打造本地測繪同行交流圈,有需要請聯系管理員測小量(微信 cexiaoliang)進群,一人最多只能進入一個省份群,中介人員勿擾