摘要:地圖標(biāo)繪指在地圖背景上標(biāo)繪各種具有空間特征的事、物的分布狀態(tài)或行動(dòng)部署。而基于一種GIS組件實(shí)現(xiàn)地圖標(biāo)繪,是目前電子地圖發(fā)展的需要。本文從用戶需求出發(fā),給出了系統(tǒng)實(shí)現(xiàn)的界面功能、數(shù)據(jù)組織與核心算法等設(shè)計(jì)思想,詳細(xì)闡述了系統(tǒng)的軟件結(jié)構(gòu),軟件實(shí)現(xiàn)方法與過程。
關(guān)鍵詞:地理信息系統(tǒng);SuperMap Objects;地圖標(biāo)繪
中圖分類號(hào):TP391文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)28-0137-03
The Design and Realization of Plotting System Based on SuperMap Objects
SHANG Wen-jun
(University of Science and Technology of China,School of Software Engineering,Hefei 230051,China)
Abstract: Marking special objects on maps means to mark various spatial phenomena and objects on a map to describe some events or object distribution. It's necessary for the electronic map developing to realize plotting based on one of the GIS components.In this paper,The users requirements is analyzed,and the function distribution, interface style, data structure, mainly arithmetic and the design are presented; The specific software structure and realization is expatiated.
Key words: GIS;supermap objects;map plotting
1 引言
SuperMap Objects是SuperMap GIS系列軟件中的基礎(chǔ)開發(fā)平臺(tái),是一套面向GIS應(yīng)用系統(tǒng)開發(fā)者的新一代組件式GIS開發(fā)平臺(tái)。具有強(qiáng)大的地圖分析功能的ActiveX組件產(chǎn)品。利用SuperMap Objects,用戶能夠簡(jiǎn)單快捷地在各種應(yīng)用系統(tǒng)中嵌入地圖應(yīng)用功能,大大的增強(qiáng)應(yīng)用系統(tǒng)的空間分析能力。SuperMap Objects采用基于SuperMap DeskPro相同的地圖化技術(shù),可以實(shí)現(xiàn)SuperMap DeskPro具有的絕大部分地圖編輯和空間分析功能。
在一般的地理信息系統(tǒng)中,符號(hào)標(biāo)繪是GIS必須具備的基本功能。地圖標(biāo)繪指在地圖背景上標(biāo)繪各種具有空間特征的事、物的分布狀態(tài)或行動(dòng)部署。目前結(jié)合國內(nèi)外優(yōu)秀的GIS組件,開發(fā)計(jì)算機(jī)地圖標(biāo)繪系統(tǒng),是GIS開發(fā)的流行趨勢(shì)。本文以超圖公司的SuperMap Objects為例,從用戶需求出發(fā),給出實(shí)現(xiàn)系統(tǒng)的界面功能、數(shù)據(jù)文件與核心算法等設(shè)計(jì)思想,闡述了具體的軟件結(jié)構(gòu),軟件實(shí)現(xiàn)方法與過程。
2 地圖標(biāo)繪系統(tǒng)的用戶需求和界面功能
2.1 用戶需求
按照不同用戶的需求,設(shè)計(jì)出滿足系統(tǒng)功能要求的標(biāo)繪系統(tǒng)。對(duì)于不同領(lǐng)域的態(tài)勢(shì)標(biāo)繪有所不同,但也有其共通之處,包括:態(tài)勢(shì)圖層的新建、標(biāo)繪符號(hào)庫的創(chuàng)建、態(tài)勢(shì)標(biāo)繪的基本編輯、制作及文件操作等。按標(biāo)繪操作分,又可分為自動(dòng)態(tài)勢(shì)標(biāo)繪以及手工態(tài)勢(shì)標(biāo)繪。其中自動(dòng)態(tài)勢(shì)標(biāo)繪,實(shí)現(xiàn)了GPS定位顯示事件發(fā)生場(chǎng)地、以及態(tài)勢(shì)的實(shí)時(shí)跟蹤及軌跡回放。
針對(duì)不同行業(yè)領(lǐng)域設(shè)計(jì)符合要求的標(biāo)繪庫,最大程度滿足用戶標(biāo)繪的需要,這里除了調(diào)用SuperMap Objects本身的符號(hào)庫外,勢(shì)必要?jiǎng)?chuàng)建用戶自定義符號(hào)庫及設(shè)計(jì)出符合用戶需要的態(tài)勢(shì)標(biāo)繪符號(hào)。在標(biāo)繪的同時(shí)要實(shí)現(xiàn)的不僅僅是一副態(tài)勢(shì)圖的生成,同時(shí)也要能記錄下這樣一副態(tài)勢(shì)圖內(nèi)在的屬性態(tài)勢(shì)方案,且是在用戶標(biāo)繪的同時(shí)自動(dòng)產(chǎn)生,不需要用戶再次去創(chuàng)建一個(gè)態(tài)勢(shì)方案。
此外,從用戶使用界面友好性的角度考慮,設(shè)計(jì)方便用戶使用操作的界面也是需求階段考慮的因素。
2.2 界面功能
基于上述需求分析,系統(tǒng)的功能可設(shè)置為如下幾組:
1)自動(dòng)態(tài)勢(shì)標(biāo)繪,包括:態(tài)勢(shì)實(shí)時(shí)跟蹤、態(tài)勢(shì)軌跡回放、定位信息顯示。實(shí)現(xiàn)自動(dòng)標(biāo)繪的方式是:①現(xiàn)場(chǎng)人員攜帶的GPS子機(jī)獲取實(shí)時(shí)GPS信息;②指揮中心服務(wù)器接受子機(jī)信號(hào),將GPS坐標(biāo)數(shù)據(jù)返回到服務(wù)器中;③地圖服務(wù)器在接受到事件GPS定位信息后,判斷事件所屬類型,調(diào)用系統(tǒng)標(biāo)繪符號(hào)庫在地圖系統(tǒng)中定位顯示。
2)手工態(tài)勢(shì)標(biāo)繪,包括:態(tài)勢(shì)編輯、態(tài)勢(shì)制作以及態(tài)勢(shì)文件操作。態(tài)勢(shì)編輯提供給用戶基本的標(biāo)記操作:撤消、恢復(fù)、刪除、剪切、復(fù)制、粘貼、閃爍標(biāo)號(hào)等。態(tài)勢(shì)制作支持用戶進(jìn)行態(tài)勢(shì)圖層控制、創(chuàng)建以及標(biāo)繪面板的功能。而態(tài)勢(shì)文件操作,則是可以對(duì)態(tài)勢(shì)文件進(jìn)行打開、保存、關(guān)閉、疊加、另存為等基本文件操作。
3)態(tài)勢(shì)預(yù)案的生成,針對(duì)某種需要生成態(tài)勢(shì)預(yù)案的操作,在標(biāo)繪面板上增加一類態(tài)勢(shì)圖標(biāo)號(hào),在標(biāo)繪此類態(tài)勢(shì)圖的同時(shí),能夠記錄相關(guān)的圖層屬性信息,并可以調(diào)用與地圖圖層相關(guān)的屬性數(shù)據(jù)庫例如:SQL Server和Oracle等,最終生成描述態(tài)勢(shì)的預(yù)案。生成的態(tài)勢(shì)預(yù)案文件,可以是屬性數(shù)據(jù)庫的一張數(shù)據(jù)表也可以是一個(gè)XML文件加以記錄。相關(guān)的事件描述信息有時(shí)還是需要用戶自己在系統(tǒng)設(shè)計(jì)的彈出窗口中手動(dòng)輸入。所以態(tài)勢(shì)標(biāo)繪的事件描述預(yù)案實(shí)則是一個(gè)半自動(dòng)化的生成方案。
■
圖1地圖態(tài)勢(shì)標(biāo)繪系統(tǒng)功能概要設(shè)計(jì) 圖2態(tài)勢(shì)預(yù)案生成流程
與此同時(shí),設(shè)計(jì)出一類方便用戶使用的友好界面包括:標(biāo)繪面板采用類似于QQ聊天分組的收縮面板控制、態(tài)勢(shì)預(yù)案標(biāo)繪的事件描述彈出窗口以及自動(dòng)標(biāo)繪功能中的定位顯示事件發(fā)生地的相關(guān)信息顯示窗口等。
3 地圖標(biāo)繪系統(tǒng)的數(shù)據(jù)文件和核心算法
3.1 數(shù)據(jù)分類
在地圖標(biāo)繪系統(tǒng)中,所涉及的標(biāo)繪種類很多,且除了通用的地圖標(biāo)繪外還要設(shè)計(jì)出符合本行業(yè)需求的特定符號(hào)庫。所概括出的基本標(biāo)繪類型如下:
1) 基本圖元,一般包括點(diǎn)、線、面三類,以及文字標(biāo)注。其中線分:折線、曲線等;面分:多邊形、圓、橢圓等。
2) 態(tài)勢(shì)區(qū)域,主要是在一般面形的基礎(chǔ)上設(shè)置顯示風(fēng)格,例如:填充顏色、透明度設(shè)置,這在SuperMap Objects中可以調(diào)用相關(guān)封裝好的方法實(shí)現(xiàn)。
3) 態(tài)勢(shì)箭頭,也是在一般線形的基礎(chǔ)上設(shè)置其風(fēng)格,包括:線型、粗細(xì)、顏色等,在SuperMap Objects中有帶箭頭的線形,但有時(shí)這種態(tài)勢(shì)箭頭不能滿足用戶標(biāo)繪的需要,這時(shí)就需要自己設(shè)計(jì)算法,調(diào)用基本的地理對(duì)象添加方法如:soRecordset.AddNew(objGeometry As soGeometry,[bReturnGeometryID As VARIANT])。
4) 級(jí)別,人員,也是標(biāo)繪中常常用到的標(biāo)繪圖標(biāo),在SuperMap Objects中的實(shí)現(xiàn)是在一般點(diǎn)狀要素的基礎(chǔ)上設(shè)置其顯示風(fēng)格,用soStyle. SymbolStyle設(shè)置其在對(duì)應(yīng)符號(hào)庫的文件symlib索引(一般的默認(rèn)路徑為:SuperMap\\SuperMap Objects 2008\\Resources)。
5) 象形符號(hào),在SuperMap Objects中對(duì)于象形符號(hào),包括從用戶柵格圖片轉(zhuǎn)換到符號(hào)庫的標(biāo)繪圖標(biāo),都是不能改變其大小屬性的,要想突破軟件所帶來的這種局限,要通過 SuperMap控件的句柄獲取設(shè)備指針,然后利用 Windows API,用戶可以在 SuperMap 控件上繪制自定義的圖形圖像的方法。
3.2 數(shù)據(jù)組織
1)態(tài)勢(shì)標(biāo)繪圖層文件
在創(chuàng)建態(tài)勢(shì)標(biāo)繪圖層中,采用SuperMap Objects的seDatasetType.scdCAD數(shù)據(jù)集,這是介于SuperMap系列軟件本身數(shù)據(jù)格式的要求考慮的,要實(shí)現(xiàn)在同一圖層上顯示多種類型的數(shù)據(jù)集(點(diǎn)、線、面、文本等)只有CAD復(fù)合數(shù)據(jù)集類型可以做到。再考慮到最終保存的數(shù)據(jù)集文件格式,是基于sdb數(shù)據(jù)源的smw格式工作空間來存儲(chǔ)最終的地圖數(shù)據(jù),在SuperMap系列產(chǎn)品中僅僅保存數(shù)據(jù)源是不夠的,同時(shí)要把地圖、數(shù)據(jù)源、布局等保存到一個(gè)工作空間中。
2)態(tài)勢(shì)標(biāo)繪預(yù)案文件
對(duì)于要實(shí)現(xiàn)預(yù)案的標(biāo)繪操作,采用標(biāo)繪的同時(shí),記錄相關(guān)的屬性描述信息,調(diào)用圖層相關(guān)聯(lián)的屬性數(shù)據(jù)庫,并把查詢到的相關(guān)字段寫入到一張數(shù)據(jù)表或一個(gè)XML文件中記錄。本文以生成XML文件為例,最終生成的XML預(yù)案文件形如圖4所示。
3.3 核心算法
3.3.1 繪制復(fù)雜態(tài)勢(shì)圖標(biāo)
在SuperMap.MouseDown(Button As Integer,Shift As Integer,x As Single,y As Single)事件中,通過外界傳入基本點(diǎn)的方式,實(shí)現(xiàn)多結(jié)點(diǎn)繪制圖標(biāo)。以多結(jié)點(diǎn)態(tài)勢(shì)箭頭為例其在SuperMap Objects中實(shí)現(xiàn)的核心代碼:
soDatasetVector objDt; //定義矢量數(shù)據(jù)集
soRecordset objRs; //定義記錄集
soPoints objPoints = new soPoints(); //定義線標(biāo)點(diǎn)串
soPoint objPoint = new soPoint();//定義線標(biāo)點(diǎn)
soGeoLine objGeoLine = new soGeoLine();//定義線標(biāo)幾何對(duì)象
objDt = (soDatasetVector)axSuperWorkspace1.Datasources[1].Datasets[2];
objRs = objDt.Query(\"\", true, 1, \"\"); //查詢空間數(shù)據(jù)集
x1 = axSuperMap1.PixelToMapX(e.x); //獲取外界傳入點(diǎn)x、y坐標(biāo)
y1 = axSuperMap1.PixelToMapY(e.y);
objPoint.x = x1;
objPoint.y = y1;
objPoints.Add(objPoint); //把標(biāo)點(diǎn)添加到點(diǎn)串中
objGeoLine.AddPart(objPoints); //添加點(diǎn)到線對(duì)象的結(jié)點(diǎn)中
objRs.AddNew((soGeometry)objGeoLine, true);
objRs.Update();
3.3.2 XML文件讀寫操作
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(\"schema.xml\");
XmlNode root = xmlDoc.SelectSingleNode(\"PRI\");//查找
XmlElement xe1 = xmlDoc.CreateElement(\"PRI_1\"); //創(chuàng)建一個(gè)節(jié)點(diǎn)
XmlElement xesub1 = xmlDoc.CreateElement(\"SCHEMA_NAME \");
xesub1.InnerText = \"預(yù)案\";//設(shè)置文本節(jié)點(diǎn)
xe1.AppendChild(xesub1);//添加到
xmlDoc.Save(\"schema.xml\");//保存到XML文件中
3.3.3 定位信息顯示
StringBuilder P_Str = new StringBuilder()//定義字符串顯示信息
sb.AppendLine(\"查找信息如下:\")
objLayer = objLayers[i]//遍歷循環(huán)地物圖層
objDtV = (soDatasetVector)objLayer.Dataset //圖層轉(zhuǎn)換矢量地理對(duì)象
objGeometry = SuperMap.selection.ToRecordset(true).GetGeometry()//選擇集轉(zhuǎn)為記錄集,獲取當(dāng)前記錄對(duì)應(yīng)的幾何對(duì)像
objRs = objDtV.QueryByDistanceEx(objGeometry, 120, \"\",100) //查找周圍地物對(duì)象
P_Str.AppendLine(\"\編號(hào):\" + objRs.GetFieldValue(\"SmID\").ToString())
P_Str.AppendLine(\"\地址:\" + objRs.GetFieldValue(\"NAMEC\").ToString())
4 地圖標(biāo)繪系統(tǒng)的軟件結(jié)構(gòu)和應(yīng)用實(shí)現(xiàn)
4.1 軟件結(jié)構(gòu)
考慮到軟件開發(fā)的三種架構(gòu):邏輯架構(gòu)、軟件系統(tǒng)中元件之間的關(guān)系,比如用戶界面,數(shù)據(jù)庫,外部系統(tǒng)接口,商業(yè)邏輯元件,等等;物理架構(gòu)、軟件元件是怎樣放到硬件上的;系統(tǒng)架構(gòu)、系統(tǒng)的非功能性特征,如可擴(kuò)展性、可靠性、強(qiáng)壯性、靈活性、性能等。設(shè)計(jì)出地圖標(biāo)繪系統(tǒng)的描述架構(gòu)如圖5所示。
4.2 軟件實(shí)現(xiàn)
軟件基于SuperMap Objects開發(fā)C/S架構(gòu)的地圖標(biāo)繪系統(tǒng),開發(fā)平臺(tái)選用VisualStudio2005,開發(fā)語言C#。地圖數(shù)據(jù)采用SuperMap Deskpro進(jìn)行矢量編輯,SuperMap Objects組件開發(fā)地圖部分的功能,其中主要實(shí)現(xiàn)地圖的態(tài)勢(shì)編輯、標(biāo)繪、態(tài)勢(shì)文件操作等。此外,自動(dòng)標(biāo)繪的GPS接受數(shù)據(jù)采用Virtual GPS模擬實(shí)現(xiàn)實(shí)時(shí)接受地理坐標(biāo)信息。并在地圖上實(shí)時(shí)標(biāo)繪發(fā)生事件及軌跡跟蹤功能。系統(tǒng)除了自身空間數(shù)據(jù)庫外還需一個(gè)大型的屬性數(shù)據(jù)庫支持,調(diào)用態(tài)勢(shì)預(yù)案xml文件中的字段屬性信息。最后列出系統(tǒng)實(shí)現(xiàn)的截圖,見圖6、圖7。
5 結(jié)束語
本文基于Supermap objects組件設(shè)計(jì)開發(fā)了地圖標(biāo)繪系統(tǒng),給出了具體的實(shí)現(xiàn)步驟、設(shè)計(jì)思想、實(shí)現(xiàn)的技術(shù)難點(diǎn)及核心算法。設(shè)計(jì)開發(fā)的原型系統(tǒng),在自動(dòng)標(biāo)繪和手工標(biāo)繪的兩個(gè)層面上實(shí)現(xiàn)用戶需要的態(tài)勢(shì)標(biāo)繪。并完成了態(tài)勢(shì)圖預(yù)案的半自動(dòng)生成,在實(shí)際工程中得到有效應(yīng)用。
參考文獻(xiàn):
[1] 程朋根,龔健雅,眭海剛.GIS中地圖符號(hào)設(shè)計(jì)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].中國圖象圖形學(xué)報(bào),2000,5(12):1006-1011.
[2] 畢碩本.地理信息系統(tǒng)軟件工程的原理與方法[M].北京:科學(xué)出版社,2003.
[3] 北京超圖地理信息技術(shù)有限公司.SuperMap Objects開發(fā)教程[EB/OL].http://www.supermap.com.cn.
[4] 北京超圖地理信息技術(shù)有限公司.理解SuperMap GIS[EB/OL].http://www.supermap.com.cn.
[5] 李德仁.論RS、GPS與GIS集成的定義、理論與關(guān)鍵技術(shù)[J].遙感學(xué)報(bào),1997(2):65-69.
[6] 王艷軍,姚益平.基于GIS的態(tài)勢(shì)顯示系統(tǒng)設(shè)計(jì)[J].艦船電子對(duì)抗,2006,29(4):77-79.
[7] 孫志峰,郭宜忠,王遠(yuǎn).基于MapX的電子標(biāo)繪系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].空軍雷達(dá)學(xué)院學(xué)報(bào),2007,21(2):98-100.