MAPGIS二次開發(fā)培訓教程_第1頁
MAPGIS二次開發(fā)培訓教程_第2頁
MAPGIS二次開發(fā)培訓教程_第3頁
MAPGIS二次開發(fā)培訓教程_第4頁
MAPGIS二次開發(fā)培訓教程_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

MAPGIS二次開發(fā)培訓教程MAPGIS是武漢中地信息工程有限公司研制的具有自主版權(quán)的大型基礎(chǔ)地理信息系統(tǒng)平臺。

它是一個集當代最先進的圖形、圖像、地質(zhì)、地理、遙感、測繪、人工智能、計算機科學于一體的大型智能軟件系統(tǒng),是集數(shù)字制圖、數(shù)據(jù)庫管理及空間分析為一體的空間信息系統(tǒng),是進行現(xiàn)代化管理和決策的先進工具。

MAPGIS連續(xù)四年在全國GIS測評中名列第一,并成為唯一連續(xù)四年獲得國家科技部向社會推薦的國產(chǎn)GIS軟件平臺。

中地軟件叢書之MAPGIS二次開發(fā)培訓教程是根據(jù)最新推出的MAPGIS軟件平臺編寫而成,主要介紹進行MAPGIS二次開發(fā)必須具備的基礎(chǔ)知識、主流開發(fā)工具以及MAPGIS系統(tǒng)的基本概念、結(jié)構(gòu)體系和操作方法。

該教程分為三個部分,共十一講。

其中:

第一部分(即第一講的內(nèi)容):

介紹Windows編程的概念。

包括類與數(shù)據(jù)封裝、繼承、重載、虛擬函數(shù)與多態(tài)性以及內(nèi)存管理。

該部分為可視化編程的基礎(chǔ),有可視化編程經(jīng)驗的讀者可以略過此講,直接進入下一部分的學習。

第二部分(即第二講的內(nèi)容):

編程工具VC。

對于在VC這樣一個編程環(huán)境中開發(fā)應(yīng)用程序所應(yīng)熟悉的概念,術(shù)語和最基本的框架、構(gòu)件實現(xiàn)過程等知識做了一個簡明扼要的介紹。

已掌握一定VC編程基礎(chǔ)知識的讀者可以略過該部分。

第三部分(即第三講至第十一講的內(nèi)容):

詳細講述了地理信息系統(tǒng)的基本概念(包括GIS原理概述、空間數(shù)據(jù)類型、空間數(shù)據(jù)庫、空間數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)管理等內(nèi)容);MAPGIS的基本概念和體系結(jié)構(gòu)(簡要描述了MAPGIS二次開發(fā)的基本概念、術(shù)語、工作區(qū)、空間實體及其數(shù)據(jù)、C++類組織和開發(fā)環(huán)境介紹的內(nèi)容);MAPGIS空間數(shù)據(jù)存取和屬性編輯(包括工作區(qū)、空間實體和屬性的操作及其網(wǎng)絡(luò)介紹);圖形顯示輸出及窗口操作、圖形編輯、類庫和控件開發(fā);矢量空間分析和屬性查詢;投影變換、圖框生成和工程管理;圖庫管理和查詢系統(tǒng)(包括基于圖庫的應(yīng)用程序開發(fā)、MAPGIS圖庫介紹、開發(fā)的一般步驟以及結(jié)合圖庫顯示說明圖庫主要函數(shù)的功能等方面的內(nèi)容)以及圖象分析與處理。

這一部分為本教程的主要部分,能使大家從了解到熟練掌握這個部分的內(nèi)容也是我們編制本書的主要目的,同時它還可被作為MAPGIS二次開發(fā)過程中的參考來使用。

參加本書編寫的人員主要是本系統(tǒng)的軟件開發(fā)人員以及長期從事MAPCAD和MAPGIS訓的教師。

由于時間倉促,書中難免存在錯誤和不當之處,敬請廣大用戶及讀者提出寶貴意見和建議,以利改進。

