- 相關(guān)推薦
基于MapX的多字段專(zhuān)題餅圖的設計
摘要:本文以小靈通路測系統中同步與漂移測試數據為例,提出如何在VC 開(kāi)發(fā)環(huán)境中利用MapX創(chuàng )建多字段的專(zhuān)題餅圖,特別是如何利用安全數組進(jìn)行數據綁定創(chuàng )建多字段的專(zhuān)題餅圖。
關(guān)鍵字:MapX 安全數組 專(zhuān)題地圖
引言
組件式軟件技術(shù)已經(jīng)成為當今軟件技術(shù)的潮流之一,組件式GIS技術(shù)將給整個(gè)GIS技術(shù)體系和應用模式帶來(lái)巨大的影響。MapX 是MapInfo 公司提供的具有強大地圖分析功能的 ActiveX控件,支持大多數標準的可視化開(kāi)發(fā)環(huán)境并且可以脫離MapInfo的軟件平臺運行。利用MapX,能夠簡(jiǎn)單快速地在企業(yè)應用中嵌入地圖功能,增強應用的空間分析能力。
在MapX中,專(zhuān)題地圖是用來(lái)分析和表現數據的一種強有力的方式。利用專(zhuān)題地圖,可根據表中特定的值來(lái)賦予地圖對象顏色、圖案和符號,從而把各種數據圖形化,很直觀(guān)地顯示在地圖上,為用戶(hù)的決策支持提供依據。專(zhuān)題地圖數據通常在創(chuàng )建地圖時(shí)所基于的表中或在ODBC支持的外部數據源中,也可以在COM數據集安全數組中。在小靈通信號的測試分析系統中,地圖格式支持柵格圖與矢量地圖,為提高效率、滿(mǎn)足實(shí)時(shí)性的要求,相關(guān)待處理數據存放在安全數組中,創(chuàng )建專(zhuān)題地圖時(shí)利用安全數組進(jìn)行數據綁定。
1 安全數組(SAFEARRAY)
MapX既是一個(gè)自動(dòng)化對象,也是一個(gè)標準的COM對象,它支持結構化存儲技術(shù)、自動(dòng)化技術(shù)等。自動(dòng)化繼承了COM的語(yǔ)言無(wú)關(guān)性、進(jìn)程透明性等優(yōu)點(diǎn),也簡(jiǎn)化了COM的一些底層細節。但自動(dòng)化技術(shù)有一組專(zhuān)用于自動(dòng)化的數據類(lèi)型,SAFEARRAY便是Automation中的標準數組存儲方式。SAFEARRAY類(lèi)型實(shí)際是一個(gè)結構類(lèi)型,但它可用于描述各種數組,指定了數組每一維的邊界信息。安全數組類(lèi)型的使用主要是要定義一個(gè)安全數組及維數與維的邊界。COM提供了一套API用于處理SAFEARRAY。為了保證程序和SAFEARRAY結構無(wú)關(guān),程序中建立、讀取、更改和釋放SAFEARRAY都應該通過(guò)這些API進(jìn)行,而不應該直接讀寫(xiě)SAFEARRAY結構。其方法如下:
⑴ 定義安全數組
ColeSafeArray theData;//或SAFEARRAY theData,用SAFEARRAYBOUND來(lái)設定維中的元素的個(gè)數及維的下界。
⑵ 設定維中元素的個(gè)數
unsigned long dims[2]={row,col};//row是行數,col為列數。
⑶ 創(chuàng )建安全數組
theData.Create(VT_VARIANT,2,dims);//創(chuàng )建一個(gè)二維的存放任意類(lèi)型的安全數組,邊界值為dims。
⑷ 定義安全數組元素索引
long index[2];//index[0]為行標,index[1]為列標。
⑸ 數據的存放
theData.putElement(index,ColeVariant(data));//把data放入安全數組中index 單元內。
2 數據綁定
數據綁定是將數據源中的數據導入MapX 的過(guò)程。為了增強GIS系統數據處理的靈活性,系統分開(kāi)存儲涉及的圖形矢量數據及空間屬性數據。MapX通過(guò)數據集集合(Datasets)對象,可以將用戶(hù)的屬性數據與地圖的空間數據連接起來(lái),屬性數據與幾何數據的關(guān)聯(lián)是通過(guò)數據綁定實(shí)現的。數據綁定的數據源可以是ODBC數據源、MapInfo Table文件、安全數組等。要綁字一個(gè)數據源,首先要指定所綁定的圖層,然后需要指定與圖層中地圖對象相匹配的關(guān)鍵字段。數據綁定主要有兩個(gè)作用:以地圖中的圖形對象來(lái)顯示數據及將屬性數據綁定到地圖中,并創(chuàng )建專(zhuān)題圖。數據綁定的實(shí)現是通過(guò)Datasets.Add方法實(shí)現的。
⑴ DataSets.add方法原型如下:
Datasets.Add ( Type, SourceData, [Name], [Geofield], [SecondaryGeofield], [BindLayer], [Fields], [Dynamic])//詳解參見(jiàn)相關(guān)資料
⑵ 創(chuàng )建BindLayer
當綁定時(shí)數據包含經(jīng)度和緯度,且要在新的圖層相應的位置上創(chuàng )建這些點(diǎn),需使用BindLayer 對象。通過(guò)數據綁定,可以將BindLayer對象作為一個(gè)參數,使用Datasets.Add方法將自己的數據轉變?yōu)橐粋(gè)DataSet。
CMapXBindLayer BindLayer;
BindLayer.CreateDispatch(BindLayer.GetClsid());
BindLayer.SetLayerName("Customers");
BindLayer.SetLayerType(miBindLayerTypeXY);//類(lèi)型
BindLayer.SetRefColumn1("X");//經(jīng)度
BindLayer.SetRefColumn2("Y");//緯度
⑶ 用Fields 集合
在MapX中有Field對象和Fields對象。在數據綁定時(shí),MapX 對綁定的每個(gè)數據列均需要開(kāi)銷(xiāo),通過(guò)Field對象和Fields對象只綁定地圖中需要的數據。使用Datasets.Add 的Fields 參數建立要綁定到地圖上的字段。字段集合對象的Add方法的原型如下:
[Field=]OBJECT.Add (DataSourceCol, [Name], [AggregateFunction], [Type]) // DataSourceCol取值為數據源中字段名或索引值,在本文中數據源為安全數組,其取值為索引值(COleVariant(1l)或COleVariant(2l)),詳解參見(jiàn)相關(guān)資料。
⑷ 據綁定
使用Datasets.Add可以將用戶(hù)數據綁定到地圖中。
3 專(zhuān)題地圖
主題地圖繪制是用于分析和可視化數據的一種強大方法。為數據提供圖形格式,以便可以在地圖上查看數據。制作專(zhuān)題地圖是根據某個(gè)特定專(zhuān)題對地圖進(jìn)行“渲染”的過(guò)程。所謂的專(zhuān)題渲染,就是以某種圖案或顏色填充來(lái)表明地圖對象(點(diǎn)、線(xiàn)、區域)的某些信息(例如信號的同步狀態(tài)、人口等等),也就是說(shuō),這類(lèi)渲染存在著(zhù)主題,經(jīng)過(guò)這樣渲染的地圖就是專(zhuān)題地圖。在小靈通信號的測試中,需要獲取分析信號的多組數據與狀態(tài),本文以同步與漂移狀態(tài)為例。通過(guò)使用餅狀圖的主題地圖繪制,可以每行同時(shí)檢查多個(gè)變量,可以顯示每個(gè)統計組的統計數據,并查看其在每個(gè)餅狀圖中所占的比例。在創(chuàng )建專(zhuān)題圖的過(guò)程中,有幾個(gè)關(guān)鍵因素,包括專(zhuān)題圖變量的確定、屬性數據的獲取以及專(zhuān)題地圖的顯示與控制。
⑴
【基于MapX的多字段專(zhuān)題餅圖的設計】相關(guān)文章:
基于MapX的城市GIS的初步建立03-07
基于VxWorks的多DSP系統的多任務(wù)程序設計03-18
基于云安全的主動(dòng)防御系統多引擎檢測設計06-06
基于多傳感器的智能晾衣架設計12-09
基于MapObjects控件的鷹眼圖實(shí)現方法03-07
基于軟件多代理的時(shí)間的建摸03-08