罗海燕,何 洁
(湖南省第一测绘院,湖南 衡阳 421001)
CAD平台下矢量数据建库系统的设计与实现
罗海燕,何洁
(湖南省第一测绘院,湖南 衡阳 421001)
摘要:CAD平台具有强大的矢量数据编辑能力与图形表现能力,通过对其薄弱的空间分析能力和相关业务能力进行扩展,可以使其成为一个良好的矢量数据建库系统。本文结合工作实际,探讨、设计了其扩展的方法,并成功实现。
关键词:CAD;矢量数据库;扩展;GIS;设计与实现
以AutoCAD、Microstation等为代表的主流制图平台矢量图形操作简单,图形编辑功能强大,并且体系结构开放,同时具备强大的二次开发能力,这使得其在测绘地理信息行业数据采集过程中得到了广泛运用。但由于缺乏空间参考系统与空间分析(主要是缺乏拓扑功能)、数据库管理方面能力薄弱等原因,使得这些平台在地理信息数据库建设中的应用受到制约。如果能够通过二次开发对CAD平台进行扩展,为其建立一套拓扑工具,并对其数据库系统进行扩充,扬长避短,将极大地提高其在GIS领域的生命力。本文就如何扩充CAD平台的空间分析与数据库管理能力进行分析、设计与实现。
一、矢量数据建库系统的基本需求及CAD平台需要满足的条件
1) 系统要能够表现GIS的基本要素:点、线、面、体、注记,为了简化系统处理,线要素不含曲线,且不考虑网状要素。要求能够方便对图形数据进行输入、修改与删除,因此CAD平台需要具备相应的图形元素来完成表现。
2) 系统具备一定的空间分析能力,能够满足建库过程中各类图形拓扑需要,主要实现基本的图形运算:求交、求并、求差、求异、包含、覆盖等,并在此基础上进行灵活扩充。要求能够实现快速运算,时间复杂度不大于O(n)。
3) 系统具备一定的数据管理能力,能够将图形数据与属性数据进行关联,并且方便进行录入、修改、删除、查询等操作,同时能够将属性数据与多种数据库关联,如SQL Server、Access mdb数据库等,同时能够根据需要连接不同的数据库。
4) 系统具备美观、友好的UI界面。系统功能的扩展导致用户界面的增加,因此还需要CAD平台提供有UI开发接口。同时,新扩展的功能需要与用户进行交互,这就需要视图操作接口及图形对象互动接口。
5) 系统能够与主流的GIS平台进行数据交换,交换后的图形与数据库经直接或简单映射即可使用。
经过分析,目前应用广泛的AutoCAD、Microstation对条件1)、4)容易实现,条件5)通过输入输出GIS平台交换格式可满足;而条件2)、3)实现困难,本文将重点阐述这两点如何设计与实现。
二、选择设计框架
良好的设计框架对成功实现软件系统很重要。分析可知,该系统的目标是通过具备一定条件的CAD平台表达GIS数据,并实现功能的扩充。它与软件工程中MVC框架非常类似,该模式如图1所示。其中,View为视图,Model为数据模型,Controller为控制器。如果将CAD平台视为View,GIS数据模型或相关业务模型视为Model,那么需要建立的就是Controller。Controller的功能强弱决定了CAD数据对GIS数据的表达能力;同时,Controller与View、Model的耦合度决定了其适应性,耦合度越低其依赖于某个CAD平台或某个GIS数据模型的程度就越低。
三、概要设计
为了保证同一种控制器模型能为不同的CAD平台使用,同时使得设计的软件方便移植与维护,本文采用分层设计的方式,将CAD平台视为一个抽象层,并在其与具体的功能实现间建立一个映射接口,使得CAD平台与功能实现分离。同理,将具体的数据库视为数据访问层,在其与功能实现间设置一个数据接口,使得同一功能实现能很方便地在不同CAD平台间移植,同时能从不同数据源获取数据。设计概要如图2所示。
图1 MVC设计模式
图2 分层架构
四、详细设计
GIS数据包括图形要素与非图形要素两部分。图形基本要素包括点、线、面、体,另外还存在一些复合业务要素,如地籍系统中的宗地要素等;其中体属于三维对象,为了简化系统暂不考虑该对象。非图形要素一般可用数据表来呈现。该系统详细设计的重点在于点、线、面、表这4类要素的表现与相关处理。
1. 基础接口与实体类设计
为了统一表达空间对象,先设计几何基础接口IGeometry,再设计点、线、面3种空间对象接口,均继承自IGeometry接口。另外,为了将图形和相关属性数据合成为一个整体要素,设计Feature类,它由空间对象接口IGeometry与数据访问接口IDataAccess复合而成,要素实例的空间对象与相关属性通过此类进行一致性操纵。为了对同一类型要素进行一致性管理,设计FeatureClass类统一维护Feature实例对象。实体类与基础接口主要设计如图3所示。
2. 数据表示层设计
数据表示层主要负责将GIS数据映射为CAD数据数据,主要包括3方面:符号表达系统设计、图形绘制系统设计、界面设计。这一层的设计与具体的CAD平台相关,并且已经有许多成熟的实现方案,如南方CASS、GeoOne等软件。
图3 实体类与基础接口主要部分
3. 业务功能接口及实现
系统需要扩展的业务功能实际需要与建库过程具体需求有关,现以基本业务功能的图形拓扑运算为例进行说明。
(1) 业务功能接口设计
为了实现几何对象的拓扑运算功能,首先定义业务功能接口ITopologyOperator,如图4所示。
图4 业务功能接口ITopologyOperator
(2) 业务功能的实现
业务功能的实现有两种方式:一是在基础接口和实体类的基础上定义新的功能类来实现IToplogyOperator接口;二是在目标CAD平台上包装现有实体对象实现IToplogyOperator接口。前者需要自行实现空间对象点、线、面基本图形运算;后者可以利用目标平台本身提供的基本图形运算API。现以在AutoCAD平台中使用C#实现IPolyline接口中IToplogyOperator的IntersectOperater操作为实例来说明拓扑运算功能的具体实现:
public class TPolyline:IPolyline
{
internal Polyline m_pline = null;
…
∥IToplogyOperator中的IntersectOperater接口实现
public IGeometry[] IntectOperater(IGeometry geo)
{
if (geo is TPolyline)
return getIntersect((TPolyline)geo);
else if (geo is TGeoPoint)
return getIntersect ((TGeoPoint)geo);
else if (geo is TPolygon)
return getIntersect ((TPolygon)geo);
else
return geo.IntectOperater(this);
}
与多段线交集运算
需与本体进行交叉运算的多段线
private IGeometry[] getIntersect (TPolyline pline)
{
Point3dCollection pts = new Point3dCollection();
m_pline.IntersectWith(pline.m_pline, Intersect.OnBothOperands, new Plane(), pts, 0, 0);
if (pts.Count == 0)
return null;
List
foreach (Point3d pt in pts)
{
if (pt.DistanceTo(m_pline.GetClosestPointTo(pt, false)) < m_Tolerance &&
pt.DistanceTo(pline.m_pline.GetClosestPointTo(pt, false)) < m_Tolerance)
realIntectPts.Add(new TGeoPoint(pt.X,pt.Y,pt.Z));
}
return realIntectPts.ToArray();
}
…
}
在客户端调用函数:IGeometry[] geoAry=pline. IntectOperater(otherPline),即可进行多段线求交集操作,达到业务功能的实现。
对于其他类似的业务功能,只要先定义相应的业务功能接口,然后在不同的CAD平台进行实现,就可以很方便地进行业务功能的移植和扩展。如可以将空间索引作为一个业务功能进行扩展,为不同CAD平台提供空间索引服务,使得大数据量的空间计算可以快速进行。
4. 数据访问接口设计
数据访问接口主要负责图形属性数据的访问操作,因此需要读、写、删除和查询功能。根据需要定义IDataTable接口,通过在数据层中具体实现该接口,可以方便扩展对各类数据库的操作,这样通过在数据层中的不同实现,使得建库系统既可以用CAD平台的内置数据库,又可以实现使用各种通用数据库,甚至可以实现自定义的数据表。如图5所示。
5. 数据层实现
为了能使建库系统具备对空间数据相关的属性数据访问能力,必须针对相应的数据库实现具体的数据接口,现以C#语言封装OLEDB组件实现IDataTable接口来说明实现方法。
图5 数据访问接口族主要部分
public class OLEDBDataTable:IDataTable
{
const string connectionString ="provider=Microsoft.JET.OLEDB.4.0;" +
"data source=";
SD.IDataAdapter m_dataAdapter = null;
SD.DataTable m_sdTable = null;
public AccessMdbDataTable(string dbName, string tableName)
{
SD.IDataAdapter dataAdapter = new OleDbDataAdapter(
string.Format("Select*From{0}", tableName), connectionString + dbName);
SD.DataSet dataset = null;
dataAdapter.Fill(dataset);
dataAdapter.FillSchema(dataset, SD.SchemaType.Mapped);
m_sdTable = dataset.Tables[tableName];
}
public DataOperationMessage GetData(Identify id,IField field,out object value)
{
SD.DataView dv = new SD.DataView(m_sdTable);
dv.RowFilter = id.value;
value = null;
if(dv.Count > 0)
return new DataOperationMessage(DataOperationResultEnum.GetFailed,"指定id不唯一");
else if(dv.Count == 0)
return new DataOperationMessage(DataOperationResultEnum.GetFailed,"指定id无记录");
try{
value = dv[0][field.GetFieldName()];
}catch(Exception e){
return new DataOperationMessage(DataOperationResultEnum.GetFailed,
"字段" + field.GetFieldName() + "获取失败:" + e.Message);
}
return new DataOperationMessage(DataOperationResultEnum.SUCCESS,"");
}
public DataOperationMessage SetData(Identify id,IField field,object value)
{略}
public DataOperationMessage EraseData(Identify id)
{略}
public DataOperationMessage ListField(out IField[] fields)
{略}
}
以上代码实现对OLEDB组件的包装并实现IDataTable接口。同样的,通过对CAD平台内置数据库的包装并实现IDataTable接口,便可在业务功能中使用IDataTable接口获取不同数据库的无区别一致性访问,使得业务功能与具体的数据库及CAD平台无关。
五、实施案例
完成矢量建库系统的各项单元及集成测试后,便可以对具体的业务项目进行定制。2014年通过对本系统的扩展,在AutoCAD 2007平台上成功开发了湖南省农村土地集体土地调查软件。该软件除具备常规的图形绘制、属性录入管理功能外,还有如下功能:
1) 以空间拓扑及运算扩展库为基础,实现了对权属图斑的空间拓扑检查、自动构面、空间对象逻辑性检查、四至自动填写、图形自动编号等业务功能。
2) 以对空间对象与相关属性数据的包装为基础,实现了各类权属要素及相关要素(地块、界址点线、图斑等)的集成管理,通过对CAD平台内置数据库与mdb数据库的包装实现了一致性访问,除可以非常容易地对各类空间对象属性与非空间属性进行操作外,还实现了各类属性及属性间的约束性检查、类型检查及逻辑一致性检查等业务功能。
3) 以空间实体、属性接口与实体类为基础,实现了SHP格式的数据交换业务功能(根据需要也可以很容易实现其他类型的数据交换格式扩展)。
4) 基于数据接口提供了各类报表的输出功能等。整个软件系统通过将逻辑与实现分离,使得程序易于维护、扩展与移植,如对于Microstation用户,可以在不改动业务功能代码的情况下,通过将表示层重写,并对内置数据库进行重包装,实现对数据接口层的移植,移植的工作量大为减少。同样的,对于不同业务需求,只需要定义业务功能接口并实现后即可重用数据访问层、表示层。
六、结束语
本文展示了一种将CAD平台扩展为矢量建库系统的方法,该方法改造的建库系统继承了CAD本身强大的图形编辑与扩展能力,并在此基础上扩展了该建库系统的空间分析与属性管理能力。笔者组织开发的湖南省农村土地权属调查软件集数据的前端采集与后期图形属性建库能力于一体,在湖南省农村土地所有权与经营权确权项目实施过程中发挥了重要作用,取得了良好的社会效益与经济效益,受到了省内使用单位的广泛好评。
参考文献:
[1]王要沛,贺学文,贾复生. 基于AutoCAD.NET平台下的C#语言开发测量软件技术[J].测绘与空间地理信息,2013,36(7):243-245.
[2]索俊锋,赵军. 基于MicroStation的地籍测量系统的设计与实现[J].测绘科学,2006(5):113-114.
[3]刘仁峰,艾驰,聂智龙,等. 基于AutoCAD数据采编平台开发与实现[J].测绘地理信息,2013,38(2):76-78.
[4]胡庆武,陈亚男,周洋,等. 开源GIS进展及其典型应用研究[J] .地理信息世界,2009(1):46-55.
[5]张林.软件工程[M].北京:中国铁道出版社,2009:35-38.
[6]曾洪飞,卢择临,张帆.AutoCADVBA&VB.NET开发基础与实例教[M]. 北京:中国电力出版社,2013:245-257.
[7]王珂珂,张立朝,寇静行,等. 空间位置驱动的地理信息系统软件集成[J].测绘通报,2009(12):49-52.
[8]郭庆胜,马潇雅,王琳,等. 基于插件技术的地理信息时空分布与变化特征提取系统的设计与实现[J].测绘通报,2013(4):18-20.
Design and Realization of Vector Database Construction Based on CAD Platform
LUO Haiyan,HE Jie
收稿日期:2015-07-15; 修回日期: 2015-11-03
作者简介:罗海燕(1968—),男,硕士,高级工程师,主要从事地理信息系统研究与软件开发工作。E-mail:hnhy_lhy@163.com
中图分类号:P208
文献标识码:B
文章编号:0494-0911(2016)06-0105-04
引文格式: 罗海燕,何洁. CAD平台下矢量数据建库系统的设计与实现[J].测绘通报,2016(6):105-108.DOI:10.13474/j.cnki.11-2246.2016.0202.