用VC 進行MapX二次開發

2021-04-22 12:19:11 字數 4358 閱讀 8120

發表於:2023年12月10日 11時33分12秒

許可權: 公開

閱讀(2)

舉報用vc++進行mapx二次開發之一------地理資訊系統概述

writer:bluedy  [email protected]

1.1 地理資訊系統概念

地理資訊系統(geographical information system),簡稱gis,是一種決策支援系統。所謂決策支援系統(decision support syetem),是能從管理資訊系統中獲得資訊,幫助管理者制定決策的系統。從「地理資訊系統」的名稱上可以看出,地理資訊系統可以分成兩個部分,即「地理」和「資訊」。「地理」代表空間資訊,「資訊」代表屬性資訊,兩者通過地理編碼,組成乙個完整的系統。比如,在mapinfo中,「地理」資料儲存在map檔案中,「資訊」即屬性資料儲存在tab和dat檔案中,「地理」資料和「資訊」資料通過id檔案連線(地理編碼)起來。理解這兩者的概念,對學習gis的應用是很有益處的。

1.2 地理資訊系統的組成

硬體組成:至於硬體嘛,一台微機+外設。微機的配置要看具體的系統而定,不過,對於mapinfo來說,要求是很低的,只要你執行windows98不是很慢就可以了。外設就是個無底洞了,什麼數位化儀、解析測圖儀、掃瞄器、工程印表機、測繪儀器、航測儀器……太多啦,視具體情況而定。當然,微機的一般外設是肯定要的(鍵盤滑鼠等)。

軟體組成:那要看選用什麼gis平台了,我們進行mapx二次開發,當然是mapx了,編譯器為vc++5.0以上版本,作業系統為windows系列(當然是windows95以上了)。

1.3 地理資訊系統的功能

至於gis的功能,你想聽學術上所說的功能呢還是想聽聽老百姓說的功能,學術說的功能,那真是太多了,簡直把gis說得天下獨尊了、無所不用、無所不能了,你自己去找找相關的資料吧。就讓我們來聽聽老百姓說的功能------畫個地圖、寫幾個字、換個樣子。呵呵,神聖的gis就是這個樣子的嗎?「群眾的眼睛是雪亮的」,差不多吧。gis的功能首先是顯示地理位置(畫個地圖):我們接觸到的很多資訊都是與位置有關的,應用也很廣泛,比如,你家住在**,**有商店,車輛開到了**,移動基站設在**合適,這些都可以用地圖輕易地表現出來。gis的功能其次是記錄與位置相關的資訊(寫幾個字):比如,你家的房子面積是多大,幾時建的,建築材料是什麼,有幾層,這些都可以用地物的屬性記錄下來。gis的另外乙個功能、也是非常重要的乙個功能是:分析和建模。把所得的空間資訊和屬性資訊綜合起來進行分析,得到一些新的資訊,以滿足人們的需要。或建立數學模型,對現實中的事物進行模擬。

1.4 地理資訊系統的發展

地理資訊系統是隨著計算機圖形學的發展而發展起來的,在20世紀60年代,gis還處於研究階段,70年代就開始快速發展,80年代開始大量應用。不過,這可是國際上的gis歷史,對於我國,則是在80年代才開始研究: 80年代初中科院遙感所成立;武漢測繪科技大學、中國地質大學(武漢)、北京大學著手開發gis系統;2023年武漢測繪科技大學開設資訊工程(gis)專業……隨後,我國的gis技術有了長足的發展,開始接近世界水平。但由於影像處理、資料庫技術等相關技術的制約,gis的開發還處在乙個較淺的層次上。

題外話:由於前美國副**戈爾提出數字地球的概念,讓一直過於專業應用的gis走到大眾面前,gis著實火了起來。「數字**城市」充斥於各個**上,人們都爭相「開發」gis,只要與gis有一點關係的應用,就把這個龐大的傢伙拿出來,「我這個系統採用最新的gis技術」,浪費人力物力。拿個webgis來說吧,本來gis最重要的乙個功能是空間分析,可人們就是不用桌面的應用程式來分析,卻要用慢的象蝸牛功能簡陋的象馬王堆出土的地圖一樣的「webgis」來做,至於哪個的分析功能強,我不說了。畢竟,「web熱」+「gis熱」=「webgis熱」是符合數學公式的,我也就不必去推翻了。只是,勞動人民的血汗錢啊,幾十萬幾百萬的用來摺紙飛機……。

用vc++進行mapx二次開發

之二------使用mapx的基石

writer:bluedy  [email protected]

在開始之前,我假設讀者熟悉vc++程式設計(了解一些可以),且使用的系統安裝好了vc++5.0(或以上版本,建議vc++6.0)和mapx4.0(或以上版本)。若你還沒完成以上步驟,getreader().stop();請你滿足前面的if語句。

