?

CAD平臺下矢量數據建庫系統的設計與實現

2016-07-15 05:08羅海燕
測繪通報 2016年6期
關鍵詞:擴展設計與實現

羅海燕,何 潔

(湖南省第一測繪院,湖南 衡陽 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?,F以在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 realIntectPts = new 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.

猜你喜歡
擴展設計與實現
淺談數據挖掘和自適應算法的應用
多維傳播語境下的播音主持功能與拓展研究
校園電商平臺的設計與實現
高校文化建設中視覺識別系統的設計和實現
科研院所科研信息化管理系統的設計與應用
淺談小學英語教學中的情境教學法
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合