基于ADO的地下管线数据图库转换框架研究
2017-07-07何涛
何涛
(天津市测绘院,天津 300381)
基于ADO的地下管线数据图库转换框架研究
何涛*
(天津市测绘院,天津 300381)
地下综合管线数据是城市建设和管理的重要数据资源,在城市管理中发挥着越来越重要的作用,然而传统的地下管线数据用CAD图纸进行保存,这种方式比较难于利用到信息化过程中。本文利用的基于ADO的地下管线数据图库转换框架研究,实现了地下管线数据的图库无缝转换,结合数据库技术实现地下管线信息的标准化平台建设,实现了地下管线数据从数字化向信息化的转型。
地下管线;数据库;ADO;图库转换
1 引 言
如何管理属性信息复杂的地下空间数据,已经成为当今的重要课题。当前的地下管线数据正在摆脱冗杂、标准不一的窘境,管线数据采集系统的研究也是层出不穷,基于AutoCAD的管线数据采集系统已经成为成熟模式。当前地理信息数据量飞速增长,仅仅局限于对数据采集和管线成图进行研究已经远远不够,数据管理、系统衔接、信息共享、跨平台数据调用的研究已经成为主流。本文利用数据库技术,结合AutoLISP/Visual LISP、ObjectARX进行二次开发以及ADO技术实现图库数据转换框架,并对系统技术路线和重要环节进行了阐述。
2 总体技术路线
地下管线图库数据相互转换框架分为两大部分。一是图形文件管理,图形文件的数据存储格式主要是DWG文件和SHP文件,其中DWG文件是数据框架中前台图形表达的主要形式,SHP文件源于DWG并继承CAD图形信息,是多平台数据访问的重要数据格式;二是数据库设计,CAD图形属性信息的存储通过数据库完成,主要通过MDB文件对数据结构、类型及其表空间逻辑进行管理,在图文互查、数据同步方面起到重要作用。
在图库数据相互转的实现过程中,采用图形和数据库相嵌的设计理念,利用AutoCAD中图形实体属性数据列表中的扩展字段来存储对应图形的空间及属性信息,使图形和数据库紧密地结合在一起,做到图库一体。同时图形本身所蕴含的丰富信息还能被系统自动识别、提取和利用,采用统一的要素编码建立图库通讯机制,采用ADO数据库通信技术实现图库双向转换,无论是在图形上还是在数据库中进行信息改动的操作都同时作用在图形和数据库上,达到图库联动。整体设计如图1所示:
图1 总体设计框架图
2.1 图形文件标准设计
图形文件数据也是地下管线信息数据的重要组成部分,因此在设计了地下管线采集系统属性数据标准的基础上,还需对图形文件进行系统的设计,使其更加规范化,为地下管线的图形文件(*.dwg)和数据库文件(*.mdb)之间的相互转换,做好铺垫。
为了规范每一大类管线点及其附属设施的符号样式、符号尺寸及管点编码及代码等诸多基本属性信息情况,实现与地下管线数据库中管点表的相互关联,使得管线探测的最终图形成果更加规范化,本文按照《城市地下管线探测技术规程》CJJ61-2003的相关要求,设计了一套严密的管点符号及标准代码标准。表1以电信管线为例,列举了部分电信附属设施的管点编码、符号样式、符号尺寸等信息。
管点符号及标准代码示例表 表1
同样地,为了规范每一大类管线不同子类的编码名称、管线编码等诸多基本属性信息情况,实现与地下管线数据库中管线表的相互关联,使得管线探测的最终图形成果更加规范化,本文依《城市地下管线探测技术规程》CJJ61-2003为依据设计了一套严密的管点符号及标准代码标准。表2以给水和排水管线为例,列举了不同种类排水管线的编码名称、管线编码及代码等信息。
管线标准代码示例表 表2
2.2 地下管线数据库设计
结合地下管线信息系统的拓扑化处理和空间分析的需求,根据探测对象和属性信息类别的不同[3],本文归纳出共包含3个表的数据库,即管点表、管线表和工程信息表。在分析了上述表类型、数据库项和外业探查数据流程的基础上,以管线表和管点表为例(表3、表4),介绍数据表结构的设计形式。具体如下:
其中,Access以自增序列作为管线表的主键用于唯一识别,表中的起始点号和终止点号由特定标识码组成,包含管点类型、性质等属性信息,作为管线表的外键(Foreign Key)、管点表的主键(primary key)在表中存储,依据指定的约束形成关联。根据起始点号与终止点号两个外键的运算可以实现由管点生成管线的自动化。表中制定了数据类型和精度,属性信息也为跨平台的显示参数做好了数据储备。
管线表结构 表3
管点表结构 表4
3 基于ADO的数据图库转换框架
3.1 ADO数据转换机制
ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术。OLE DB是一个低层的数据访问接口,用它可以访问各种数据源,包括传统的关系型数据库以及电子邮件系统及自定义的商业对象。一般使用ADO操作数据库的基本流程是:
(1)初始化COM库,引入ADO库定义文件;
(2)用Connection对象连接数据库;
(3)利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用RecordSet对象取得结果记录集进行查询、处理;
(4)使用完毕后关闭连接释放对象。
其中:
Connection对象包含关于某个数据提供程序的信息和关于结构描述的信息。Connection对象用于建立与数据库的连接,通过连接可从应用程序访问数据源。它保存诸如指针类型、连接字符串、查询超时、连接超时和缺省数据库这样的连接信息。
Command对象包含关于某个命令,例如查询字符串、参数定义等的信息。在建立Connection后,可以发出命令操作数据源。一般情况下Command对象可以在数据库中添加、删除或更新数据,或者在表中进行数据查询。Command对象在定义查询参数或执行一个有输出参数的存储过程时非常有用。
RecordSet对象用来存储数据操作返回的记录集。Recordset对象只代表一个记录集,这个记录集是一个连接的数据库中的表,或者是Command对象的执行结果返回的记录集。在ADO对象模型中,是在行中检查和修改数据的最主要的方法,所有对数据的操作几乎都是在RecordSet对象中完成的,而Recordset对象用于指定行、移动行、添加、更改、删除记录。
在本文中我们采用了通过ADO技术来实现CAD图形数据与MDB数据库数据二者之间的相互通信。在将管线属性信息输出到MDB数据库的过程中,系统使用VisualLisp调用Windows的ADO组件来完成。
(1)用VisualLisp初始化ADO接口
(defun DbInitADO(/ADO_DLLPath)
(if(null adom-Append)
(progn
(setq ADO_DLLPath
(strcat
(getenv "systemdrive")
"\Program Files\Common Files\System\Ado\msado15.dll"
)
)
(if(findfile ADO_DLLPath)
(vlax-import-type-library
:tlb-filenameADO_DLLPath
:methods-prefix"adom-"
:properties-prefix"adop-"
:constants-prefix"adok-"
)
(alert(strcat "不能找到文件: " ADO_DLLPath))
);if
)
);if
(princ)
)
(2)用VisualLisp操作修改数据集
(defun PutFieldValue(rs fname val/fields field rc source tabn)
(setq fields(vlax-get-property rs 'Fields))
;;; (setq field(vlax-get-property fields 'Item fname))
(if(vl-catch-all-error-p(setq field(vl-catch-all-apply 'vlax-get-property(list fields 'Item fname))))
(progn
(setq source(vlax-get-property rs 'Source)
tabn(vl-princ-to-string(nth 3(read(strcat "("(variant-value source)")")))))
(alert(strcat "表" tabn "中不存在字段" fname ",请检查!"))
(exit)
)
(vlax-put-property field 'Value val)
))
(3)用函数实现VisualLisp创建数据连接、数据集对象
(defun DbConnection()
(vlax-Create-Object "ADODB.Connection")
)
(4)创建并返回ADO RecordSet对象
(defun DbRecordSet()
(vlax-Create-Object "ADODB.RecordSet")
)
3.2 数据图库转换框架实现
(1)由图形输出到数据库
在实现本部分功能的时候,按照系统数据库结构的设计要求(2.2章节),首先用Access建立一个数据库模板,模板中包含各类管线的管点表、管线表以及工程信息表,如图2所示。
图2 数据库模板
当用户按照工程名将管线图形信息输出到数据库时,只需要拷贝模板到指定的路径,并按工程名称命名数据库的名字,然后读取管线图形中所有管点符号和管线的扩展属性信息,再使用3.1章节中介绍的VisualLisp操作ADO的方法把读取的属性值填写到数据库文件中即可。
读取AutoCAD实体扩展属性的方法通过以下程序实现:
(defun GetXData(vlaObj AppID/xType XData)
(vla-GetXData vlaObj AppID 'xType 'XData)
(if(and xType XData)
(mapcar '(lambda(key val)(cons key(lisp-value val)))
(vlax-safearray->list xType)
(vlax-safearray->list xData) )
管线图形文件附加属性信息输出至数据库文件的结果如图3所示:
图3 图形文件输出至数据库
图4 数据库信息图形化流程图
(2)由数据库自动制图
管线图成果包括CAD图形文件(.Dwg)和Access数据库文件(.MDB)两种。为了有效地利用原有的管线MDB数据,增加系统的生命力,还需利用信息图形化技术实现将数据库文件(.MDB)自动转换为图形文件(.Dwg)的功能。信息图形化的具体流程如图4所示。
将信息图形化技术应用于管线数据成图,使得用户可以非常方便地将数据库中的属性数据直接生成更加直观的图形数据。这样一来,即使是不同的作业单位生产的管线数据,只要满足管线数据库的数据标准,都可以直接导入到信息管理系统中来,形成了数据的动态交换,增强了数据的重复利用。
4 结 语
将测绘技术和地理信息技术结合并应用于传统测绘地图,使得局限于图形绘制和注记加载的传统测绘制图成果变得更为丰富,另外地下管线测绘制图不能只是考虑管线图的探测及内业编辑,同时也要在实现测绘数据的跨平台兼容可用性上做出转变。基于ADO的地下管线图库数据转换框架研究正是着力于制图数据向信息数据转型,实现测绘技术由数字化向信息化的一个案例。本文产生的数据能够进行挖掘分析,为决策带来辅助,因此以数据库为基础的图库之间互转的应用模式将会有广阔前景,此框架研发的地理信息系统具有非常大的潜力。
[1] 王雅鹏,张喜英. 基于Geodatabase的城市地下管线数据模型设计与应用[A]. 地球空间信息,2016,14(8).
[2] 夏普著,周靖译. Visual C# 2010从入门到精通[M]. 清华大学出版社,2010.
[3] 郭秀娟,于全通,范小鸥. AutoLISP语言程序设计[M]. 化学工业出版社,2008.
[4] 天津市地下管线工程现状数据、竣工数据报验要求[R]. 天津市规划局,2008.12
[5] 牟乃夏,刘文宝,王海银等. ArcGIS 10地理信息系统教程—从初学到精通[M]. 测绘出版社,2012.
[6] 于海龙,王侬,谢刚生. 城市地下管网信息野外采集到内业一体化成图作业方案的设计与实现[J]. 测绘通报,2001(1).
Studying on Transforming Framework Between Underground Pipelines’ map and Database Based on ADO Technology
He Tao
(Tianjin Institute of Surveying and Mapping,Tianjin 300381,China)
Underground pipelines is important data resources in the construction and management of city,it is more and more important in city’s management ,however traditional underground pipelines storage in Cad,the data have difficulty in informationize. The concept that Studying on transforming framework between underground pipelines’ map and database based on ADO technology is to achieve the building of underground pipeline information with database technology standardization platform,realize the transformation from digital underground pipeline data to the information technology.
underground pipelines;database;ADO;transforming between map and database
1672-8262(2017)03-60-05
P208.1
A
2016—11—08
何涛(1978—),男,高级工程师,现主要从事测绘及GIS开发工作。