基于AutoCad和OracleSpatial建立地形图数据建库

2017-06-09 10:10周义军
科技资讯 2017年11期

周义军

摘 要:一直以来,基础地形图在建库时,都需要将DWG格式文件转换为SHP格式文件。该文从另一个角度,利用AutoCAD Map和Oracle spatial的二次开发,探索出一种DWG数据直接建库的方法,并且尝试的解决了历史数据的存储、更新和分析等问题。

关键词:Oracle Spatial REALDWG ODP.NET

中图分类号:TP311 文献标识码:A 文章编号:1672-3791(2017)04(b)-0022-03

目前,基础地理信息数据建库的思路和方案有很多,多数以GIS数据作为基本数据进行数据库建设。但就我国的具体情况来看,各个城市院多沿用以前的作业模式,继续采用AutoCAD生产地理信息数据,在建库前,需将DWG数据转化成GIS数据,这样一来建库的效率就降低了。

该文从另一个角度,利用AutoCAD Map和Oracle spatial的二次开发,探索出一种DWG数据直接建库的方法,并且尝试的解决了数据的存储、更新和分析等问题。

1 Oracle Spatial及其在空间数据存储方面的应用

1.1 Oracle Spatial簡介

Oracle是一种对象—关系数据库,它支持自定义的数据类型,可以用数组、结构体或者带有构造函数、功能函数的类来定义自己的对象类型。这样的对象类型可以用于定义属性列的数据类型,也可以用来创建对象表。而Oracle Spatial也正是基于此种特性所开发的一套空间数据处理系统。Oracle Spatial定义了一套用于存储和操作空间数据的对象,可以存储点、线、面和多点、多线、多面及弧、圆或者混合对象。Oracle定义的空间数据存储对象与OGC定义的简单要素规范一致,对象涵盖了空间对象的各种类型。

1.2 Oracle Spatial用于空间数据存储

Oracle Spatial主要通过元数据表、包含空间数据字段的要素类表和空间索引来管理空间数据,在此基础上提供一系列空间查询和空间分析的函数,让用户进行深层次的GIS开发。

Oracle Spatial使用元数据表来记录存储每个要素类的表,元数据表存储了空间数据的数据表名称、空间字段名称、空间数据的坐标范围、坐标参考信息以及坐标维数说明等信息。用户必须通过查询元数据表才能知道是否存在某个用于存储空间数据的表。而每个存储空间数据的表除了包括各个属性字段以外,必须包括一个类型为SDO_GEOMETRY的字段,用于存储要素类的空间数据。如图1所示,SDO_GEOMETRY里面的元素包括:要素的类型( SDO_GTYPE) ;要素的坐标(SDO_ORDINATES或是SDO_POINT) ;要素坐标的解析方式( SDO_ELEM_INFO);要素的空间坐标参照系(SDO_SRID) 。SDO_GEOMETRY数据类型是存储空间数据的关键,通过对这一数据类型的解析,可以把坐标还原为要素,并显示出来。

每个要素类除了对应一个存储该要素类型表以外,还需要有对应的索引表,采用R树索引或四叉树索引的方式对该要素类建立索引,用来提高空间查询和空间分析的速度。

1.3 Oracle Spatial空间数据访问方法

Oracle除了提供Oracle Spatial用于存储空间数据以外,对Oracle Spatial也提供多种访问方法,主要包含OCI、OO4O、ODP.Net等。

OCI是Oracle调用接口(Oracle Call Interface)的简写,它是ORACLE提供的面向C语言程序员的编程接口,同时提供了用于Boland C++和MicrosoftVisual C++的库。

OO4O是Oracle本身所提供的OLE对象(OracleObjects forOLE) ,可以用来快速访问Oracle Spatial数据。

ODP.Net是Oracle调用接口(Oracle Data Provider for.NET)的简写,是ORACLE提供的面向C#语言程序员的编程接口,同时提供用于C#.Net的库。