好,現在讓我們來開始我們的mapx之旅吧!

對於c++程式來說,每個mapx物件(objects)都在mapx.h 和 mapx.cpp中用乙個類來實現,類的名字和mapx物件的名字相同,且已經在cmapx中定義了。例如,dataset物件用類cmapxdataset實現。這和c++類的定義相一致。

那麼,每個物件的屬性(properties)呢?mapx的屬性是用類的成員函式來實現的。比如剛才的dataset物件的名字(name),就是用name()函式來實現的,不過,name()有兩種使用方法,即get和set。如:

cstring getname();//獲取物件名字

void setname(lpctstr);//設定物件名字

你是不是覺得get和set有點熟悉?那你看看下面的函式:

getbuttominfo();getbuttomtext();

setbuttominfo();setbuttomtext();

上面的函式可是mfc標準的、而且常用的函式哦。所以,你學mapx開發,可以想象成mapx裡面的物件和屬性就是mfc裡面的類和成員函式。如此而已。

現在讓我們來建立我們的mapx基石吧。

第一步:用vc++的程式嚮導來建立乙個單文件程式mapxsample。

第二步:project> add to project>files,選擇mapx.cpp和mapx.h。

第三步:定義乙個cmapx物件。

class cmapxsampleview : public cview

第四步:宣告乙個常量。view > resource symbols>new>name為idc_map。

第五步:在類嚮導中為cmapxsampleview建立wm_size 和 wm_create的處理訊息:

void cmapxsampleview::oncreate(uint ntype, int cx, int cy)

void cmapxsampleview::onsize(uint ntype, int cx, int cy)

第六步:在類嚮導中為cmapxsampleview建立wm_setfocus的處理訊息,以確保當視窗處於活動狀態時得到焦點。

void cmapxsampleview::onsetfocus(cwnd* poldwnd)

然後編譯執行。看到了嗎?這個就是乙個最基本的mapx程式了,我把它稱為「mapx的基石」,因為以後的程式都是在這個程式的基礎上「縫縫補補」而來的。

用vc++進行mapx二次開發

之三------使用mapx工具

writer:bluedy  [email protected]

對於乙個「標準」的windows應用程式,一般都有乙個工具欄。如果你用過某個gis系統,一定用過工具欄上的工具。工具欄上的工具為我們提供了乙個快速呼叫某個功能的捷徑。我們這就來建立乙個mapx的工具欄。

先來實現什麼功能呢?我們來個模仿mapinfo: 放大工具、 縮小工具。

要對圖象進行放大縮小,該用什麼演算法呢?不必你操心!我們是進行二次開發,這些演算法的實現,mapx都有了,我們只需要呼叫它的功能就行了。更絕的是,mapx已經內建了常用的「工具」。放大工具就是mizoomintool,縮小工具就是mizoomouttool。怎麼使用能?好說,cmapx類有個currenttool函式,「屬性和函式的名字一樣」------當前工具,呼叫之即可。還記得前面的吧------get和set,現在不需要「獲得」,而要「設定」,那麼,該呼叫的函式為:

m_ctrlmapx.setcurrenttool(mizoomintool);//放大工具

m_ctrlmapx.setcurrenttool(mizoomouttool);//縮小工具

至於程式的實現,就是為工具欄的按鈕新增訊息處理函式,在函式體內新增上面的**就可以了。調式執行,看看效果吧。

簡單吧?就這麼簡單。別人都說vb進行mapx二次開發簡單,你說呢?

mapx內建的工具有:

miarrowtool;

mipantool ;

micentertool ;

mizoomintool ;

mizoomouttool ;

misymboltool ;

mitexttool ;

miselecttool ;

miradiusselecttool;

mirectselecttool ;

mipolygonselecttool ;

milabeltool ;

miaddlinetool ;

miaddpolylinetool ;

miaddregiontool ;

miaddpointtool;

用VC 進行MapX二次開發

writer bluedy er huang 163.com 1.1 地理資訊系統概念 地理資訊系統 geographical information system 簡稱gis,是一種決策支援系統。所謂決策支援系統 decision support syetem 是能從管理資訊系統中獲得資訊,幫助管...

VC二次開發MapX入門

第一步 用vc 的程式嚮導來建立乙個單文件程式mapxsample。第二步 project add to project files,選擇mapx.cpp和mapx.h。第三步 定義乙個cmapx物件。class cmapxsampleview public cview 第四步 宣告乙個常量。vie...

AutoCAD進行二次開發

本文基於autocad 2006新推出的.net api為工具,介紹了在.net平台下對autocad進行二次開發的技術,並與目前常用的vba objectarx作了對比。同時討論了如何彌補.net api某些不足的功能。當前autocad的二次開發工具主要有 visuallisp vba和obje...