中地軟件叢書編委會2001年10第一講基于WINDOWS編程的基礎(chǔ)知識1.1引言1.2類與數(shù)據(jù)封裝1.3繼承1.4重載1.5虛擬函數(shù)與多態(tài)性第二講編程工具VC2.1熟悉VC開發(fā)環(huán)境2.2消息與命令2.3文檔、視結(jié)構(gòu)102.4圖形設(shè)備接口112.5對話框和控件122.6編程規(guī)范................................................................................................................................13第三講地理信息系統(tǒng)基本概念........................................................................................................153.1GIS原理概述153.2GIS空間數(shù)據(jù)類型173.3GIS數(shù)據(jù)管理183.4空間分析................................................................................................................................203.5地理信息系統(tǒng)發(fā)展20第四講MAPGIS的基本概念和體系結(jié)構(gòu)224.1MAPGIS二次開發(fā)的基本概念224.2MAPGIS基本術(shù)語234.3MAPGIS的數(shù)據(jù)管理(工作區(qū))254.4MAPGIS的空間實體及其數(shù)據(jù)組織274.5MAPGIS的C++類組織294.6MAPGIS的VC++開發(fā)環(huán)境介紹30第五講MAPGIS空間數(shù)據(jù)存取和屬性編輯325.1工作區(qū)操作325.2空間實體操作345.3屬性(屬性結(jié)構(gòu))操作.......................................................................................................375.4網(wǎng)絡(luò)介紹................................................................................................................................44第六講圖形顯示輸出及窗口處理456.1圖形顯示輸出456.2窗口處理................................................................................................................................496.3類庫開發(fā)中的圖形顯示和窗口處理51第七講圖形編輯、類庫和控件開發(fā)537.1圖形編輯開發(fā)概要537.2圖形編輯API函數(shù)開發(fā).......................................................................................................537.3MAPGIS類庫開發(fā)547.4MAPGIS控件開發(fā)60第八講矢量空間分析和屬性查詢668.1矢量空間分析668.2屬性查詢檢索71第九講投影變換和圖框生成739.1投影變換(projdll.h、cordcvt.h)739.2圖框生成(frmdll32.h).......................................................................................................83第十講圖庫管理和工程管理9110.1MAPGIS圖庫簡介9110.2基于圖庫的應(yīng)用程序的開發(fā)9210.3結(jié)合圖庫的顯示說明圖庫中主要函數(shù)的功能9210.4工程管理(prj_disp.h和map_prj.h)............................................................................96第十一講MAPGIS圖象處理和分析10111.1遙感圖象處理的基本知識10111.2處理方法............................................................................................................................10111.3主要API介紹9911.4組件介紹............................................................................................................................10711.5在VC中的開發(fā)過程(結(jié)合示例程序講解)10811.6示例程序說明MAPGIS二次開發(fā)問題集錦1101.屬性和屬性結(jié)構(gòu)1102.空間實體操作問題1233.顯示、編輯問題1244.空間分析問題1315.數(shù)字高程模型1316.安裝問題1347.工程問題1358.輸出問題1369.其它138第一講基于WINDOWS編程的基礎(chǔ)知識程序被認為是在一個數(shù)據(jù)集合上進行的一系列操作。

主要思想是:

功能分解并逐步求精。

實質(zhì)是把數(shù)據(jù)和處理這些數(shù)據(jù)的過程合并為一個單獨的“對象”――一個具有確定特性的自完備的實體。

多態(tài)簡單的說,類就是一種用戶定義的數(shù)據(jù)類型,跟結(jié)構(gòu)類似;并且,類具有自己的成員變量和成員函數(shù)(方法),通過它們可以對類自身進行操作。

如:

汽車可以看作是發(fā)動機、車輪、座椅等諸如此類的集合。

也可以從功能的角度來研究,譬如,能移動,加速,減速,剎車等。

例如:

classCMyClass1protected:CMyClass1();public:virtual定義:

指能夠把一個實體的信息、功能、響應(yīng)都裝入一個單獨的對象中的特性。

封裝的優(yōu)點如下:

封裝允許類的客戶不必關(guān)心類的工作機理就可以使用它。

就象駕駛員不必了解發(fā)動機的工作原理就可以駕駛汽車一樣,類的客戶在使用一個類時也不必了解它是如何工作的,而只需了解它的功能即可。

所有對數(shù)據(jù)的訪問和操作都必須通過特定的方法,否則便無法使用,從而達到數(shù)據(jù)隱藏的目的。

對象就是類的實例。

類與對象的關(guān)系就如類型和變量的關(guān)系,所有對類的操作都必須第一講基于WINDOWS編程的基礎(chǔ)知識私有成員(private):

缺省情況下,一個類中的所有成員都是私有的。

私有成員只能被類本身的成員函數(shù)訪問。

并且不具有繼承性。

保護成員(protected):

類的保護成員能被類及其派生類的成員函數(shù)和友員函數(shù)使用,具有繼承性。

1)構(gòu)造函數(shù)是特殊的成員函數(shù);在創(chuàng)建對象時首先由系統(tǒng)自動調(diào)用。

它的作用是為新創(chuàng)建的對象分配空間,或為該對象的成員變量賦值等;構(gòu)造函數(shù)名必須與其類名稱完全相同,并且不允許有返回值。

