萬志剛,林超峰
(中山市測繪工程有限公司,廣東中山528403)
目前,在測繪工作中使用單一軟件不可能解決所有問題,需要多種應(yīng)用軟件配合使用來處理數(shù)據(jù)、管理成果,但應(yīng)用軟件種類數(shù)量的增多也增加了數(shù)據(jù)處理的工作量和復(fù)雜度。如何能夠既可以盡量多地利用已有成熟的軟件功能,又可以僅對基本數(shù)據(jù)進(jìn)行管理,降低數(shù)據(jù)管理難度,提高數(shù)據(jù)處理管理的效率,是對測繪工作者日常工作的一個新的要求。
為此,筆者研究了基于COM的編程技術(shù),在VB上實(shí)現(xiàn),可以對支持COM接口的應(yīng)用軟件的功能進(jìn)行間接調(diào)用,將多個數(shù)據(jù)處理管理過程集中在一個工具軟件上,實(shí)現(xiàn)了操作一體化,為今后工作提供了一個普適的解決方案。
COM為Component Object Model的縮寫,中文稱為組件對象模型,是微軟實(shí)現(xiàn)各軟件之間相互交互的一項軟件技術(shù)。應(yīng)用軟件通過支持COM接口,可讓外部程序訪問其內(nèi)部的數(shù)據(jù),調(diào)用內(nèi)部的功能。利用此技術(shù)可實(shí)現(xiàn)對多個應(yīng)用軟件的外部控制以及各應(yīng)用軟件間的進(jìn)程通信,達(dá)到多種應(yīng)用軟件協(xié)同作業(yè)的目的。其原理示意如圖1所示。
現(xiàn)階段在微軟操作系統(tǒng)上運(yùn)行的很多軟件都支持COM 接口,例如 Office Word、Excel,數(shù)據(jù)庫 Access、SQL server,繪圖軟件AutoCAD以及一些COM組件,例如超圖(SuperMap)地理信息系統(tǒng)開發(fā)組件等。利用微軟的易學(xué)易用的快速開發(fā)平臺VB6,可連接軟件開放的COM接口,訪問軟件數(shù)據(jù),調(diào)用軟件功能,從而實(shí)現(xiàn)各種應(yīng)用。
圖1 集成工具通過COM接口調(diào)用多個軟件數(shù)據(jù)和函數(shù)原理
以連接AutoCAD COM接口為例,啟動VB6,點(diǎn)擊菜單中的“工程”主菜單,在下拉菜單中選擇“引用”菜單項,會跳出引用對話框,選中所需的應(yīng)用軟件提供的接口文件,確定即可。例如連接AutoCAD 2006版接口,找到“AutoCAD 2006 Type Library”的選擇行,在前面打鉤后點(diǎn)擊確定即可,如圖2所示,其他軟件COM接口可同樣按上述方法連接。
圖2 連接AutoCAD COM接口
點(diǎn)擊工具欄中的“對象瀏覽器”圖標(biāo),會跳出對話框用于查看COM接口提供的各種對象,對象中包含多個可訪問的數(shù)據(jù)和函數(shù)等,如圖3。在相應(yīng)代碼段中即可添加對這些對象(數(shù)據(jù)和函數(shù))的變量聲明、創(chuàng)建、訪問、編輯等操作。
圖3 訪問AutoCAD COM接口中的對象
(1)AutoCAD
AutoCAD提供的對象主要有以下幾種:
AcadApplication代表正在運(yùn)行的AutoCAD軟件,AcadDocument代表打開的圖形文件;AcadDocument.ModelSpace代表此圖形文件的模型空間(創(chuàng)建圖形或編輯已有圖形主要在此對象中),AddText代表創(chuàng)建一個文本對象的函數(shù);AcadLWpolyline代表輕量級多段線(繪圖中主要使用的線類型);AcadLWpolyline.Coordinates和Coordinate代表此多段線各節(jié)點(diǎn)的坐標(biāo)數(shù)組屬性數(shù)據(jù)。
假設(shè)打開指定路徑下的一個圖形文件,代碼如下:
同理可循環(huán)打開多個文件。
假設(shè)pl為CAD中選中的一條多段線,plsum為此線的節(jié)點(diǎn)總數(shù),coord為節(jié)點(diǎn)數(shù)組(只記錄 X,Y),ltscale為此圖的線型比例以控制符號大小,cir為圓。可得到這條線的所有坐標(biāo),還可以在每個節(jié)點(diǎn)處創(chuàng)建界址點(diǎn)符號,其代碼如下:
(2)Excel
Excel提供的COM接口對象,包括Excel.Application,Excel.Workbook,Excel.Worksheet,Excel.Application.Cells()。
假設(shè)啟動一個新的Excel軟件,新建一個表格文件,設(shè)定一個表格頁面,然后在某一單元格中讀取或填寫數(shù)值。代碼如下:
(3)SuperMap
SuperMap超圖COM組件提供了眾多的接口對象,主要使用的是核心組件,包括數(shù)據(jù)源對象soData-Source,數(shù)據(jù)集對象soDataSet,記錄集對象soRecordSet和若干幾何對象例如點(diǎn)對象soGeoPoint,線對象soGeo-Line,面對象soGeoRegion等。
假設(shè)連接數(shù)據(jù)源(文件數(shù)據(jù)庫),代碼如下
假設(shè)從打開的AutoCAD中選擇一條閉合多段線,轉(zhuǎn)為soGeoRegion,填入相關(guān)屬性,加入數(shù)據(jù)源中的指定面數(shù)據(jù)集,代碼如下:
基于COM技術(shù)的程序可以應(yīng)用在測繪工作中的各環(huán)節(jié)(包括數(shù)據(jù)采集、內(nèi)業(yè)處理、成圖、數(shù)據(jù)管理、報表生成工作等),可以間接控制多個應(yīng)用軟件按流程完成項目各個環(huán)節(jié)的數(shù)據(jù)處理工作,提高工作效率,減少人為錯漏。
例如對測繪工作中常用的繪圖軟件AutoCAD,可以實(shí)現(xiàn)間接或交互操作AutoCAD,使其自動打開指定的圖形文件,訪問文件中相關(guān)的圖形,對其進(jìn)行編輯、導(dǎo)出、刪除,也可新增圖形,對其添加擴(kuò)展數(shù)據(jù)等操作,甚至可以自動批量打開多個圖形文件,統(tǒng)一做特定處理。
對Office辦公軟件,可以將數(shù)據(jù)處理的結(jié)果輸出為固定格式的報表或讀取Office文檔中的數(shù)據(jù)進(jìn)行后續(xù)處理。
對于地理信息系統(tǒng)軟件,可以將CAD中的圖形提取出來導(dǎo)入地理信息系統(tǒng)組件中并賦予屬性或者提取地理信息系統(tǒng)組件中的圖形要素導(dǎo)出到CAD中。
利用數(shù)據(jù)庫的數(shù)據(jù)管理、查詢功能與CAD的圖形編輯以及Office軟件的文檔報表輸出的功能,結(jié)合各自優(yōu)勢于一體,可以實(shí)現(xiàn)一個多功能的作業(yè)環(huán)境。常見應(yīng)用如下:
(1)歷史圖件的管理查詢:可根據(jù)數(shù)據(jù)庫中的歷史圖件的信息(圖名、地址、編號、面積)進(jìn)行文件查詢并命令CAD打開、編輯該文件。如圖4,在查詢對話框輸入尋找的文件編號,即可在主界面顯示查詢結(jié)果,雙擊結(jié)果即可在AutoCAD中打開此文件。
(2)管線圖繪制:自動讀取管線調(diào)查表(Excel表)中的數(shù)據(jù)(包括管線節(jié)點(diǎn)坐標(biāo)、連接點(diǎn)點(diǎn)號、屬性等),在CAD中繪制出管線圖。如圖5,選取相應(yīng)管線調(diào)查表文件,自動在AutoCAD上繪制成圖。
圖4 歷史圖件資料的查詢和調(diào)用
圖5 自動讀取數(shù)據(jù)繪制管線圖
(3)數(shù)據(jù)報表的生成:可以提取CAD中指定圖元的幾何和屬性信息,進(jìn)行一些必要的計算處理后在Word和Excel生成報表。如圖6,選取菜單中命令后即可在AutoCAD中選取相應(yīng)界址線,會自動創(chuàng)建新的Word文檔繪制表格填入相應(yīng)坐標(biāo)和邊長。
圖6 Office報表的生成
地理信息系統(tǒng)是管理地理要素圖形及其屬性的最佳工具,在城市管理和決策支持方面發(fā)揮著重要作用,測繪肩負(fù)地理信息系統(tǒng)的數(shù)據(jù)采集和整理等前期工作,與其有著緊密的聯(lián)系。如圖7所示,通過地理信息系統(tǒng)二次開發(fā)的COM組件,可訪問地理信息系統(tǒng)內(nèi)部的數(shù)據(jù),并導(dǎo)出到CAD等其他應(yīng)用軟件中,完成相關(guān)工作;也可以自AutoCAD中選取界址線并在屬性對話框中填入相應(yīng)屬性值后導(dǎo)入到地理信息系統(tǒng)組件中。
圖7 CAD、SuperMap組件間的交互
隨著對各應(yīng)用軟件提供的COM接口各項屬性和功能的更深入了解,建立的應(yīng)用工具也會發(fā)揮更大的作用。在數(shù)字化測繪向信息化測繪快速轉(zhuǎn)變的今天,測繪數(shù)據(jù)的處理、管理及應(yīng)用的水平高低直接影響到工作的效率與質(zhì)量,利用COM技術(shù)可實(shí)現(xiàn)數(shù)據(jù)在各應(yīng)用軟件間的交互,從而可對數(shù)據(jù)進(jìn)行流程化、集中化和自動化等一體化操作,拓展了應(yīng)用,提高了自動化程度,使整個工作達(dá)到事半功倍的效果。
[1]Ivar Jacobson,Martin Griss,Patrik Jonsson.軟件復(fù)用-結(jié)構(gòu)、過程和組織[M].北京:機(jī)械工業(yè)出版社,2003
[2]JORDAN S.Visual Basic 6編程寶典[M].北京:電子工業(yè)出版社,2004
[3]張帆.AutoCAD VBA二次開發(fā)教程[M].北京:武漢大學(xué)出版社,2006
[4]張正林.SuperMap GIS應(yīng)用與開發(fā)教程[M].北京:清華大學(xué)出版社,2006
[5]北京超圖軟件股份有限公司.SuperMap Objects開發(fā)教程[M].2008
[6]CJJ61-2003.城市地下管線探測技術(shù)規(guī)程[S].