




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
MAPGIS二次開發培訓教程MAPGIS是武漢中地信息工程有限公司研制的具有自主版權的大型基礎地理信息系統平臺。
它是一個集當代最先進的圖形、圖像、地質、地理、遙感、測繪、人工智能、計算機科學于一體的大型智能軟件系統,是集數字制圖、數據庫管理及空間分析為一體的空間信息系統,是進行現代化管理和決策的先進工具。
MAPGIS連續四年在全國GIS測評中名列第一,并成為唯一連續四年獲得國家科技部向社會推薦的國產GIS軟件平臺。
中地軟件叢書之MAPGIS二次開發培訓教程是根據最新推出的MAPGIS軟件平臺編寫而成,主要介紹進行MAPGIS二次開發必須具備的基礎知識、主流開發工具以及MAPGIS系統的基本概念、結構體系和操作方法。
該教程分為三個部分,共十一講。
其中:
第一部分(即第一講的內容):
介紹Windows編程的概念。
包括類與數據封裝、繼承、重載、虛擬函數與多態性以及內存管理。
該部分為可視化編程的基礎,有可視化編程經驗的讀者可以略過此講,直接進入下一部分的學習。
第二部分(即第二講的內容):
編程工具VC。
對于在VC這樣一個編程環境中開發應用程序所應熟悉的概念,術語和最基本的框架、構件實現過程等知識做了一個簡明扼要的介紹。
已掌握一定VC編程基礎知識的讀者可以略過該部分。
第三部分(即第三講至第十一講的內容):
詳細講述了地理信息系統的基本概念(包括GIS原理概述、空間數據類型、空間數據庫、空間數據結構與數據管理等內容);MAPGIS的基本概念和體系結構(簡要描述了MAPGIS二次開發的基本概念、術語、工作區、空間實體及其數據、C++類組織和開發環境介紹的內容);MAPGIS空間數據存取和屬性編輯(包括工作區、空間實體和屬性的操作及其網絡介紹);圖形顯示輸出及窗口操作、圖形編輯、類庫和控件開發;矢量空間分析和屬性查詢;投影變換、圖框生成和工程管理;圖庫管理和查詢系統(包括基于圖庫的應用程序開發、MAPGIS圖庫介紹、開發的一般步驟以及結合圖庫顯示說明圖庫主要函數的功能等方面的內容)以及圖象分析與處理。
這一部分為本教程的主要部分,能使大家從了解到熟練掌握這個部分的內容也是我們編制本書的主要目的,同時它還可被作為MAPGIS二次開發過程中的參考來使用。
參加本書編寫的人員主要是本系統的軟件開發人員以及長期從事MAPCAD和MAPGIS訓的教師。
由于時間倉促,書中難免存在錯誤和不當之處,敬請廣大用戶及讀者提出寶貴意見和建議,以利改進。
中地軟件叢書編委會2001年10第一講基于WINDOWS編程的基礎知識1.1引言1.2類與數據封裝1.3繼承1.4重載1.5虛擬函數與多態性第二講編程工具VC2.1熟悉VC開發環境2.2消息與命令2.3文檔、視結構102.4圖形設備接口112.5對話框和控件122.6編程規范................................................................................................................................13第三講地理信息系統基本概念........................................................................................................153.1GIS原理概述153.2GIS空間數據類型173.3GIS數據管理183.4空間分析................................................................................................................................203.5地理信息系統發展20第四講MAPGIS的基本概念和體系結構224.1MAPGIS二次開發的基本概念224.2MAPGIS基本術語234.3MAPGIS的數據管理(工作區)254.4MAPGIS的空間實體及其數據組織274.5MAPGIS的C++類組織294.6MAPGIS的VC++開發環境介紹30第五講MAPGIS空間數據存取和屬性編輯325.1工作區操作325.2空間實體操作345.3屬性(屬性結構)操作.......................................................................................................375.4網絡介紹................................................................................................................................44第六講圖形顯示輸出及窗口處理456.1圖形顯示輸出456.2窗口處理................................................................................................................................496.3類庫開發中的圖形顯示和窗口處理51第七講圖形編輯、類庫和控件開發537.1圖形編輯開發概要537.2圖形編輯API函數開發.......................................................................................................537.3MAPGIS類庫開發547.4MAPGIS控件開發60第八講矢量空間分析和屬性查詢668.1矢量空間分析668.2屬性查詢檢索71第九講投影變換和圖框生成739.1投影變換(projdll.h、cordcvt.h)739.2圖框生成(frmdll32.h).......................................................................................................83第十講圖庫管理和工程管理9110.1MAPGIS圖庫簡介9110.2基于圖庫的應用程序的開發9210.3結合圖庫的顯示說明圖庫中主要函數的功能9210.4工程管理(prj_disp.h和map_prj.h)............................................................................96第十一講MAPGIS圖象處理和分析10111.1遙感圖象處理的基本知識10111.2處理方法............................................................................................................................10111.3主要API介紹9911.4組件介紹............................................................................................................................10711.5在VC中的開發過程(結合示例程序講解)10811.6示例程序說明MAPGIS二次開發問題集錦1101.屬性和屬性結構1102.空間實體操作問題1233.顯示、編輯問題1244.空間分析問題1315.數字高程模型1316.安裝問題1347.工程問題1358.輸出問題1369.其它138第一講基于WINDOWS編程的基礎知識程序被認為是在一個數據集合上進行的一系列操作。
主要思想是:
功能分解并逐步求精。
實質是把數據和處理這些數據的過程合并為一個單獨的“對象”――一個具有確定特性的自完備的實體。
多態簡單的說,類就是一種用戶定義的數據類型,跟結構類似;并且,類具有自己的成員變量和成員函數(方法),通過它們可以對類自身進行操作。
如:
汽車可以看作是發動機、車輪、座椅等諸如此類的集合。
也可以從功能的角度來研究,譬如,能移動,加速,減速,剎車等。
例如:
classCMyClass1protected:CMyClass1();public:virtual定義:
指能夠把一個實體的信息、功能、響應都裝入一個單獨的對象中的特性。
封裝的優點如下:
封裝允許類的客戶不必關心類的工作機理就可以使用它。
就象駕駛員不必了解發動機的工作原理就可以駕駛汽車一樣,類的客戶在使用一個類時也不必了解它是如何工作的,而只需了解它的功能即可。
所有對數據的訪問和操作都必須通過特定的方法,否則便無法使用,從而達到數據隱藏的目的。
對象就是類的實例。
類與對象的關系就如類型和變量的關系,所有對類的操作都必須第一講基于WINDOWS編程的基礎知識私有成員(private):
缺省情況下,一個類中的所有成員都是私有的。
私有成員只能被類本身的成員函數訪問。
并且不具有繼承性。
保護成員(protected):
類的保護成員能被類及其派生類的成員函數和友員函數使用,具有繼承性。
1)構造函數是特殊的成員函數;在創建對象時首先由系統自動調用。
它的作用是為新創建的對象分配空間,或為該對象的成員變量賦值等;構造函數名必須與其類名稱完全相同,并且不允許有返回值。
2)析構函數析構函數在類名之前加~來命名,它不允許有返回值,也不允許帶參數,并且一個類只能有一個析構函數。
增加功能對程序所作的修改工作量非常大。
繼承的方法允許在不改動原程序的基礎上對其進行擴充,這樣使得原功能得以保存,而新功能也得以擴展。
這有利于減少重復編碼,提高軟件的開發效率。
1)一個類可以繼承其它類的成員,被繼承的類叫2)派生類不但擁有自己的成員變量和成員函數,還擁有父類的成員變量和成員函數。
前面介紹了類的私有成員只能被類的成員函數和友員函數使用;類的保護成員能被類及其派生類的成員函數和友員函數使用。
也就是說,類的保護成員具有繼承性,而類的私有成員不具有繼承性。
1)公用基類中的所有public成員在派生類中仍是public成員,所有protected成員在派生類中仍是protected成員。
2)私有基類中的public成員和protected成員在派生類中均變成private成員。
1)多重繼承的定義方法例子:
classpublic:int第一講基于WINDOWS編程的基礎知識voidfunc1();public:intvoidfunc1();voidShow()缺省情況下基類被定義為private;因此基類B為私有基類。
2)繼承的不確定性例子:classC:publicvoidShow()中同時擁有數據成員i和成員函數func1,類C引用基類的成員時,系統無法分辨是調用哪一基類的成員而發生錯誤;3)解決多重繼承的不確定性:
使用域操作符指明要調用的基類,即可解決不確定性問題。
classC:publicvoidShow()第一講基于WINDOWS編程的基礎知識定義:
所謂多層繼承指的是從一個類派生出另一個類,然后以派生類作為基類,派生出另一個類,直到最后生成的派生類滿足需要為止(見MSDNclassbasepublic:intclassderived:publicbase{//派生類public:doublederived(int,double);doublel):base(k){//派生類構造函數在定義派生類對象時,系統首先調用基類的構造函數,然后調用派生類的構造函數;在上例中,derived類首先調用base類的構造函數,然后調用自身的構造函數。
析構函數的調用順序與構造函數的調用順序相反。
1)如果函數有相同的名稱和返回值,而有不同的參數個數或參數類型,則這些函數就是重載函數。
2)派生類繼承了基類的某一函數,并且又自定義了一個同名函數,有相同的返回值,不同的參數類型或參數個數。
這種情況不屬于重載。
因為它們屬于不同的域。
第一講基于WINDOWS編程的基礎知識classbasevoidfunc(intvoidfunc(doublevoidfunc(double重載操作符的定義:
返回值類型operatorop(參數表);其中,op為重載操作符,它必須是VC++中所定義的運算符。
然后像定義函數一樣定義重載操作符函數。
例子:
classpersonintage;voidoperatorvoidperson::operator++()多態性是面向對象程序設計的精髓之所在,也是C++中最難理解和掌握的部分。
在C++中,多態性是建立在虛擬函數基礎上的,虛擬函數的使用使類的成員函數表現出多態性。
1)函數的定義:
在定義類時在其成員函數前加上關鍵字virtual;2)如果基類中成員函數定義為虛函數,則派生類中與其定義完全相同的成員函數,編譯器自動將其視為虛函數;3)只有類的成員函數才能定義為虛函數。
第一講基于WINDOWS編程的基礎知識4)虛擬成員函數的存取要看首次定義它的類中,該函數是public還是private。
classInsectvirtualboolCanFly();boolInsectreturnFALSE;classButterfly:publicInsectboolCanFly();boolButterflyreturnTRUE;boolrtn;Insectinc1,*pInc;Butterflybtfly;pInc&inc1;//pInc指針指向Insect對象rtnpInc->CanFly();//返回FALSEpInc&btfly;//pInc指針指向Butterfly對象rtnpInc->CanFly();//返回TRUE1)形式上,重載函數要求有相同的返回值類型和函數名,并有不同的參數序列;而虛擬函數要求三者完全相同。
2)重載函數可以是成員函數或非成員函數;而虛擬函數必須是成員函數。
3)調用方法上,重載函數根據所傳遞的參數序列的差別作為調用的依據;而虛擬函數則根據調用對象的不同而去調用不同類的函數。
4)虛擬函數在運行時表現出多態功能;而重載函數不具有這一功能。
第一講基于WINDOWS編程的基礎知識定義:
virtualtypefuncname(parameter)=0;C++中有時設計基類就是為了被繼承,而基類中的虛擬函數不做任何工作,這種情況下可以將基類中的虛擬函數定義為純虛函數。
包含純需函數的類叫抽象類。
抽象類不能定義對象,但可以定義指向它的指針。
1.1什么是類?1.2理解封裝、繼承和多態。
第一講基于WINDOWS編程的基礎知識以前Windows編程需要程序員編寫大量的框架代碼,這對初學者來說簡直就是一個噩夢;并且這些框架代碼基本相同,因此Microsoft提供了向導AppWizard幫助生成框架代碼,這極大的方便了我們編寫程序。
ATLCOMAppWizardCustomAppWizardDatabaseProjectISAPIExtensionWizardMakefileMFCActiveXControWizardMFCAppWizard(DLL)MFCDatabaseWizardWin32ApplicationWin32ConsoleApplicationWin32DLLWin32StaticLibrary使用向導AppWizard生成典型的應用程序——基于多文檔的可執行程序。
Microsoft的MSDN提供了編程所需的絕大部分信息,使用F1鍵可以打開MSDN幫助。
消息是Windows編程不同于其它編程方式的地方,如DOS環境下編程。
消息就是操作系統通知應用程序某事已發生的一種方式,如:
用戶已輸入、已單擊或移動鼠標、打印機已空暇等。
盡管操作系統用整數來引用消息,但所有消息都通過它們的名字來引用。
一個巨大的#define語句將消息名同數值聯系起來。
不同消息由操作系統或應用程序的不同部分處理。
如,當用戶在窗口上移動鼠標時,窗口得到一個WM_MOUSEMOVE消息,它幾乎全部傳送給操作系統去處理。
2)MFC允許程序員忽略底層消息,并使得在單獨類級別上聲明每個類處理哪些消息更容易。
第二講編程工具VC1)任何windows程序的核心是消息循環,這通常包含在WinMain()例程中。
2)MFC通過消息映射來保持消息處理函數與消息處理信息的一致。
消息映射是進行windows編程的一部分MFC方法,用來代替編寫向用戶的WinProc()發送消息的WinMain()函數,及編寫檢查消息類型的WinProc()函數。
用戶只需編寫處理消息的函數,并且在用戶的類中增加一個消息映射即可,其它一切由MFC處理。
在類聲明的結尾部分,使用宏來聲明在類定義部分需要消息映射。
在*.CPP文件中使用宏來聲明消息映射,在兩個宏之間聲明消息的映射函數。
ON_COMMAND用于將特定命令的處理委派給類的一個成員函數。
ON_MESSAGE用于將用戶自定義消息的處理委派給類的一個成員函數。
1)帶標簽的ClassWizard對話框通過選擇View,Classwizard或按Ctrl+W可以顯示主Classwizard對話框。
在對話框的頂部有兩個下拉列表框,一個用于提示正在處理的工程文件(本例是),另外一個用于提示哪一個類擁有正在進行編輯的消息映射。
在這兩個組合框下面是一個列表框。
左邊的框列出了類本身和用戶局面可以產生的所有命令。
右邊的框列出了這個類可以捕獲的所有Windows消息,也列出了許多捕獲常用消息的虛函數。
在這些框的右邊是一些按鈕,它們的作用分別是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 測試環境的搭建策略及技巧分享試題及答案
- 寄宿小學安全管理制度
- 商鋪關于餐飲管理制度
- 工程對上結算管理制度
- 口腔咨詢日常管理制度
- 計算機網絡知識點概述試題及答案
- 實驗生物安全管理制度
- 學校資產報告管理制度
- 學生自我隔離管理制度
- 深入淺出網絡監控工具介紹試題及答案
- 難點02:總集篇·十六種陰影部分面積法專項練習-2024年小升初數學典型例題系列(解析版)2
- 全球經濟2025年全球經濟與貿易師考試試題及答案
- 2025年中考地理熱點素材題(含答案)
- 【MOOC】壓力與情緒管理-四川大學 中國大學慕課MOOC答案
- 教科版科學五年級下冊《熱》單元教材解讀分析
- 2018二建繼續教育(市政公用工程)試題庫(有答案解析)
- 籃球活動興趣小組活動簡報
- 全面依法治國(課堂PPT)
- 2025年退役士兵轉業軍人2025年考試試題題庫完整版
- 資本論課程試題
- 用友T+固定資產條碼-(二維碼)盤點解決方案
評論
0/150
提交評論