2)析構(gòu)函數(shù)析構(gòu)函數(shù)在類名之前加~來命名,它不允許有返回值,也不允許帶參數(shù),并且一個類只能有一個析構(gòu)函數(shù)。

增加功能對程序所作的修改工作量非常大。

繼承的方法允許在不改動原程序的基礎(chǔ)上對其進行擴充,這樣使得原功能得以保存,而新功能也得以擴展。

這有利于減少重復(fù)編碼,提高軟件的開發(fā)效率。

1)一個類可以繼承其它類的成員,被繼承的類叫2)派生類不但擁有自己的成員變量和成員函數(shù),還擁有父類的成員變量和成員函數(shù)。

前面介紹了類的私有成員只能被類的成員函數(shù)和友員函數(shù)使用;類的保護成員能被類及其派生類的成員函數(shù)和友員函數(shù)使用。

也就是說,類的保護成員具有繼承性,而類的私有成員不具有繼承性。

1)公用基類中的所有public成員在派生類中仍是public成員,所有protected成員在派生類中仍是protected成員。

2)私有基類中的public成員和protected成員在派生類中均變成private成員。

1)多重繼承的定義方法例子:

classpublic:int第一講基于WINDOWS編程的基礎(chǔ)知識voidfunc1();public:intvoidfunc1();voidShow()缺省情況下基類被定義為private;因此基類B為私有基類。

2)繼承的不確定性例子:classC:publicvoidShow()中同時擁有數(shù)據(jù)成員i和成員函數(shù)func1,類C引用基類的成員時,系統(tǒng)無法分辨是調(diào)用哪一基類的成員而發(fā)生錯誤;3)解決多重繼承的不確定性:

使用域操作符指明要調(diào)用的基類,即可解決不確定性問題。

classC:publicvoidShow()第一講基于WINDOWS編程的基礎(chǔ)知識定義:

所謂多層繼承指的是從一個類派生出另一個類,然后以派生類作為基類,派生出另一個類,直到最后生成的派生類滿足需要為止(見MSDNclassbasepublic:intclassderived:publicbase{//派生類public:doublederived(int,double);doublel):base(k){//派生類構(gòu)造函數(shù)在定義派生類對象時,系統(tǒng)首先調(diào)用基類的構(gòu)造函數(shù),然后調(diào)用派生類的構(gòu)造函數(shù);在上例中,derived類首先調(diào)用base類的構(gòu)造函數(shù),然后調(diào)用自身的構(gòu)造函數(shù)。

析構(gòu)函數(shù)的調(diào)用順序與構(gòu)造函數(shù)的調(diào)用順序相反。

1)如果函數(shù)有相同的名稱和返回值,而有不同的參數(shù)個數(shù)或參數(shù)類型,則這些函數(shù)就是重載函數(shù)。

2)派生類繼承了基類的某一函數(shù),并且又自定義了一個同名函數(shù),有相同的返回值,不同的參數(shù)類型或參數(shù)個數(shù)。

這種情況不屬于重載。

因為它們屬于不同的域。

第一講基于WINDOWS編程的基礎(chǔ)知識classbasevoidfunc(intvoidfunc(doublevoidfunc(double重載操作符的定義:

返回值類型operatorop(參數(shù)表);其中,op為重載操作符,它必須是VC++中所定義的運算符。

然后像定義函數(shù)一樣定義重載操作符函數(shù)。

例子:

classpersonintage;voidoperatorvoidperson::operator++()多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計的精髓之所在,也是C++中最難理解和掌握的部分。

在C++中,多態(tài)性是建立在虛擬函數(shù)基礎(chǔ)上的,虛擬函數(shù)的使用使類的成員函數(shù)表現(xiàn)出多態(tài)性。

1)函數(shù)的定義:

在定義類時在其成員函數(shù)前加上關(guān)鍵字virtual;2)如果基類中成員函數(shù)定義為虛函數(shù),則派生類中與其定義完全相同的成員函數(shù),編譯器自動將其視為虛函數(shù);3)只有類的成員函數(shù)才能定義為虛函數(shù)。

第一講基于WINDOWS編程的基礎(chǔ)知識4)虛擬成員函數(shù)的存取要看首次定義它的類中,該函數(shù)是public還是private。

