王 源,劉 云
(北京交通大學(xué) 通信與信息系統(tǒng)北京市重點(diǎn)實(shí)驗(yàn)室, 北京 100044)
鐵通通信網(wǎng)絡(luò)資源管理系統(tǒng)采用GIS技術(shù),80%以上數(shù)據(jù)具有地理屬性,構(gòu)成通信網(wǎng)絡(luò)資源的線路資源、設(shè)備資源和信息資源等所涉及到的數(shù)據(jù)和地理位置、圖形信息的關(guān)系十分密切。GIS技術(shù)與電信管道資源分布情況結(jié)合起來(lái),在GIS中以圖形化方式直觀體現(xiàn)。老系統(tǒng)不能很好滿足新系統(tǒng)導(dǎo)入數(shù)據(jù)需要,新老系統(tǒng)的結(jié)構(gòu)層次不同,系統(tǒng)屬性字段不同,存在很多一對(duì)多或者多對(duì)一的對(duì)應(yīng)關(guān)系,用存儲(chǔ)過(guò)程實(shí)現(xiàn)起來(lái)比較麻煩。因此需要一種方法既能進(jìn)行批量導(dǎo)入老系統(tǒng)的數(shù)據(jù),又能使異構(gòu)的老系統(tǒng)數(shù)據(jù)匹配新系統(tǒng)的數(shù)據(jù)庫(kù)。
系統(tǒng)主干數(shù)據(jù)結(jié)構(gòu)分4個(gè)類(lèi)型:機(jī)房?jī)?nèi)的局站設(shè)備,機(jī)房外的管道桿路,光纜設(shè)備和電纜設(shè)備。每種類(lèi)型又細(xì)分出多種層次的數(shù)據(jù)類(lèi)型。如圖1。
圖1 新老系統(tǒng)主干數(shù)據(jù)結(jié)構(gòu)
在ArcGIS中通過(guò)SDE存儲(chǔ)空間數(shù)據(jù)到Oracle存儲(chǔ)方式有:二進(jìn)制Long Raw、ESRI的ST_Geometry以及基于Oracle Spatial的SDO_Geometry等。這里主要用到了Oracle Spatial的存儲(chǔ)方式,通過(guò)這種存儲(chǔ)方式幾何列Shape的字段類(lèi)型為mdsys.sde_geometry類(lèi)型。Oracle Spatial定義的SDO_GEOMETRY類(lèi)型為:
CREATE TYPE sdo_geometry AS OBJECT(
SDO_GTYPE NUMBER,//前面字符串為字段名;后面字符串為字段類(lèi)型
SDO_SRID NUMBER,
SDO_POINT SDO_POINT_TYPE,
SDO_ELEM_INFO
SDO_ELEM_INFO_ARRAY,
SDO_ORDINATES
SDO_ORDINATE_ARRAY);
其中SDO_geometry AS OBJECT,標(biāo)識(shí)該類(lèi)型為對(duì)象類(lèi)型。至于該類(lèi)型中的SDO_POINT_TYPE、SDO_ELEM_INFO_ARRAY、SDO_ORDINATE_ARRAY也是Oracle Spatial自定義的類(lèi)型和SDO_geometry是一樣的。
(1)SDO_GTYPE:表示要存儲(chǔ)的幾何類(lèi)型,如點(diǎn)線面。SDO-GTYPE參數(shù)值,如表1。
表1 SDO_GTYPE參數(shù)值舉例
(2)SDO_SRID:幾何空間參考坐標(biāo)系,類(lèi)型為NUMBER。SDO_SRID定義空間坐標(biāo)參考系統(tǒng)。
(3)SDO_POINT:幾何類(lèi)型就是存儲(chǔ)點(diǎn)坐標(biāo),否則為空。oracle自定義的SDO_POINT_TYPE類(lèi)型。SDO_POINT類(lèi)型的構(gòu)造方法為:sdo_point_type(x,y,z),其中x,y,z類(lèi)型為Double和Int都可。SDO_POINT字段定義為含有X、Y、Z屬性的SDO_POINT_TYPE類(lèi)型。
(4)SDO_ELEM_INFO:定義要如何理解SDO_ORDINATES中的坐標(biāo)串。SDO_ELEM_INFO類(lèi)型的構(gòu)造方法為:sdo_elem_info_array(a,b.c)。每個(gè)SDO_ELEM_INFO屬性單元由SDO_STARTING_OFFSET、SDO_ETYPE和SDO_INTERPRETATION組成。SDO_STARTING_OFFSET:聲明組成當(dāng)前幾何片段的第1個(gè)坐標(biāo)在SDO_ORDINATES數(shù)組中的坐標(biāo)序號(hào)。SDO_ETYPE。結(jié)合SDO_STARTING_OFFSET和SDO_ETYPE表來(lái)理解。SDO_ETYPE值=1,2,1 003,或2 003,說(shuō)明幾何為簡(jiǎn)單的幾何類(lèi)型。SDO_INTERP-RETATION:依賴(lài)SDO_ETYPE是否是組合元素,如果SDO_ETYPE值=1,2,1 003,或2 003,標(biāo)識(shí)決定了元素坐標(biāo)隊(duì)列的翻譯順序。
(5)SDO_ORDINATES:存儲(chǔ)實(shí)際坐標(biāo)的,以X、Y以及不同點(diǎn)之間都是逗號(hào)隔開(kāi)。
系統(tǒng)采用WGS-84坐標(biāo)系。該坐標(biāo)系是目前GPS所采用的坐標(biāo)系統(tǒng),GPS發(fā)布的星歷參數(shù)就基于此坐標(biāo)系統(tǒng)。WGS-84世界大地坐標(biāo)系,它是一個(gè)地心地固坐標(biāo)系統(tǒng)。該坐標(biāo)系的坐標(biāo)原點(diǎn)位于地球的質(zhì)心,Z軸指向BIH1984.0定義的協(xié)議地球極方向,X軸指向BIH1984.0的啟始子午面和赤道的交點(diǎn),Y軸與X軸和Z軸構(gòu)成右手系。采用橢球參數(shù)為:長(zhǎng)半軸a=6 378 137 m,協(xié)議地球扁率f8-14=298.257 223 563。
一種形式就是一種坐標(biāo)系。如空間直角坐標(biāo)系(X,Y,Z)、大地坐標(biāo)系(B,L)和平面直角坐標(biāo)(X,Y)等。老系統(tǒng)中存儲(chǔ)的是坐標(biāo)系統(tǒng)下的空間直角坐標(biāo),新系統(tǒng)需要的是以經(jīng)緯度表示的大地坐標(biāo)系。需要將空間直角坐標(biāo)系轉(zhuǎn)換成大地坐標(biāo)系,得到大地坐標(biāo)(B,L)。根據(jù)公式:
用上式采用迭代法求出大地坐標(biāo)(B,L)。L為大地精度,B為大地緯度,N=a/(1-e2sin2B)1/2,N為該店的卯酉圈曲率半徑;e2=(a2-b2)/a2,a,e分別為該大地坐標(biāo)系對(duì)應(yīng)橢球的長(zhǎng)半軸和第1偏心率。
本程序使用Java開(kāi)發(fā),運(yùn)行本程序要啟動(dòng)與源數(shù)據(jù)庫(kù)和目的數(shù)據(jù)庫(kù)的連接。獲得源數(shù)據(jù)表格和字段、目的數(shù)據(jù)表格和字段及所需條件進(jìn)行下一步。通過(guò)數(shù)據(jù)處理類(lèi),利用剛獲得的源數(shù)據(jù)表格和字段及查詢(xún)條件,從源表中查詢(xún)出需要導(dǎo)入的數(shù)據(jù)放入一個(gè)對(duì)象中。之后,把該對(duì)象內(nèi)的數(shù)據(jù)進(jìn)行格式轉(zhuǎn)化或者特殊處理,根據(jù)已獲得的目的數(shù)據(jù)表格和字段,生成可執(zhí)行的sql語(yǔ)句,輸出到目的數(shù)據(jù)庫(kù)中,并生成一個(gè)輸出文檔。程序流程如圖2。需要導(dǎo)入的數(shù)據(jù)主要分為設(shè)備數(shù)據(jù)信息表和設(shè)備地理信息表。
圖2 程序流程圖
Java是一種面向?qū)ο蟮恼Z(yǔ)言。面向待處理的表,設(shè)計(jì)一個(gè)容器的接口程序。程序定義了6種類(lèi)型接口,如表2。分析待處理的表之間的關(guān)系后,就可以新建對(duì)應(yīng)的Java類(lèi),繼承該接口,在新的類(lèi)中放入這6種對(duì)象就可以被別的類(lèi)調(diào)用。隨著待處理的表格增多,該方式把復(fù)雜的程序轉(zhuǎn)化為一種簡(jiǎn)易的模板而不用反復(fù)修改程序,在模板中添加有用信息便可以達(dá)到目的,方便快捷。這種通過(guò)繼承的方法實(shí)現(xiàn)數(shù)據(jù)處理,靈活性、可移植性比較強(qiáng)。另外,經(jīng)常會(huì)用到多級(jí)嵌套的sql語(yǔ)句。
表2 接口程序設(shè)計(jì)
導(dǎo)入地理設(shè)備信息表的難點(diǎn)在于讀出的地理信息需要經(jīng)過(guò)坐標(biāo)轉(zhuǎn)化和SDO_GEOMETRY的使用。根據(jù)2.1節(jié)提到的Oracle Spatial的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),不同的地理信息需要按照相應(yīng)的格式導(dǎo)入數(shù)據(jù)庫(kù)中。
MDSYS.SDO_GEOMETRY(2001,8307,MDSYS.SDO_POINT_TYPE(x1,y1,null),null,null)數(shù)據(jù)結(jié)構(gòu)表示手孔表的地理信息是單點(diǎn)Point類(lèi)型,WGS-84坐標(biāo)系,點(diǎn)坐標(biāo)是x1,y1。
MDSYS.SDO_GEOMETRY(2002,8307,null,MDSYS.SDO_ELEM_INFO_ARRAY(1,2,1),MDSYS.SDO_ORDINATE_ARRAY(x1,y1,x2,y2))表示管路表的地理信息的地理對(duì)象包含直線,且第1個(gè)頂點(diǎn)在SDO_ORDINATES_ARRAY開(kāi)始位置是x1,元素類(lèi)型是2簡(jiǎn)單的幾何圖形,頂點(diǎn)連接方式是通過(guò)直線連接,x1,y1,x2,y2是該管路的實(shí)際坐標(biāo)。
數(shù)據(jù)處理需要對(duì)原表中的數(shù)據(jù)進(jìn)行處理,原表的id比較短,經(jīng)過(guò)SYS_GUID處理,即使數(shù)據(jù)量較大時(shí),SYS_GUID也會(huì)保證它創(chuàng)建的標(biāo)識(shí)符在每個(gè)數(shù)據(jù)庫(kù)里都是唯一的。還有一些表所屬地區(qū)有所變更,要在特殊處理時(shí)進(jìn)行。
基于通信線路的WebGIS工作原理,設(shè)計(jì)了導(dǎo)入導(dǎo)出數(shù)據(jù)程序,實(shí)現(xiàn)了把不同結(jié)構(gòu)的數(shù)據(jù)庫(kù)匹配導(dǎo)入到新系統(tǒng)數(shù)據(jù)庫(kù)中。處理掉老系統(tǒng)中冗余的空值、廢值,導(dǎo)入效率達(dá)到90%以上。該程序面向?qū)ο笤O(shè)計(jì),簡(jiǎn)單方便,可移植性強(qiáng),可修改性強(qiáng)。利用該程序,提高導(dǎo)入數(shù)據(jù)的效率,避免軟件導(dǎo)入數(shù)據(jù)可修改性差的弊端,真正匹配系統(tǒng)數(shù)據(jù)導(dǎo)入的需要,是Java面向?qū)ο蟪绦蛟O(shè)計(jì)的范例。
[1]Kevin Loney, Bob Bryla. Oracle 10g DBA手冊(cè)[Z]. 北京:清華大學(xué)出版社,2006.
[2]Gay S.Horstmann, Gray Cornell. java核心技術(shù)卷II:高級(jí)特性[M]. 北京:機(jī)械工業(yè)出版社. 2008.6.
[3]郭杰華,鮑遠(yuǎn)律,胡玉鎖,等. 基于Internet的地理信息系統(tǒng)(WebGIS)的研究和開(kāi)發(fā)[J]. 微機(jī)發(fā)展,1999,9(1):61-63.
[4]朱志偉,劉書(shū)雷,李 軍.一種基于Oracle Spatial的WebGIS實(shí)現(xiàn)方法[J]. 計(jì)算機(jī)工程,2004,30(2):98-99.
[5]柳光魁,王振祿,等. BJ-54坐標(biāo)系與WGS-84坐標(biāo)系轉(zhuǎn)換方法及精度分析[J]. 測(cè)繪與空間地理信息,2007,6(30).