羅海燕,何 潔
(湖南省第一測(cè)繪院,湖南 衡陽 421001)
?
CAD平臺(tái)下矢量數(shù)據(jù)建庫系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
羅海燕,何潔
(湖南省第一測(cè)繪院,湖南 衡陽 421001)
摘要:CAD平臺(tái)具有強(qiáng)大的矢量數(shù)據(jù)編輯能力與圖形表現(xiàn)能力,通過對(duì)其薄弱的空間分析能力和相關(guān)業(yè)務(wù)能力進(jìn)行擴(kuò)展,可以使其成為一個(gè)良好的矢量數(shù)據(jù)建庫系統(tǒng)。本文結(jié)合工作實(shí)際,探討、設(shè)計(jì)了其擴(kuò)展的方法,并成功實(shí)現(xiàn)。
關(guān)鍵詞:CAD;矢量數(shù)據(jù)庫;擴(kuò)展;GIS;設(shè)計(jì)與實(shí)現(xiàn)
以AutoCAD、Microstation等為代表的主流制圖平臺(tái)矢量圖形操作簡單,圖形編輯功能強(qiáng)大,并且體系結(jié)構(gòu)開放,同時(shí)具備強(qiáng)大的二次開發(fā)能力,這使得其在測(cè)繪地理信息行業(yè)數(shù)據(jù)采集過程中得到了廣泛運(yùn)用。但由于缺乏空間參考系統(tǒng)與空間分析(主要是缺乏拓?fù)涔δ?、數(shù)據(jù)庫管理方面能力薄弱等原因,使得這些平臺(tái)在地理信息數(shù)據(jù)庫建設(shè)中的應(yīng)用受到制約。如果能夠通過二次開發(fā)對(duì)CAD平臺(tái)進(jìn)行擴(kuò)展,為其建立一套拓?fù)涔ぞ?,并?duì)其數(shù)據(jù)庫系統(tǒng)進(jìn)行擴(kuò)充,揚(yáng)長避短,將極大地提高其在GIS領(lǐng)域的生命力。本文就如何擴(kuò)充CAD平臺(tái)的空間分析與數(shù)據(jù)庫管理能力進(jìn)行分析、設(shè)計(jì)與實(shí)現(xiàn)。
一、矢量數(shù)據(jù)建庫系統(tǒng)的基本需求及CAD平臺(tái)需要滿足的條件
1) 系統(tǒng)要能夠表現(xiàn)GIS的基本要素:點(diǎn)、線、面、體、注記,為了簡化系統(tǒng)處理,線要素不含曲線,且不考慮網(wǎng)狀要素。要求能夠方便對(duì)圖形數(shù)據(jù)進(jìn)行輸入、修改與刪除,因此CAD平臺(tái)需要具備相應(yīng)的圖形元素來完成表現(xiàn)。
2) 系統(tǒng)具備一定的空間分析能力,能夠滿足建庫過程中各類圖形拓?fù)湫枰?,主要?shí)現(xiàn)基本的圖形運(yùn)算:求交、求并、求差、求異、包含、覆蓋等,并在此基礎(chǔ)上進(jìn)行靈活擴(kuò)充。要求能夠?qū)崿F(xiàn)快速運(yùn)算,時(shí)間復(fù)雜度不大于O(n)。
3) 系統(tǒng)具備一定的數(shù)據(jù)管理能力,能夠?qū)D形數(shù)據(jù)與屬性數(shù)據(jù)進(jìn)行關(guān)聯(lián),并且方便進(jìn)行錄入、修改、刪除、查詢等操作,同時(shí)能夠?qū)傩詳?shù)據(jù)與多種數(shù)據(jù)庫關(guān)聯(lián),如SQL Server、Access mdb數(shù)據(jù)庫等,同時(shí)能夠根據(jù)需要連接不同的數(shù)據(jù)庫。
4) 系統(tǒng)具備美觀、友好的UI界面。系統(tǒng)功能的擴(kuò)展導(dǎo)致用戶界面的增加,因此還需要CAD平臺(tái)提供有UI開發(fā)接口。同時(shí),新擴(kuò)展的功能需要與用戶進(jìn)行交互,這就需要視圖操作接口及圖形對(duì)象互動(dòng)接口。
5) 系統(tǒng)能夠與主流的GIS平臺(tái)進(jìn)行數(shù)據(jù)交換,交換后的圖形與數(shù)據(jù)庫經(jīng)直接或簡單映射即可使用。
經(jīng)過分析,目前應(yīng)用廣泛的AutoCAD、Microstation對(duì)條件1)、4)容易實(shí)現(xiàn),條件5)通過輸入輸出GIS平臺(tái)交換格式可滿足;而條件2)、3)實(shí)現(xiàn)困難,本文將重點(diǎn)闡述這兩點(diǎn)如何設(shè)計(jì)與實(shí)現(xiàn)。
二、選擇設(shè)計(jì)框架
良好的設(shè)計(jì)框架對(duì)成功實(shí)現(xiàn)軟件系統(tǒng)很重要。分析可知,該系統(tǒng)的目標(biāo)是通過具備一定條件的CAD平臺(tái)表達(dá)GIS數(shù)據(jù),并實(shí)現(xiàn)功能的擴(kuò)充。它與軟件工程中MVC框架非常類似,該模式如圖1所示。其中,View為視圖,Model為數(shù)據(jù)模型,Controller為控制器。如果將CAD平臺(tái)視為View,GIS數(shù)據(jù)模型或相關(guān)業(yè)務(wù)模型視為Model,那么需要建立的就是Controller。Controller的功能強(qiáng)弱決定了CAD數(shù)據(jù)對(duì)GIS數(shù)據(jù)的表達(dá)能力;同時(shí),Controller與View、Model的耦合度決定了其適應(yīng)性,耦合度越低其依賴于某個(gè)CAD平臺(tái)或某個(gè)GIS數(shù)據(jù)模型的程度就越低。
三、概要設(shè)計(jì)
為了保證同一種控制器模型能為不同的CAD平臺(tái)使用,同時(shí)使得設(shè)計(jì)的軟件方便移植與維護(hù),本文采用分層設(shè)計(jì)的方式,將CAD平臺(tái)視為一個(gè)抽象層,并在其與具體的功能實(shí)現(xiàn)間建立一個(gè)映射接口,使得CAD平臺(tái)與功能實(shí)現(xiàn)分離。同理,將具體的數(shù)據(jù)庫視為數(shù)據(jù)訪問層,在其與功能實(shí)現(xiàn)間設(shè)置一個(gè)數(shù)據(jù)接口,使得同一功能實(shí)現(xiàn)能很方便地在不同CAD平臺(tái)間移植,同時(shí)能從不同數(shù)據(jù)源獲取數(shù)據(jù)。設(shè)計(jì)概要如圖2所示。
圖1 MVC設(shè)計(jì)模式
圖2 分層架構(gòu)
四、詳細(xì)設(shè)計(jì)
GIS數(shù)據(jù)包括圖形要素與非圖形要素兩部分。圖形基本要素包括點(diǎn)、線、面、體,另外還存在一些復(fù)合業(yè)務(wù)要素,如地籍系統(tǒng)中的宗地要素等;其中體屬于三維對(duì)象,為了簡化系統(tǒng)暫不考慮該對(duì)象。非圖形要素一般可用數(shù)據(jù)表來呈現(xiàn)。該系統(tǒng)詳細(xì)設(shè)計(jì)的重點(diǎn)在于點(diǎn)、線、面、表這4類要素的表現(xiàn)與相關(guān)處理。
1. 基礎(chǔ)接口與實(shí)體類設(shè)計(jì)
為了統(tǒng)一表達(dá)空間對(duì)象,先設(shè)計(jì)幾何基礎(chǔ)接口IGeometry,再設(shè)計(jì)點(diǎn)、線、面3種空間對(duì)象接口,均繼承自IGeometry接口。另外,為了將圖形和相關(guān)屬性數(shù)據(jù)合成為一個(gè)整體要素,設(shè)計(jì)Feature類,它由空間對(duì)象接口IGeometry與數(shù)據(jù)訪問接口IDataAccess復(fù)合而成,要素實(shí)例的空間對(duì)象與相關(guān)屬性通過此類進(jìn)行一致性操縱。為了對(duì)同一類型要素進(jìn)行一致性管理,設(shè)計(jì)FeatureClass類統(tǒng)一維護(hù)Feature實(shí)例對(duì)象。實(shí)體類與基礎(chǔ)接口主要設(shè)計(jì)如圖3所示。
2. 數(shù)據(jù)表示層設(shè)計(jì)
數(shù)據(jù)表示層主要負(fù)責(zé)將GIS數(shù)據(jù)映射為CAD數(shù)據(jù)數(shù)據(jù),主要包括3方面:符號(hào)表達(dá)系統(tǒng)設(shè)計(jì)、圖形繪制系統(tǒng)設(shè)計(jì)、界面設(shè)計(jì)。這一層的設(shè)計(jì)與具體的CAD平臺(tái)相關(guān),并且已經(jīng)有許多成熟的實(shí)現(xiàn)方案,如南方CASS、GeoOne等軟件。
圖3 實(shí)體類與基礎(chǔ)接口主要部分
3. 業(yè)務(wù)功能接口及實(shí)現(xiàn)
系統(tǒng)需要擴(kuò)展的業(yè)務(wù)功能實(shí)際需要與建庫過程具體需求有關(guān),現(xiàn)以基本業(yè)務(wù)功能的圖形拓?fù)溥\(yùn)算為例進(jìn)行說明。
(1) 業(yè)務(wù)功能接口設(shè)計(jì)
為了實(shí)現(xiàn)幾何對(duì)象的拓?fù)溥\(yùn)算功能,首先定義業(yè)務(wù)功能接口ITopologyOperator,如圖4所示。
圖4 業(yè)務(wù)功能接口ITopologyOperator
(2) 業(yè)務(wù)功能的實(shí)現(xiàn)
業(yè)務(wù)功能的實(shí)現(xiàn)有兩種方式:一是在基礎(chǔ)接口和實(shí)體類的基礎(chǔ)上定義新的功能類來實(shí)現(xiàn)IToplogyOperator接口;二是在目標(biāo)CAD平臺(tái)上包裝現(xiàn)有實(shí)體對(duì)象實(shí)現(xiàn)IToplogyOperator接口。前者需要自行實(shí)現(xiàn)空間對(duì)象點(diǎn)、線、面基本圖形運(yùn)算;后者可以利用目標(biāo)平臺(tái)本身提供的基本圖形運(yùn)算API。現(xiàn)以在AutoCAD平臺(tái)中使用C#實(shí)現(xiàn)IPolyline接口中IToplogyOperator的IntersectOperater操作為實(shí)例來說明拓?fù)溥\(yùn)算功能的具體實(shí)現(xiàn):
public class TPolyline:IPolyline
{
internal Polyline m_pline = null;
…
∥IToplogyOperator中的IntersectOperater接口實(shí)現(xiàn)
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);
}
與多段線交集運(yùn)算
需與本體進(jìn)行交叉運(yùn)算的多段線
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();
}
…
}
在客戶端調(diào)用函數(shù):IGeometry[] geoAry=pline. IntectOperater(otherPline),即可進(jìn)行多段線求交集操作,達(dá)到業(yè)務(wù)功能的實(shí)現(xiàn)。
對(duì)于其他類似的業(yè)務(wù)功能,只要先定義相應(yīng)的業(yè)務(wù)功能接口,然后在不同的CAD平臺(tái)進(jìn)行實(shí)現(xiàn),就可以很方便地進(jìn)行業(yè)務(wù)功能的移植和擴(kuò)展。如可以將空間索引作為一個(gè)業(yè)務(wù)功能進(jìn)行擴(kuò)展,為不同CAD平臺(tái)提供空間索引服務(wù),使得大數(shù)據(jù)量的空間計(jì)算可以快速進(jìn)行。
4. 數(shù)據(jù)訪問接口設(shè)計(jì)
數(shù)據(jù)訪問接口主要負(fù)責(zé)圖形屬性數(shù)據(jù)的訪問操作,因此需要讀、寫、刪除和查詢功能。根據(jù)需要定義IDataTable接口,通過在數(shù)據(jù)層中具體實(shí)現(xiàn)該接口,可以方便擴(kuò)展對(duì)各類數(shù)據(jù)庫的操作,這樣通過在數(shù)據(jù)層中的不同實(shí)現(xiàn),使得建庫系統(tǒng)既可以用CAD平臺(tái)的內(nèi)置數(shù)據(jù)庫,又可以實(shí)現(xiàn)使用各種通用數(shù)據(jù)庫,甚至可以實(shí)現(xiàn)自定義的數(shù)據(jù)表。如圖5所示。
5. 數(shù)據(jù)層實(shí)現(xiàn)
為了能使建庫系統(tǒng)具備對(duì)空間數(shù)據(jù)相關(guān)的屬性數(shù)據(jù)訪問能力,必須針對(duì)相應(yīng)的數(shù)據(jù)庫實(shí)現(xiàn)具體的數(shù)據(jù)接口,現(xiàn)以C#語言封裝OLEDB組件實(shí)現(xiàn)IDataTable接口來說明實(shí)現(xiàn)方法。
圖5 數(shù)據(jù)訪問接口族主要部分
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)
{略}
}
以上代碼實(shí)現(xiàn)對(duì)OLEDB組件的包裝并實(shí)現(xiàn)IDataTable接口。同樣的,通過對(duì)CAD平臺(tái)內(nèi)置數(shù)據(jù)庫的包裝并實(shí)現(xiàn)IDataTable接口,便可在業(yè)務(wù)功能中使用IDataTable接口獲取不同數(shù)據(jù)庫的無區(qū)別一致性訪問,使得業(yè)務(wù)功能與具體的數(shù)據(jù)庫及CAD平臺(tái)無關(guān)。
五、實(shí)施案例
完成矢量建庫系統(tǒng)的各項(xiàng)單元及集成測(cè)試后,便可以對(duì)具體的業(yè)務(wù)項(xiàng)目進(jìn)行定制。2014年通過對(duì)本系統(tǒng)的擴(kuò)展,在AutoCAD 2007平臺(tái)上成功開發(fā)了湖南省農(nóng)村土地集體土地調(diào)查軟件。該軟件除具備常規(guī)的圖形繪制、屬性錄入管理功能外,還有如下功能:
1) 以空間拓?fù)浼斑\(yùn)算擴(kuò)展庫為基礎(chǔ),實(shí)現(xiàn)了對(duì)權(quán)屬圖斑的空間拓?fù)錂z查、自動(dòng)構(gòu)面、空間對(duì)象邏輯性檢查、四至自動(dòng)填寫、圖形自動(dòng)編號(hào)等業(yè)務(wù)功能。
2) 以對(duì)空間對(duì)象與相關(guān)屬性數(shù)據(jù)的包裝為基礎(chǔ),實(shí)現(xiàn)了各類權(quán)屬要素及相關(guān)要素(地塊、界址點(diǎn)線、圖斑等)的集成管理,通過對(duì)CAD平臺(tái)內(nèi)置數(shù)據(jù)庫與mdb數(shù)據(jù)庫的包裝實(shí)現(xiàn)了一致性訪問,除可以非常容易地對(duì)各類空間對(duì)象屬性與非空間屬性進(jìn)行操作外,還實(shí)現(xiàn)了各類屬性及屬性間的約束性檢查、類型檢查及邏輯一致性檢查等業(yè)務(wù)功能。
3) 以空間實(shí)體、屬性接口與實(shí)體類為基礎(chǔ),實(shí)現(xiàn)了SHP格式的數(shù)據(jù)交換業(yè)務(wù)功能(根據(jù)需要也可以很容易實(shí)現(xiàn)其他類型的數(shù)據(jù)交換格式擴(kuò)展)。
4) 基于數(shù)據(jù)接口提供了各類報(bào)表的輸出功能等。整個(gè)軟件系統(tǒng)通過將邏輯與實(shí)現(xiàn)分離,使得程序易于維護(hù)、擴(kuò)展與移植,如對(duì)于Microstation用戶,可以在不改動(dòng)業(yè)務(wù)功能代碼的情況下,通過將表示層重寫,并對(duì)內(nèi)置數(shù)據(jù)庫進(jìn)行重包裝,實(shí)現(xiàn)對(duì)數(shù)據(jù)接口層的移植,移植的工作量大為減少。同樣的,對(duì)于不同業(yè)務(wù)需求,只需要定義業(yè)務(wù)功能接口并實(shí)現(xiàn)后即可重用數(shù)據(jù)訪問層、表示層。
六、結(jié)束語
本文展示了一種將CAD平臺(tái)擴(kuò)展為矢量建庫系統(tǒng)的方法,該方法改造的建庫系統(tǒng)繼承了CAD本身強(qiáng)大的圖形編輯與擴(kuò)展能力,并在此基礎(chǔ)上擴(kuò)展了該建庫系統(tǒng)的空間分析與屬性管理能力。筆者組織開發(fā)的湖南省農(nóng)村土地權(quán)屬調(diào)查軟件集數(shù)據(jù)的前端采集與后期圖形屬性建庫能力于一體,在湖南省農(nóng)村土地所有權(quán)與經(jīng)營權(quán)確權(quán)項(xiàng)目實(shí)施過程中發(fā)揮了重要作用,取得了良好的社會(huì)效益與經(jīng)濟(jì)效益,受到了省內(nèi)使用單位的廣泛好評(píng)。
參考文獻(xiàn):
[1]王要沛,賀學(xué)文,賈復(fù)生. 基于AutoCAD.NET平臺(tái)下的C#語言開發(fā)測(cè)量軟件技術(shù)[J].測(cè)繪與空間地理信息,2013,36(7):243-245.
[2]索俊鋒,趙軍. 基于MicroStation的地籍測(cè)量系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].測(cè)繪科學(xué),2006(5):113-114.
[3]劉仁峰,艾馳,聶智龍,等. 基于AutoCAD數(shù)據(jù)采編平臺(tái)開發(fā)與實(shí)現(xiàn)[J].測(cè)繪地理信息,2013,38(2):76-78.
[4]胡慶武,陳亞男,周洋,等. 開源GIS進(jìn)展及其典型應(yīng)用研究[J] .地理信息世界,2009(1):46-55.
[5]張林.軟件工程[M].北京:中國鐵道出版社,2009:35-38.
[6]曾洪飛,盧擇臨,張帆.AutoCADVBA&VB.NET開發(fā)基礎(chǔ)與實(shí)例教[M]. 北京:中國電力出版社,2013:245-257.
[7]王珂珂,張立朝,寇靜行,等. 空間位置驅(qū)動(dòng)的地理信息系統(tǒng)軟件集成[J].測(cè)繪通報(bào),2009(12):49-52.
[8]郭慶勝,馬瀟雅,王琳,等. 基于插件技術(shù)的地理信息時(shí)空分布與變化特征提取系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].測(cè)繪通報(bào),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—),男,碩士,高級(jí)工程師,主要從事地理信息系統(tǒng)研究與軟件開發(fā)工作。E-mail:hnhy_lhy@163.com
中圖分類號(hào):P208
文獻(xiàn)標(biāo)識(shí)碼:B
文章編號(hào):0494-0911(2016)06-0105-04
引文格式: 羅海燕,何潔. CAD平臺(tái)下矢量數(shù)據(jù)建庫系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].測(cè)繪通報(bào),2016(6):105-108.DOI:10.13474/j.cnki.11-2246.2016.0202.