classInsectvirtualboolCanFly();boolInsectreturnFALSE;classButterfly:publicInsectboolCanFly();boolButterflyreturnTRUE;boolrtn;Insectinc1,*pInc;Butterflybtfly;pInc&inc1;//pInc指針指向Insect對象rtnpInc->CanFly();//返回FALSEpInc&btfly;//pInc指針指向Butterfly對象rtnpInc->CanFly();//返回TRUE1)形式上,重載函數(shù)要求有相同的返回值類型和函數(shù)名,并有不同的參數(shù)序列;而虛擬函數(shù)要求三者完全相同。

2)重載函數(shù)可以是成員函數(shù)或非成員函數(shù);而虛擬函數(shù)必須是成員函數(shù)。

3)調(diào)用方法上,重載函數(shù)根據(jù)所傳遞的參數(shù)序列的差別作為調(diào)用的依據(jù);而虛擬函數(shù)則根據(jù)調(diào)用對象的不同而去調(diào)用不同類的函數(shù)。

4)虛擬函數(shù)在運行時表現(xiàn)出多態(tài)功能;而重載函數(shù)不具有這一功能。

第一講基于WINDOWS編程的基礎(chǔ)知識定義:

virtualtypefuncname(parameter)=0;C++中有時設(shè)計基類就是為了被繼承,而基類中的虛擬函數(shù)不做任何工作,這種情況下可以將基類中的虛擬函數(shù)定義為純虛函數(shù)。

包含純需函數(shù)的類叫抽象類。

抽象類不能定義對象,但可以定義指向它的指針。

1.1什么是類?1.2理解封裝、繼承和多態(tài)。

第一講基于WINDOWS編程的基礎(chǔ)知識以前Windows編程需要程序員編寫大量的框架代碼,這對初學者來說簡直就是一個噩夢;并且這些框架代碼基本相同,因此Microsoft提供了向?qū)ppWizard幫助生成框架代碼,這極大的方便了我們編寫程序。

ATLCOMAppWizardCustomAppWizardDatabaseProjectISAPIExtensionWizardMakefileMFCActiveXControWizardMFCAppWizard(DLL)MFCDatabaseWizardWin32ApplicationWin32ConsoleApplicationWin32DLLWin32StaticLibrary使用向?qū)ppWizard生成典型的應(yīng)用程序——基于多文檔的可執(zhí)行程序。

Microsoft的MSDN提供了編程所需的絕大部分信息,使用F1鍵可以打開MSDN幫助。

消息是Windows編程不同于其它編程方式的地方,如DOS環(huán)境下編程。

消息就是操作系統(tǒng)通知應(yīng)用程序某事已發(fā)生的一種方式,如:

用戶已輸入、已單擊或移動鼠標、打印機已空暇等。

盡管操作系統(tǒng)用整數(shù)來引用消息,但所有消息都通過它們的名字來引用。

一個巨大的#define語句將消息名同數(shù)值聯(lián)系起來。

不同消息由操作系統(tǒng)或應(yīng)用程序的不同部分處理。

如,當用戶在窗口上移動鼠標時,窗口得到一個WM_MOUSEMOVE消息,它幾乎全部傳送給操作系統(tǒng)去處理。

2)MFC允許程序員忽略底層消息,并使得在單獨類級別上聲明每個類處理哪些消息更容易。

第二講編程工具VC1)任何windows程序的核心是消息循環(huán),這通常包含在WinMain()例程中。

2)MFC通過消息映射來保持消息處理函數(shù)與消息處理信息的一致。

消息映射是進行windows編程的一部分MFC方法,用來代替編寫向用戶的WinProc()發(fā)送消息的WinMain()函數(shù),及編寫檢查消息類型的WinProc()函數(shù)。

用戶只需編寫處理消息的函數(shù),并且在用戶的類中增加一個消息映射即可,其它一切由MFC處理。

在類聲明的結(jié)尾部分,使用宏來聲明在類定義部分需要消息映射。

在*.CPP文件中使用宏來聲明消息映射,在兩個宏之間聲明消息的映射函數(shù)。

ON_COMMAND用于將特定命令的處理委派給類的一個成員函數(shù)。

ON_MESSAGE用于將用戶自定義消息的處理委派給類的一個成員函數(shù)。

1)帶標簽的ClassWizard對話框通過選擇View,Classwizard或按Ctrl+W可以顯示主Classwizard對話框。

在對話框的頂部有兩個下拉列表框,一個用于提示正在處理的工程文件(本例是),另外一個用于提示哪一個類擁有正在進行編輯的消息映射。

在這兩個組合框下面是一個列表框。

左邊的框列出了類本身和用戶局面可以產(chǎn)生的所有命令。

右邊的框列出了這個類可以捕獲的所有Windows消息,也列出了許多捕獲常用消息的虛函數(shù)。

在這些框的右邊是一些按鈕,它們的作用分別是

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論