该文采用通过ODP.Net进行二次开发,可以实现Oracle Spatial空间数据的解析、读取和保存,并实现与客户端所处理数据的交互,从而可以在多个客户端实现对空间数据的互操作。

2 AutoCAD Map与Oracle Spatial互动原理

Autodesk软件提供了强大的ReaLDWG组件库为二次开发提供了便利,通过二次开发可在脱离AutoCADMap软件环境下读取、修改dwg格式的数据文件的功能定制,在运行时装入自定义开发的应用程序,可实现与AutoCAD Map的交互。而我们也可以通过ODP.Net组件开发的模式,实现与Oracle数据库的交互。这样,从理论来说,以二次开发的程序为桥梁就可使得AutoCAD Map与Oracle Spatial进行交互。例如,通过ODP.Net组件的开发,将Oracle Spatial表中的空间要素解析出来,生成AutoCAD软件定义的相应对象,并放到相应图层来加载,如图2所示。

3 Oracle Spatial与AutoCAD数据结构转换

根据上述的分析,Oracle和AutoCAD都提供二次开发组件允许定制开发,开发人员通过统一的开发平台将这两款软件的功能纳入到统一的系统架构中是完全可行的。该文采用Visual Studio 2010开发平台,引用ODP.Net组件和RealDWG组件,实现了AutoCAD数据与Oracle数据库的交互。

AutoCAD数据和Oracle数据库的交互实质上是两个系统的数据结构之间的转换。

数据结构转换分为空间信息的转换和属性信息的转换。

3.1 空间信息转换

AutoCAD的空间数据结构有点(DBPoint),块(BlockReference),文本(DBText),多重文本(MText),线段(Line),Arc(弧),多段线(Polyline),二维多段线(Polyline2d),三维多段线(Polyline3d),圆(Circle),面(MPolygon),图案填充(Hatch)等。

Oracle Spatial的空间数据结构有点(Point),多点(MULTIPOI NT),线段(LINE),复杂線段(MULTILINE),曲线(CURVE),复杂曲线(MULTICURVE),面(POLYGON),复杂面(MULTIPOLYGON)。

根据两种数据结构的特点,该文依据表1的对应关系进行空间数据结构的底层转换,用“图形类型”属性区分几何类型。

3.2 属性信息的转换

以块(BlockReference)为例,将oracle数据库中的块信息转换成AutoCAD的实体,需将块的属性信息,如颜色,图层,线型,线型比例,线宽,名称,旋转,注释性,X比例,Y比例,Z比例等信息记录下来,程序根据这些信息生产AutoCAD实体。

4 实验

该文以天津市全市域的1∶2000地形图为实验数据,根据地形图的特点,通过图形和属性的相互转换,将地形图存储到在oracle数据库表中,出库时,依据数据库表中的空间和属性信息自动生成AutoCAD实体,输出到dwg文件总,达到自动符号化的目的,做到了AutoCAD数据完全无损的存储。

参考文献

[1] 曹云刚,范东明.Oracle Spatial 在GIS中的应用[J].测绘, 2002,25(4):167-169.

[2] H Liang,RW Ding,HX Zheng.The design and application of oracle spatial database[J].Science of Surveying&Mapping,2005(3):92-94.

[3] 梁鸿,丁仁伟,郑红霞.Oracle Spatial空间数据库的设计及应用[J].测绘科学,2005,30(3):91-93.

[4] R Kothuri,A Godfrind,E Beinct.Pro Oracle Spatial for Oracle Database 11 g[M].Apress Berkelg,2007.

[5] 郭朝勇.AutoCAD R14二次开发技术[M].北京:清华大学出版社,1999.

[6] 董春桥.AutoCAD二次开发技术[J].土木工程与管理学报, 1999,16(3):45-49.

[7] 袁源琳,张新长,黄健锋,等,AutoCAD地形图数据规整入库的研究与应用[J].测绘通报,2013(5):84-88.

[8] 王会然,蔄茂金,甘伟.AutoCAD中地形图符号、线型及图案填充的实现方法[J].地矿测绘,2009,25(1):38-40.