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