王 源,刘 云
(北京交通大学 通信与信息系统北京市重点实验室, 北京 100044)
铁通通信网络资源管理系统采用GIS技术,80%以上数据具有地理属性,构成通信网络资源的线路资源、设备资源和信息资源等所涉及到的数据和地理位置、图形信息的关系十分密切。GIS技术与电信管道资源分布情况结合起来,在GIS中以图形化方式直观体现。老系统不能很好满足新系统导入数据需要,新老系统的结构层次不同,系统属性字段不同,存在很多一对多或者多对一的对应关系,用存储过程实现起来比较麻烦。因此需要一种方法既能进行批量导入老系统的数据,又能使异构的老系统数据匹配新系统的数据库。
系统主干数据结构分4个类型:机房内的局站设备,机房外的管道杆路,光缆设备和电缆设备。每种类型又细分出多种层次的数据类型。如图1。
图1 新老系统主干数据结构
在ArcGIS中通过SDE存储空间数据到Oracle存储方式有:二进制Long Raw、ESRI的ST_Geometry以及基于Oracle Spatial的SDO_Geometry等。这里主要用到了Oracle Spatial的存储方式,通过这种存储方式几何列Shape的字段类型为mdsys.sde_geometry类型。Oracle Spatial定义的SDO_GEOMETRY类型为:
CREATE TYPE sdo_geometry AS OBJECT(
SDO_GTYPE NUMBER,//前面字符串为字段名;后面字符串为字段类型
SDO_SRID NUMBER,
SDO_POINT SDO_POINT_TYPE,
SDO_ELEM_INFO
SDO_ELEM_INFO_ARRAY,
SDO_ORDINATES
SDO_ORDINATE_ARRAY);
其中SDO_geometry AS OBJECT,标识该类型为对象类型。至于该类型中的SDO_POINT_TYPE、SDO_ELEM_INFO_ARRAY、SDO_ORDINATE_ARRAY也是Oracle Spatial自定义的类型和SDO_geometry是一样的。
(1)SDO_GTYPE:表示要存储的几何类型,如点线面。SDO-GTYPE参数值,如表1。
表1 SDO_GTYPE参数值举例
(2)SDO_SRID:几何空间参考坐标系,类型为NUMBER。SDO_SRID定义空间坐标参考系统。
(3)SDO_POINT:几何类型就是存储点坐标,否则为空。oracle自定义的SDO_POINT_TYPE类型。SDO_POINT类型的构造方法为:sdo_point_type(x,y,z),其中x,y,z类型为Double和Int都可。SDO_POINT字段定义为含有X、Y、Z属性的SDO_POINT_TYPE类型。
(4)SDO_ELEM_INFO:定义要如何理解SDO_ORDINATES中的坐标串。SDO_ELEM_INFO类型的构造方法为:sdo_elem_info_array(a,b.c)。每个SDO_ELEM_INFO属性单元由SDO_STARTING_OFFSET、SDO_ETYPE和SDO_INTERPRETATION组成。SDO_STARTING_OFFSET:声明组成当前几何片段的第1个坐标在SDO_ORDINATES数组中的坐标序号。SDO_ETYPE。结合SDO_STARTING_OFFSET和SDO_ETYPE表来理解。SDO_ETYPE值=1,2,1 003,或2 003,说明几何为简单的几何类型。SDO_INTERP-RETATION:依赖SDO_ETYPE是否是组合元素,如果SDO_ETYPE值=1,2,1 003,或2 003,标识决定了元素坐标队列的翻译顺序。
(5)SDO_ORDINATES:存储实际坐标的,以X、Y以及不同点之间都是逗号隔开。
系统采用WGS-84坐标系。该坐标系是目前GPS所采用的坐标系统,GPS发布的星历参数就基于此坐标系统。WGS-84世界大地坐标系,它是一个地心地固坐标系统。该坐标系的坐标原点位于地球的质心,Z轴指向BIH1984.0定义的协议地球极方向,X轴指向BIH1984.0的启始子午面和赤道的交点,Y轴与X轴和Z轴构成右手系。采用椭球参数为:长半轴a=6 378 137 m,协议地球扁率f8-14=298.257 223 563。
一种形式就是一种坐标系。如空间直角坐标系(X,Y,Z)、大地坐标系(B,L)和平面直角坐标(X,Y)等。老系统中存储的是坐标系统下的空间直角坐标,新系统需要的是以经纬度表示的大地坐标系。需要将空间直角坐标系转换成大地坐标系,得到大地坐标(B,L)。根据公式:
用上式采用迭代法求出大地坐标(B,L)。L为大地精度,B为大地纬度,N=a/(1-e2sin2B)1/2,N为该店的卯酉圈曲率半径;e2=(a2-b2)/a2,a,e分别为该大地坐标系对应椭球的长半轴和第1偏心率。
本程序使用Java开发,运行本程序要启动与源数据库和目的数据库的连接。获得源数据表格和字段、目的数据表格和字段及所需条件进行下一步。通过数据处理类,利用刚获得的源数据表格和字段及查询条件,从源表中查询出需要导入的数据放入一个对象中。之后,把该对象内的数据进行格式转化或者特殊处理,根据已获得的目的数据表格和字段,生成可执行的sql语句,输出到目的数据库中,并生成一个输出文档。程序流程如图2。需要导入的数据主要分为设备数据信息表和设备地理信息表。
图2 程序流程图
Java是一种面向对象的语言。面向待处理的表,设计一个容器的接口程序。程序定义了6种类型接口,如表2。分析待处理的表之间的关系后,就可以新建对应的Java类,继承该接口,在新的类中放入这6种对象就可以被别的类调用。随着待处理的表格增多,该方式把复杂的程序转化为一种简易的模板而不用反复修改程序,在模板中添加有用信息便可以达到目的,方便快捷。这种通过继承的方法实现数据处理,灵活性、可移植性比较强。另外,经常会用到多级嵌套的sql语句。
表2 接口程序设计
导入地理设备信息表的难点在于读出的地理信息需要经过坐标转化和SDO_GEOMETRY的使用。根据2.1节提到的Oracle Spatial的数据存储结构,不同的地理信息需要按照相应的格式导入数据库中。
MDSYS.SDO_GEOMETRY(2001,8307,MDSYS.SDO_POINT_TYPE(x1,y1,null),null,null)数据结构表示手孔表的地理信息是单点Point类型,WGS-84坐标系,点坐标是x1,y1。
MDSYS.SDO_GEOMETRY(2002,8307,null,MDSYS.SDO_ELEM_INFO_ARRAY(1,2,1),MDSYS.SDO_ORDINATE_ARRAY(x1,y1,x2,y2))表示管路表的地理信息的地理对象包含直线,且第1个顶点在SDO_ORDINATES_ARRAY开始位置是x1,元素类型是2简单的几何图形,顶点连接方式是通过直线连接,x1,y1,x2,y2是该管路的实际坐标。
数据处理需要对原表中的数据进行处理,原表的id比较短,经过SYS_GUID处理,即使数据量较大时,SYS_GUID也会保证它创建的标识符在每个数据库里都是唯一的。还有一些表所属地区有所变更,要在特殊处理时进行。
基于通信线路的WebGIS工作原理,设计了导入导出数据程序,实现了把不同结构的数据库匹配导入到新系统数据库中。处理掉老系统中冗余的空值、废值,导入效率达到90%以上。该程序面向对象设计,简单方便,可移植性强,可修改性强。利用该程序,提高导入数据的效率,避免软件导入数据可修改性差的弊端,真正匹配系统数据导入的需要,是Java面向对象程序设计的范例。
[1]Kevin Loney, Bob Bryla. Oracle 10g DBA手册[Z]. 北京:清华大学出版社,2006.
[2]Gay S.Horstmann, Gray Cornell. java核心技术卷II:高级特性[M]. 北京:机械工业出版社. 2008.6.
[3]郭杰华,鲍远律,胡玉锁,等. 基于Internet的地理信息系统(WebGIS)的研究和开发[J]. 微机发展,1999,9(1):61-63.
[4]朱志伟,刘书雷,李 军.一种基于Oracle Spatial的WebGIS实现方法[J]. 计算机工程,2004,30(2):98-99.
[5]柳光魁,王振禄,等. BJ-54坐标系与WGS-84坐标系转换方法及精度分析[J]. 测绘与空间地理信息,2007,6(30).