唐蜜 戴蕾 岳元旺
摘要:燃氣管網(wǎng)矢量化繪圖插件技術(shù)研究與實現(xiàn),提出了一套基于AutoCAD軟件進行燃氣管網(wǎng)矢量化工藝中圖形繪制的插件技術(shù)開發(fā)方法,指出了一個全面采用統(tǒng)一軟件過程實施軟件項目的研究方向,采用RUP的規(guī)范進行項目管理、運用UML進行業(yè)務和系統(tǒng)的建模與設(shè)計,并用面向?qū)ο蟮乃枷脒M行編碼和設(shè)計。通過多個實際項目的應用表明:采用本文提供的插件開發(fā)技術(shù)和設(shè)計思路,研發(fā)的矢量化繪圖軟件系統(tǒng),能很好地滿足燃氣領(lǐng)域?qū)芫W(wǎng)GIS的數(shù)據(jù)管理需求、提高項目實施效率、降低項目實施成本。
關(guān)鍵詞:GIS;矢量化;插件技術(shù);燃氣管網(wǎng);統(tǒng)一軟件過程;UML;面向?qū)ο?;時序圖
中圖分類號:TP399 文獻標識碼:A 文章編號:1009-3044(2014)05-1108-07
Gas Pipe Network GIS Vector Drawing Based on AutoCAD Plug-in Technology Research
TANG Mi, DAI Lei,YUE Yuan-wang
(School of Science Eng. AND Info.,South West Petroleum Univ.,Chengdu 610065,China)
Abstract: Research and Implementation of the gas pipe network GIS vector drawing based on AutoCAD plug-in technology, proposed a new set of plug-ins based on AutoCAD software vectorization process gas network graphing technology development, pointed out that a comprehensive implementation of the unified software processthe research direction of the software project, the RUP norms for project management, the use of UML for business modeling and system design, detailed design and coding using object-oriented technology. This article provides a plug-in development technology and design ideas, vector drawing software R & D system, to meet the data management needs of the gas field pipe network GIS, shorten the project cycle vectorization show that the application of a number of practical projects:The implementation of the project, reduce costs.
Key words: GIS; vectorization; plug-in technology; gas pipeline network; unified Process; the UML; object-oriented; timing diagram
矢量化,是將紙質(zhì)設(shè)計圖轉(zhuǎn)化成電子格式、并對其處理的過程,其在計算機顯示出的圖形為矢量圖。矢量圖為一系列由點、線、多邊形和弧線等組成的圖形,可通過計算機指令來描述和記錄。此外,矢量圖具有存儲量小,易于編輯,易進行放大或壓縮處理等優(yōu)點,因此常用于計算機的輔助設(shè)計中。常見的矢量圖處理軟件有CoreDRAW、AutoCAD、FreeHand等。
燃氣管網(wǎng)矢量化,是將燃氣管網(wǎng)的相關(guān)地圖、管線、管件等資料,經(jīng)過計算機圖形或者圖像系統(tǒng)光—電轉(zhuǎn)換,量化為點陣數(shù)字圖像,再經(jīng)圖像處理和曲線矢量化,生成可顯示的地理信息系統(tǒng)地圖數(shù)據(jù)文件,并對文件可以進行計算、修改、漫游、標注、管理和打印的處理功能。
初期設(shè)計的燃氣管網(wǎng)常用的開發(fā)方案有三種:一、在大型的GIS平臺上進行開發(fā),其優(yōu)點是地圖信息的顯示和地理信息的共享等處理非常方便,但由于對城市的地理信息系統(tǒng)依賴較高,沒法獨立實施;二、 基于底層開發(fā),缺點是開發(fā)成本高,工作量大,且開發(fā)出來的性能也不及GIS系統(tǒng);三、采用AutoCAD繪圖軟件進行開發(fā),雖然AutoCAD只提供的圖形數(shù)據(jù)管理等有限功能,但可以在其基礎(chǔ)上開發(fā)一套合適的軟件,這不僅可以減少開發(fā)成本,而且對城市的地理信息系統(tǒng)沒有依賴性,可離網(wǎng)獨立實施。在對三種進行對比分析后,采用第三種開發(fā)方式。
1 總體設(shè)計方案簡述
燃氣管網(wǎng)矢量化整個實施過程包含管網(wǎng)繪制、圖形處理、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)檢驗等環(huán)節(jié),上一環(huán)節(jié)的結(jié)果是下一個的數(shù)據(jù)來源,在每完成一次管網(wǎng)的繪制和圖形處理環(huán)節(jié),都將按照已制定的業(yè)務規(guī)則和質(zhì)量標準,對該階段成果進行檢驗,達到數(shù)據(jù)質(zhì)量管理標準方能進入下一個處理環(huán)節(jié),若經(jīng)數(shù)據(jù)檢驗未達標,則返還數(shù)據(jù)進行修正,直至合格,同時記錄返還次數(shù),著重標出返還次數(shù)多的數(shù)據(jù),在統(tǒng)計查詢模塊中有按返回次數(shù)排序功能,以便于提示。
本文中的燃氣管網(wǎng)GIS矢量化繪圖軟件, 其主要功能為實現(xiàn)管件、管線、閥門、調(diào)壓設(shè)施等管網(wǎng)設(shè)施的數(shù)據(jù)管理和圖形繪制,存儲方式為圖形或關(guān)系數(shù)據(jù)庫。
由于專業(yè)的大型GIS系統(tǒng)和單一的矢量化繪圖軟件的開發(fā)成本高、周期長并且常無法離網(wǎng)實施,所以在AutoCAD矢量化繪圖軟件上,開發(fā)同時滿足燃氣管網(wǎng)矢量化數(shù)據(jù)存儲需求和能提高工程實施的實施效率和降低成本效用的全新的矢量化繪圖插件。具體做法如下,采用兩套數(shù)據(jù)庫系統(tǒng)進行圖-數(shù)關(guān)聯(lián)存儲信息的保存:用文件數(shù)據(jù)庫SQLite存儲管網(wǎng)設(shè)施業(yè)務數(shù)據(jù),用AutoCAD矢量化文件中的dwg存儲圖形數(shù)據(jù),另在圖形數(shù)據(jù)庫中用圖形元素對應的屬性數(shù)據(jù)庫表的主鍵來對應圖-數(shù)之間的關(guān)系,將矢量化信息與業(yè)務屬性聯(lián)系起來。
燃氣管網(wǎng)GIS矢量化繪圖插件,在概述中提到的開發(fā)方法的基礎(chǔ)上,該文采用了COM(組件對象模型)和數(shù)據(jù)庫技術(shù)對系統(tǒng)進行了開發(fā),采用面向?qū)ο蠹夹g(shù)進行軟件系統(tǒng)的分析、設(shè)計,采納統(tǒng)一軟件過程(RUP)的規(guī)范來組織軟件項目的開發(fā)實施,運用UML進行軟件系統(tǒng)的需求分析、業(yè)務建模、邏輯設(shè)計。編碼的語言為Microsoft 的C#語言,CAD開發(fā)驅(qū)動和圖形GIS算法基礎(chǔ)庫為Autodesk開發(fā)包,并基于AtuoCAD2010版本進行設(shè)計和開發(fā)。
2 系統(tǒng)框架設(shè)計
2.1 核心類設(shè)計
遵照系統(tǒng)架構(gòu)設(shè)計的分層設(shè)計要求,結(jié)合面向?qū)ο笙到y(tǒng)設(shè)計的指導原則,燃氣管網(wǎng)GIS矢量化繪圖插件的內(nèi)部核心對象分交互界面層、應用算法層、實體對象層和驅(qū)動層共4個層次進行類設(shè)計。
交互界面層,按照用戶操作和外部交互的要求抽象出CommandEntry、frmProject、frmPipe、frmPipeRiser、frmPipeFitting、frmBooster、frmGauge、frmValve、frmStation等主要交互類,實現(xiàn)AutoCAD命令解析與響應,提供工程、管線、管件、立管、閥門、計量設(shè)備、調(diào)壓設(shè)施等管網(wǎng)設(shè)施的屬性操作界面。
應用算法層,按照燃氣管網(wǎng)設(shè)施圖形處理、屬性讀寫應用算法的要求抽象出ProjectManager、FileManager、LayerManager、LayerConfig、SpatialOperator、AttributeRule、GISRule等核心算法類,實現(xiàn)對文件管理、工程管理、CAD圖層配置與管理、屬性規(guī)則檢查、圖形規(guī)則檢查等核心算法的封裝。
實體對象層,按照燃氣管網(wǎng)設(shè)施圖形、屬性信息的存儲要求抽象出DBProject、DBPipe、DBPipeFit、DBBooster、DBValve、DBGauge等主要屬性類,以及GISPoint、GISLine、GISPolyLine、GeometryMediator等主要圖形類,實現(xiàn)對圖形、屬性的存取、數(shù)據(jù)校驗等業(yè)務實體數(shù)據(jù)及功能的封裝。
驅(qū)動層,按照插件與外部的軟件系統(tǒng)、驅(qū)動程序、數(shù)據(jù)庫和文件的交互要求抽象出DBSQLite、ImgFile、LogFile、Geometry、CADDriver等驅(qū)動接口類,實現(xiàn)對SQLite數(shù)據(jù)庫、圖像文件、工程管理日志、GIS基礎(chǔ)算法庫、AutoCAD軟件的接口封裝。
燃氣管網(wǎng)GIS矢量化繪圖插件的類設(shè)計總圖如圖1所示。
2.2 體系架構(gòu)設(shè)計
燃氣管網(wǎng)GIS矢量化繪圖插件,其分層架構(gòu)設(shè)計在邏輯上劃分為交互界面層、應用算法層、實體對象層和驅(qū)動層4個層次。交互界面層,是用戶對燃氣管網(wǎng)設(shè)施進行繪制操作的界面及所有AutoCAD命令解析和功能接口。應用算法層封裝所有的燃氣點、線、面設(shè)施的圖形和屬性的關(guān)聯(lián)存儲和加載顯示算法,不僅可接收來自交互界面層的操作請求,還可組合調(diào)用實體對象層中各實體類的public方法,構(gòu)造出一個個復雜的應用算法。實體對象層,分為圖形對象和屬性對象,包含有燃氣管網(wǎng)中各個具體的點、線、面設(shè)施,屬性對象封裝管網(wǎng)設(shè)施的業(yè)務信息,對應SQLite屬性數(shù)據(jù)庫,包括工程、管件、管線、立管、閥門、調(diào)壓設(shè)施、計量設(shè)備等;圖形對象封裝管網(wǎng)設(shè)施的GIS信息,對應AutoCAD的dwg文件,包括點、線、面等圖形元素。驅(qū)動層包括對SQLite數(shù)據(jù)庫操作訪問的封裝、外部文件、GIS基礎(chǔ)算法庫接口的封裝和AutoCAD二次開發(fā)接口的封裝,為應用算法層、實體對象層提供數(shù)據(jù)庫操作、圖形計算、CAD命令響應和操作控制的接口,完成矢量化繪圖插件與所有外部的軟件系統(tǒng)、驅(qū)動程序、數(shù)據(jù)庫和文件等交互的統(tǒng)一管理。
燃氣管網(wǎng)GIS矢量化繪圖插件的體系架構(gòu)設(shè)計如圖2所示。
圖2 燃氣管網(wǎng)GIS矢量化繪圖插件的體系架構(gòu)
3 系統(tǒng)交互設(shè)計
燃氣管網(wǎng)GIS矢量化繪圖插件的主要業(yè)務流程包括加載矢量化工程,繪制管件、管線、立管、閥門、調(diào)壓設(shè)施、計量設(shè)備,以及檢查管網(wǎng)設(shè)施屬性、工藝關(guān)系、幾何圖形等。根據(jù)統(tǒng)一軟件過程的面向?qū)ο笤O(shè)計思路,采用細化業(yè)務流程中各業(yè)務對象之間的交互來設(shè)計對象的方法和數(shù)據(jù),由此完成類的詳細設(shè)計。列舉其中典型的加載矢量化工程、打斷管線、管網(wǎng)設(shè)施屬性檢查、管網(wǎng)拓撲關(guān)系檢查4個業(yè)務流程的交互設(shè)計。
3.1 加載矢量化工程交互設(shè)計
加載矢量化工程的過程為,用戶在AutoCAD軟件的命令行輸入工程加載命令,插件提示用戶選擇將要加載的工程文件,用戶選擇文件后再點擊確定按鈕;矢量化插件打開用戶指定的工程文件,首先加載屬性數(shù)據(jù)庫SQLite文件,再讀取對應的dwg文件到內(nèi)存中,遍歷dwg文件中的矢量化GIS元素,調(diào)用CAD驅(qū)動程序和GIS基礎(chǔ)算法庫,依次裝載圖形元素和屬性元素;最后根據(jù)矢量化工程的坐標,在相應的坐標區(qū)域顯示加載的工程。
加載矢量化工程的業(yè)務流程涉及CommandEntry、FileManager、DBProject、LiteDBOperation、LayerManager、CADDriver等對象。
加載矢量化工程的交互過程設(shè)計如圖3所示。
圖3 加載矢量化工程的交互過程
3.2 打斷管線交互設(shè)計
對打斷管線的處理為,用戶在AutoCAD軟件操作界面中,點擊工具欄上的“打斷管線”按鈕,然后選擇需被打斷的管線;插件將復制所選管線的圖形元素和屬性元素,從點設(shè)施所在坐標重新計算打斷后兩段管線的長度,并分別設(shè)置兩段管線的長度;管道打斷操作結(jié)束后,插件將操作區(qū)域自動平移到管道被打斷處,并顯示操作結(jié)果。
打斷管線的業(yè)務流程涉及CommandEntry、GeometryMediator、DBDevice、LiteDBOperation、CADDriver等對象。
打斷管線的交互過程如圖4所示。
圖4 打斷管線的交互過程
3.3 管網(wǎng)設(shè)施屬性檢查交互設(shè)計
管網(wǎng)設(shè)施屬性檢查的處理為,通過用戶對AutoCAD軟件操作界面中的工具欄上的“屬性檢查”按鈕的點擊,使插件自動遍歷當前矢量化工程的所有圖形元素,并加載對應的附屬屬性,對管件、立管、管線、閥門、計量設(shè)備、調(diào)壓設(shè)施等逐一進行屬性數(shù)據(jù)的合法性、一致性和有效性檢查;檢查過程中自動記錄錯誤信息;屬性檢查結(jié)束時,插件提示檢查結(jié)果,并在矢量化圖上標識出檢查到的錯誤數(shù)據(jù),提示用戶進行錯誤數(shù)據(jù)修改。
管網(wǎng)設(shè)施屬性檢查的業(yè)務流程涉及LiteDBOperation、CommandEntry、LayerManager、GeometryMediator、AttributeRule等對象。
管網(wǎng)設(shè)施屬性檢查的交互過程如圖5所示。
圖5 管網(wǎng)設(shè)施屬性檢查的交互過程
3.4 管網(wǎng)拓撲關(guān)系檢查交互設(shè)計
管網(wǎng)拓撲關(guān)系檢查的處理過程為,用戶在AutoCAD軟件操作界面中,點擊工具欄上的“拓撲關(guān)系檢查”按鈕,插件自動遍歷當前矢量化工程的所有圖形元素,對點、線、面等圖形元素逐一進行燃氣管網(wǎng)拓撲工藝關(guān)系檢查,包括孤立點、孤立線、點重疊、線重疊、面重疊、線自相交、線同平面相交等情況;檢查過程中自動記錄錯誤信息;管網(wǎng)拓撲關(guān)系檢查結(jié)束時,插件提示檢查結(jié)果,并在矢量化圖上標識出檢查到的錯誤數(shù)據(jù),提示用戶進行錯誤數(shù)據(jù)修改。
管網(wǎng)拓撲關(guān)系檢查的業(yè)務流程涉及CommandEntry、LayerManager、GISRule、GeometryMediator、Geometry等對象。
管網(wǎng)拓撲關(guān)系檢查檢查的交互過程設(shè)計如圖6所示。
4 系統(tǒng)核心算法源碼
燃氣管網(wǎng)GIS矢量化繪圖插件,涉及AutoCAD接口技術(shù)、數(shù)據(jù)庫技術(shù)、圖形處理算法、業(yè)務規(guī)則引擎等大量復雜的核心技術(shù)。列舉其中幾處典型的代碼片段。
4.1 刪除AutoCAD中指定圖層
public static void EreaseLayer(string layername)
{
Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
DocumentLock locker = doc.LockDocument();
using (Transaction tm = doc.Database.TransactionManager.StartTransaction())
{
ObjectId idModel = SymbolUtilityServices.GetBlockModelSpaceId(doc.Database);
BlockTableRecord btr=tm.GetObject(idModel, OpenMode.ForWrite) as BlockTableRecord;
foreach (ObjectId oid in btr)
{
DBObject ob=tm.GetObject(oid, OpenMode.ForWrite);
if (ob == null) continue;
Entity ent = ob as Entity;
if (ent == null) continue;
if (ent.Layer.Equals(layername))
{
ent.Erase();
}}
tm.Commit();
}
locker.Dispose();
}
4.2 判斷點是否在線上
public static bool IsPointInLine(Point3d pos, Line line)
{
Point3d spos = line.StartPoint;
Point3d epos = line.EndPoint;
Vector3d v1 = substract(pos, spos);
Vector3d v2 = substract(epos, spos);
Vector3d d = v1.CrossProduct(v2);
Vector3d zeroV = new Vector3d(0, 0, 0);
if (vectorEqual(d,zeroV))
{
double minx = Math.Min(spos.X, epos.X);
double maxx = Math.Max(spos.X, epos.X);
double miny = Math.Min(spos.Y, epos.Y);
double maxy = Math.Max(spos.Y, epos.Y);
if (greatandeqthan(pos.X,minx)&&littleandeqthan(pos.X,maxx)&&greatandeqthan(pos.Y,miny)&&littleandeqthan(pos.Y,maxy))
return true;
}
return false;
}
5 結(jié)束語
相對于其他的燃氣行業(yè)管網(wǎng)GIS矢量化工程,該文闡述了一種矢量化繪圖插件開發(fā)技術(shù),其中采用面向?qū)ο蟮乃枷脒M行架構(gòu)設(shè)計、詳細設(shè)計和編碼,開發(fā)出了運行效率不錯、成本適中、操作便捷的燃氣管網(wǎng)矢量化繪圖插件。該文闡述的技術(shù)方案不僅對燃氣管網(wǎng)矢量化軟件系統(tǒng)的開發(fā)與實施一定的借鑒作用,對GIS領(lǐng)域其他應用軟件的分析與設(shè)計都有部分參考價值。
參考文獻:
[1] 雅各布森,布謝,朗博.統(tǒng)一軟件開發(fā)過程[M].周伯生,等,譯.北京:機械工業(yè)出版社,2002.
[2] 克魯森.Rational 統(tǒng)一過程實踐者指南——軟件工程系列[M].徐正生,陳逸,鄧啟威,譯.北京:中國電力出版社,2004.
[3] 福克斯.軟件工程設(shè)計導論:過程、原理與模式(UML2.0版)[M].韓毅,羅穎,譯.北京:清華大學出版社,2007.
[4] 布謝.面向?qū)ο蠓治雠c設(shè)計[M].2版.馮博琴,等,譯.北京:機械工業(yè)出版社,2003.
[5] Alfred V Aho, Monica S Lam.編譯原理[M].2版.北京:機械工業(yè)出版社,2012.
[6] 湯國安,趙牡丹.地理信息系統(tǒng)[M].北京:科學出版社,2000.
[7] 苗小莉.城市空間數(shù)據(jù)生產(chǎn)質(zhì)量控制[A].數(shù)字城市的理論與實踐[C].世界圖書出版公司,2001.
[8] 內(nèi)格爾,埃夫琴.C#高級編程[M].7版.李銘,譯.北京:清華大學出版社,2010.
[9] 岳元旺.城市燃氣管網(wǎng)矢量化技術(shù)方案研究[J].制造業(yè)自動化,2013,35(3).
[10] 田丹丹.基于AutoCAD的燃氣管網(wǎng)GIS矢量化拼接插件技術(shù)研究與實現(xiàn)[J].制造業(yè)自動化,2013, 35(7).