版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、第一章z開發(fā)基礎11組件對象模型在明確討論COM之前,有必要先一般性地思考一下軟件組件使用的廣泛性。在軟件組件背后有許多的驅(qū)使因素,但最基本的就是軟件開發(fā)是個昂貴和耗時的風險行為。在理想的世界里,假如曾經(jīng)寫了一段代碼,然后通過不同的開發(fā)工具一次一次的反復使用它,這種情況是可能的,即便是在最初的開發(fā)者不能預見的環(huán)境下也能使用。理想情況下,對最初開發(fā)者生成的函數(shù)功能的改變能在不需要目前用戶改變和重編譯他們的代碼情況下實現(xiàn)。早期重用代碼塊的嘗試就是創(chuàng)建類庫的進展,這些類庫通常用C+開發(fā)。早期的嘗試有很多的限制,較為明顯的是:共享系統(tǒng)組件的困難(共享二進制C+組件是非常困難的一一大部分的嘗試是共享源代
2、碼);不重新編譯就很難保存和更新C+組件的問題;缺乏好的建模語言和工具以及屬性接口和定制工具。為了解決這樣那樣的一些問題,許多軟件工程師開始采用基于組件的方法進行系統(tǒng)開發(fā)。一個軟件組件就是一個可重用代碼的二進制單元。已經(jīng)出現(xiàn)了幾個不同但相互重疊的開發(fā)和共享組件標準。微軟的COM已成為建立交互式桌面應用程序事實上的標準。在互聯(lián)網(wǎng)上,JavaBean是可行的技術。對象管理組(OMG)制定了粗粒度層次上適用于應用程序互操作的公用對象請求代理架構(CORBA)。為了理解COM(以及所有基于COM的技術),認識到其不是一種面向?qū)ο笳Z言而是一個協(xié)議或標準是非常重要的。COM不僅僅是一種技術,還是軟件開發(fā)的
3、一種方法論。COM定義了一種連接軟件組件或模型的協(xié)議。通過使用這種協(xié)議,可以建立能在分布式系統(tǒng)中動態(tài)交互的可重用軟件組件。COM還定義了一種稱作基于接口的編程模式。對象封裝了能體現(xiàn)定義良好的接口后每個實例化對象特征的操作方法和數(shù)據(jù)。這增強了系統(tǒng)開發(fā)的結構化和安全性,因為一個對象的客戶并不知道某個特定方法如何實現(xiàn)的任何細節(jié)。COM不規(guī)定應如何構建一個應用程序。語言、結構和實現(xiàn)細節(jié)都由使用COM的應用程序開發(fā)人員決定。COM的確規(guī)定了一個對象模型和使COM對象能與其他COM對象交互的編程需求。這些對象可以位于單個過程中,在不同的過程中,或者甚至在遠程機器上。它們可以用其他語言編寫,也可以用完全不同
4、的方式開發(fā)。這就是COM被認為是二進制規(guī)范或標準的原因一它是一個在程序被編譯為二進制機器代碼后才應用的標準。COM允許對象在二進制水平上重用,意味著第三方開發(fā)者即使從最底層擴展系統(tǒng)也不需要訪問這些對象的源代碼、頭文件或?qū)ο髱?。組件、對象、客戶和服務器不同的文件中組件(components)、對象(objects)、客戶(clients)和服務器(servers)表示不同的意思(各種文件用這些術語指代相同的事物,使得術語使用更加混亂)。因此,定義這本書所要使用的術語是非常有必要的。COM是一種客戶/服務器(C/S)架構。服務器(或?qū)ο螅┨峁┠撤N功能,而客戶使用這種功能。COM使客戶和對象之間的交
5、流變得簡單。一個對象可以同時是一個客戶的服務器和其他對象服務的客戶??蛻艏捌浞掌骺梢源嬖谟谕粋€進程中或不同的進程中。入進程服務被打包成動態(tài)鏈接庫(DLL)格式,當客戶第一次訪問這些服務時會加載這些DLL到客戶的地址空間中。出進程服務被編譯為可執(zhí)行文件并在它們自己的地址空間中運行。COM這種差異對客戶透明。在創(chuàng)建COM對象時,開發(fā)者必須了解對象駐留在什么類型的服務器中,但如果對象的創(chuàng)建者正確地實現(xiàn)了它們,打包并不會影響客戶對對象的使用。這兩種對稱相反的打包方法各有優(yōu)缺點。DLLs能更快速的裝載到內(nèi)存中,且調(diào)用一個DLL函數(shù)速度較快。另一方面,EXEs(可執(zhí)行文件)能夠提供更健壯的解決方案(如
6、果服務器失敗,客戶端不會崩潰),同時安全性能更好,因為服務器有其自己的安全保障。在一個分布式系統(tǒng)中,EXEs更靈活,即使服務器與客戶端有不同的字節(jié)順序也不會有什么問題。大多數(shù)ArcObjects服務被打包為入進程服務(DLLs)。稍后,用戶將看到使用入進程服務的性能優(yōu)勢。在一個COM系統(tǒng)中,客戶端或功能的使用者與功能的提供者,對象完全相分離??蛻舳诵枰浪兄R就是可用的功能;有了這些知識,客戶端就可以調(diào)用對象中的方法并期望對象作出響應。這樣,COM可以認為是客戶端和服務器之間的一種協(xié)議。如果對象違反了這種協(xié)議,那么系統(tǒng)的行為就不能預知。這樣,COM開發(fā)是基于功能實現(xiàn)者和功能使用者間相互信任
7、基礎上的。在ArcGIS應用程序中,許多對象通過其接口提供了幾千個屬性和方法。當使用ESRI對象庫時,可以假定所有這些屬性和方法是完全實現(xiàn)了的,如果它們列在對象圖中,就可以使用它們。COM類和接口(COMCLASSESANDINTERFACES)使用COM開發(fā)就意味著用接口開發(fā),即所謂的基于接口的編程模式。對象間的所有通信都是通過其接口實現(xiàn)的。COM接口是抽象的,意味著沒有與接口相關聯(lián)的實現(xiàn);與接口關聯(lián)的代碼都來自類的實現(xiàn)。接口規(guī)定了對選擇用于實現(xiàn)接口的對象可以作什么請求。接口的實現(xiàn)方法隨對象不同而不同。這樣對象繼承了接口類型而不是接口的實現(xiàn),這稱為類型繼承。功能用接口來抽象模擬并在類的實現(xiàn)中
8、實現(xiàn)。類和接口通常被稱為COM的“什么”和“怎么”。接口定義對象能做什么,而類定義怎么做。COM類提供了一個或多個接口的代碼,從而在類中完全封裝了其功能。兩個類可以具有相同的接口,但它們實現(xiàn)這些接口的方法可能完全不同。通過這種方式實現(xiàn)接口,COM展示了經(jīng)典的面向?qū)ο蟮亩鄳B(tài)行為。COM不支持多重繼承概念,但由于單個類能實現(xiàn)多個接口,所以這不是一個缺陷。關于多態(tài)行為可以看左邊的模型圖。ArcObjects中開發(fā)者必須理解的類有三種類型:抽象類(abstractClasses)、組件對象類(coclasses)和類(classes)。抽象類不能創(chuàng)建對象,只是對其子類的實例化進行了規(guī)定(通過類型繼承)
9、。ArcObjects的Dataset或Geometry類就是抽象類的例子。不能創(chuàng)建Geometry類型的對象,但可以創(chuàng)建Polyline類型的對象。Polyline對象實現(xiàn)了在Geometry基類中定義的接口因此在基于對象類中定義的任何接口都可以從組件對象類訪問。組件對象類是公開可創(chuàng)建類。換言之,COM可以創(chuàng)建組件對象類的實例并把實例對象提供給客戶端,從而使客戶端能使用這個類接口定義的服務。類不能公開創(chuàng)建,但類的對象可以用ArcObjects中其它對象來創(chuàng)建并提供給客戶端使用。11ArcGISEngine介紹ArcGIS9概覽ArcGIS9是建立完整GIS的一個GIS軟件產(chǎn)品集成體系。該體系
10、建立在ArcObjects這個共享的GIS軟件組件公用庫基礎之上。ArcGIS9由四個關鍵部分組成:ArcGISDesktop高級GIS應用程序的一個集成套件。ArcGISEngine通過多種應用程序接口建立自定義應用程序的嵌入式GIS組件庫。ArcGISServer為企業(yè)和Web計算框架建立服務器端GIS應用程序的一個平臺,可用于建立Web服務和Web應用程序。ArcIMS通過開放Internet協(xié)議發(fā)布地圖、數(shù)據(jù)和元數(shù)據(jù)的GISWeb服務器。RuntimeOptionsDeveloperComponentsPresentationDataAccessServicesrcfeaditerBr
11、twArcSDE1ArcViewDataArcGIS的開發(fā)途徑多種多樣,開發(fā)人員可以通過ComponentsArcObjectsArcGISClientsCustomapplicationApplicationServersArcGISServerArcIMS以下幾種方法進行開發(fā):配置/定制諸如ArcMap和ArcCatalog等ArcGIS應用程序。擴展ArcGIS的結構和數(shù)據(jù)模型。用ArcGISEngine將地圖和GIS功能嵌入到其他應用程序中。用ArcGISEngine建立和部署自定義桌面應用程序。用程序。用ArcGISServer建立Web服務和Web應ArcGISEngine是開發(fā)人
12、員用于建立自定義應用程序的嵌入式GIS組件的一個完整類庫。開發(fā)人員可以使用ArcGISEngine將GIS功能嵌入到現(xiàn)有的應用程序中,包括MicrosoftOffice的Word和Excel等產(chǎn)品,也可以建立能分發(fā)給眾多用戶的自定義高級GIS系統(tǒng)應用程序。ArcGISEngine由一個軟件開發(fā)工具包和一個可以重新分發(fā)的、為所有ArcGIS應用程序提供平臺的運行時(runtime)組成。ArcGISEngine的五個組成部分概括如下:1基本服務一由GIS核心ArcObjects構成,幾乎所有GIS應用程序都需要,如要素幾何體和顯示。2數(shù)據(jù)存取一ArcGISEngine可以對許多柵格和矢量格式進行
13、存取,包括強大而靈活的地理數(shù)據(jù)庫。3地圖表達一包括用于創(chuàng)建和顯示帶有符號體系和標注功能的地圖的ArcObjects,及包括創(chuàng)建自定義應用程序的專題制圖功能的ArcObjects。4開發(fā)組件一用于快速應用程序開發(fā)的高級用戶接口控件和用于高效開發(fā)的一個綜合幫助系統(tǒng)。5運行時選項一ArcGISEngine運行時可以與標準功能或其他高級功能一起部署。除運行時選項外,這些部分都可以通過ArcGISEngine的軟件開發(fā)工具包獲得。ArcGISEngine運行時及其選項雖然也是自定義GIS應用程序開發(fā)不可或缺的一部分,但涉及到特定的應用程序部署,因此被認為是一個獨立的組成部分。ArcGISEngine軟件
14、開發(fā)工具包ArcGISEngine開發(fā)工具包是一個基于組件的軟件開發(fā)產(chǎn)品,用于建立和部署自定義GIS和制圖應用程序。ArcGISEngine開發(fā)工具包不是一個終端用戶產(chǎn)品,而是一個應用程序開發(fā)人員的工具包??梢杂肁rcGISEngine開發(fā)工具包建立基本的地圖瀏覽器或綜合、動態(tài)的GIS編輯工具。使用ArcGISEngine開發(fā)工具包,開發(fā)人員在建立定制的地圖接口方面具有前所未有的靈活性。開發(fā)人員可以使用幾個API中的任何一個來建立獨一無二的應用程序,或者將ArcGISEngine組件與其他軟件組件組合起來實現(xiàn)地圖與用戶管理信息之間的協(xié)同關系。使用ArcGISEngine,地圖本身可以是應用程序
15、的一個次要元素或核心部分。例如,如果應用程序的重點是有關商業(yè)信息的數(shù)據(jù)庫,當應用程序的用戶執(zhí)行一個數(shù)據(jù)庫查詢時,ArcGISEngine可以使該應用程序顯示一幅高亮顯示感興趣商業(yè)區(qū)位置的地圖。ArcGISEngine開發(fā)工具包可以訪問GIS組件或ArcObjects的大型集合,這些GIS組件或ArcObjects分別屬于前面討論過的類目基本服務、數(shù)據(jù)存取和地圖表達。ArcGISEngine的第四個部分開發(fā)組件也包含在ArcGISEngine開發(fā)工具包中。這些都是用于建立高質(zhì)量地圖用戶接口的增值開發(fā)控件。ArcGISEngine為輔助應用程序開發(fā)提供了下列ArcGIS控件或可視化組件:MapCo
16、ntrolPageLayoutControlSceneControlGlobeControlToolbarControlTOCControlReaderControlToolbarControl中使用的命令、工具和菜單集合ArcGISEngine運行時(Runtime)ArcGISEngine的最后一個組件就是其運行時選件。用ArcGISEngine軟件開發(fā)工具包建立的所有應用程序為成功執(zhí)行都需要合適級別許可的ArcGISEngine運行時。ArcGISEngine運行時是建立ArcGISDesktop的平臺,因此,在ArcGISEngine應用程序開發(fā)人員允許的情況下,ArcGISDeskt
17、op應用程序的用戶可以執(zhí)行基于Engine的自定義應用程序。ArcGISEngine運行時有多種選項,從標準版本一直到企業(yè)版本。標準ArcGISEngine功能標準Engine運行時提供所有ArcGIS應用程序的核心功能。這個級別的ArcGISEngine運行時可以操作幾種不同的柵格和矢量格式、進行地圖表達和創(chuàng)建以及通過執(zhí)行各種空間或?qū)傩圆樵儾檎乙亍_@個級別的ArcGISEngine運行時還可以進行基本數(shù)據(jù)創(chuàng)建、編輯Shapef訂e和簡單的個人地理數(shù)據(jù)庫及GIS分析。地理數(shù)據(jù)庫更新選項ArcGISEngine運行時地理數(shù)據(jù)庫更新選項增加了創(chuàng)建和更新多用戶企業(yè)地理數(shù)據(jù)庫的功能,包括操作程式(s
18、chema)和版本地理數(shù)據(jù)庫。地理數(shù)據(jù)庫更新選項開放了ArcGISEngine運行時運行自定義方案所需的幾個必要的ArcObjects。這些方案包括GIS數(shù)據(jù)自動化和編譯及地理數(shù)據(jù)庫要素的創(chuàng)建和維護。地理數(shù)據(jù)庫更新選項提供了建立諸如拓撲、子類和幾何網(wǎng)絡等地理數(shù)據(jù)庫行為的程序?qū)崿F(xiàn)。通過ArcSDE訪問RDBMS的ArcGISEngine開發(fā)人員可以為安裝和配置了ArcGISEngine運行時地理數(shù)據(jù)庫更新選項的終端用戶建立和部署多用戶編輯應用程序。ArcGISEngine的其他選項ArcGISEngine運行時還有其他三個運行時選項:空間分析選項一ArcGISEngine運行時空間分析選項提供了
19、強大的功能集,允許應用程序創(chuàng)建、查詢和分析基于像元的柵格數(shù)據(jù)。這種分析允許用戶生成其數(shù)據(jù)方面的信息、確定空間關系、查找合適地址及計算從一個點到另一個點的旅行累積成本。這個運行時選項支持的其他高級應用程序還包括坡度、坡向計算和用數(shù)字高程模型生成等高線等功能。3D分析選項ArcGISEngine運行時3D分析選項實現(xiàn)了數(shù)據(jù)的三維可視化。與標準ArcGISEngine相比,這個選項補充了從多個視點觀察表面和確定一個選擇位置的可視區(qū)的組件。SceneContro1和GlobeContro1提供接口瀏覽用于可視化數(shù)據(jù)、創(chuàng)建表面和分析表面的多層3D數(shù)據(jù)和全球數(shù)據(jù)。StreetMapUSA選項一treetM
20、apUSA選項提供了美國街道制圖、地址匹配和基本路徑選擇功能。StreetMap圖層自動管理、標注和繪制要素,如地方里程碑、街道、公園、水體及其他要素,生成了美國豐富的街道網(wǎng)絡地圖。所有數(shù)據(jù)都存儲在CD-ROM上的壓縮格式文件中。第二章ArcGISEngine中的控件ArcGIS控件是高級開發(fā)組件,首先它們允許開發(fā)人員建立和擴展GIS應用程序,其次它們提供了圖形用戶界面(GUI)。下列所有ArcGIS控件都可以作為ActiveX控件、.NETWindows控件和VisualJavaBean獲得:MapControl似于“數(shù)據(jù)(data)視圖”PageLayoutControlToolbarCo
21、ntrolTOCControl(內(nèi)容表控件)SceneControlGlobeControlReaderControlArcGIS控件可以通過兩種方式建立應用程序:首先,ArcGIS控件可以嵌入到現(xiàn)有的應用程序中以增加制圖功能;其次,ArcGIS控件可用于創(chuàng)建新的獨立應用程序。在前一種情況中,單個的ArcGIS控件可以嵌入到應用程序中,在后一種情況中,TOCControl和ToolbarControl可以與其他ArcGIS控件結合起來組成應用程序框架的組成部分。為了使用ArcGIS控件有效地建立應用程序,應該理解所有ArcGIS控件共同的一些主題和概念。嵌入式組件每個ArcGIS控件都是一個嵌
22、入式組件,可以拖放到可視化設計環(huán)境提供的容器窗體或?qū)υ捒蛑?。一旦放在容器?nèi),就可以改變ArcGIS控件的大小和位置,以便與其他嵌入式組件,如命令按鈕和組合框等一起為應用程序提供用戶界面。屬性頁一旦ArcGIS控件嵌入到容器中,通過右鍵點擊該控件并選擇彈出式菜單中的“屬性”菜單項,就可以在大多數(shù)可視化設計環(huán)境中訪問各個ArcGIS控件的屬性頁集合。這些屬性頁提供了選擇控件屬性和方法的快捷方式,使開發(fā)人員只需寫很少代碼甚至不用寫代碼就可以建立應用程序。事件每個ArcGIS控件都會響應終端用戶的鍵盤和鼠標交互而觸發(fā)事件。響應發(fā)生在控件內(nèi)的行為會觸發(fā)一些其他事件。例如,當裝載一個地圖文檔到MapCon
23、trol時,就會觸發(fā)OnMapReplaced事件;或者當通過拖放將一個對象在MapControl上拖動時,就會觸發(fā)OnOleDrop事件?;锇榭丶oolbarControl和TOCControl都要與另一個“伙伴控件”協(xié)同工作?!盎锇榭丶币话闶荕apControl、PageLayoutControl、ReaderControl、SceneControl或GlobeControl?!盎锇榭丶笨梢栽谠O計時通過控件的屬性頁設置(在支持屬性頁功能的開發(fā)環(huán)境中可以這樣設置),或者用SetBuddyControl方法編程設置??丶預rcGISEngine提供了一系列命令、工具和菜單與ArcGI
24、S控件協(xié)同工作。例如,MapControl和PageLayoutControl有一套地圖導航、要素選擇和圖形元素命令與其協(xié)同工作。類似的,SceneControl、GlobeControl和ReaderControl也有一套命令與其協(xié)同工作。對于使用單個控件的應用程序,這些命令可以通過編程創(chuàng)建命令的一個新例程并將該控件傳遞給命令的OnCreate事件而直接操作控件。對于使用ToolbarControl及其“伙伴控件”的應用程序,這些命令可以通過設計階段設置屬性頁或通過編程設置,或者如果ToolbarControl處于定制模式可以在運行時由終端用戶設置。地圖制作ArcGISDesktop應用程序
25、可用于預制作能被裝載到ArcGIS控件中的文檔,以便快速生產(chǎn)高質(zhì)量的地圖。例如,可以用ArcMap制作能被裝載到MapControl和PageLayoutControl中的地圖文檔。預先制作文檔可以節(jié)省大量時間,因為它不必從零開始編程建立地圖及其符號體系。一旦文檔被裝載到ArcGIS控件中,如果隨后需要改變其外觀,就可以通過對象模型編程訪問任何圖層、元素和符號。F表總結了可以被裝載到各個ArcGIS控件中的文檔類型地圖文檔(*.mxd,*.mxt)圖層文件Scene文檔(*.sx(1,*sxt)Globe文檔(*.3dd,*.sdt)不允許裝載到定制應用程序中(只能裝載到ArcReader應用
26、程序允許裝載到定制應用程序中允許裝載到定制應用程序中且其內(nèi)容的訪問不受限制MapControl是.C否仃占是PageLayoutControl是*是否1-1是SceneControl“是1.11GlabControl*是是-1ReaderControl否否1否是是ArcReaderControl否否否是是2.1MapControl和PageLayoutControl控件MapControl和PageLayoutControl對應于ArcMap桌面應用程序的“數(shù)據(jù)”和“布局”視圖。MapControl封裝了Map對象,而PageLayoutControl封裝了PageLayout對象。用ArcM
27、ap創(chuàng)作的地圖文檔可以裝載到MapControl和PageLayoutControl中,以節(jié)省開發(fā)人員編程創(chuàng)作地圖的時間。MapControl和PageLayoutControl不僅可以讀取地圖文檔,它們還可以寫入地圖文檔(*mxd)。這兩個控件都實現(xiàn)了IMxContents接口,使地圖文檔(MapDocument)對象可以將MapControl和PageLayoutContro啲內(nèi)容寫到一個新的地圖文檔中。MapControl上存在諸如TrackRectangle、TrackPolygon、住(rubberTrackLine和TrackCircle等幫助方法,用于追蹤或“橡皮banding)
28、”顯示上的幾何圖形(Shape)。VisibleRegion屬性可用于更改MapControl顯示區(qū)內(nèi)的幾何圖形。PageLayoutControl上存在諸如FindElementByName和LocateFrontElement等幫助方法,以幫助開發(fā)人員管理元素,而Printer和PrinterPageCount屬性與PrintPageLayout方法則共同完成打印任務。2.2GlobeControl和SceneControl控件GlobeControl和SceneControl對應于ArcGlobe和ArcScene桌面應用程序的三維視圖。GlobeControl封裝了GlobeViewe
29、r對象,而SceneControl封裝了SceneViewer對象。用ArcGlobe和ArcScene應用程序創(chuàng)作的Globe和Scene文檔可以分別裝載到GlobeControl和SceneControl中,以節(jié)省開發(fā)人員編程創(chuàng)作這兩種地圖的時間。GlobeControl和SceneControl都具有內(nèi)置的導航功能,允許終端用戶移動三維視圖和可視化三維數(shù)據(jù),而不必使用控件命令或自定義命令。要使用內(nèi)置的導航工具,必須通過屬性頁或者編程設置Navigate屬性。終端用戶可以用鼠標左鍵對顯示進行前后左右的移動,使用鼠標右鍵放大和縮小顯示。2.3ReaderControl控件ReaderCont
30、rol對應于ArcReader桌面應用程序的“數(shù)據(jù)”和“布局”視圖及其內(nèi)容表(TOC)。ReaderControl還包含ArcReader桌面應用程序使用的內(nèi)部窗口和工具,如Find窗口和Identfy工具等。用ArcMap桌面應用程序創(chuàng)作并用ArcGISPublisher擴展模塊發(fā)布的發(fā)布地圖文件(PMF)如果在發(fā)布時設置為允許裝載到定制的ArcReader應用程序中,則可以裝載到ReaderControl中。ReaderControl中有一個簡單的自包含對象模型,提供ArcReader桌面應用程序的所有功能而不需要訪問ArcObjects。這樣,用ReaderControl開發(fā)應用程序就不
31、需要有任何使用ArcObjects開發(fā)程序的經(jīng)驗。但是,如果發(fā)布地圖文件在發(fā)布時設置為不受限制地訪問其內(nèi)容,開發(fā)人員就可以訪問底層的ArcObjects,并以與MapControl和PageLayoutControl相似的方式使用ReaderControl進行開發(fā)。但ArcReaderControl并不能通過ArcGISEngine獲得,在這里提出來是因為該控件與ReaderControl很相似;ArcReaderControl也有與ReaderControl相同的簡單自包含對象模型。但是,ArcReaderControl不能用作“伙伴控件”以便與TOCControl或ToolbarContr
32、ol協(xié)同工作,而且開發(fā)人員也不能訪問其底層的ArcObjects。使用ArcReaderControl進行開發(fā)需要ArcGISPublisher擴展模塊,而且ArcReaderControl可以部署到有ArcReader桌面應用程序的任何機器上。2.4TOCControl與ToolbarControl控件TOCControlTOCControl要與一個“伙伴控件”協(xié)同工作?!盎锇榭丶笨梢允荕apControl、PageLayoutControl、ReaderControl、SceneControl或GlobeControl?!盎锇榭丶笨梢栽谠O計時通過TOCControl屬性頁設置(在支持屬
33、性頁功能的開發(fā)環(huán)境中可以這樣做)或在駐留TOCControl的容器被顯示時用SetBuddyControl方法通過編程設置。TOCControl的每個“伙伴控件”都實現(xiàn)了ITOCBuddy接口。TOCControl用“伙伴控件”來顯示其地圖、圖層和符號體系內(nèi)容的一個交互樹視圖并保持其內(nèi)容與“伙伴控件”同步。例如,如果TOCControl的“伙伴控件”是一個MapControl,而且從該MapControl中刪除了一個圖層,則該圖層也會從TOCControl中刪除。同樣地,如果終端用戶與TOCControl交互并取消了某個圖層的Visibility復選框,則該圖層在MapControl中不再可見
34、。ToolbarControlToolbarControl要與一個“伙伴控件”協(xié)同工作?!盎锇榭丶笨梢允且粋€MapControl、PageLayoutControl、ReaderControl、SceneControl或GlobeControl。“伙伴控件”可以在設計時通過ToolbarControl屬性頁設置(在支持屬性頁功能的開發(fā)環(huán)境中可以這樣做)或在駐留ToolbarControl的容器被顯示時用SetBuddyControl方法通過編程設置。ToolbarControl可以駐留操作其“伙伴控件”顯示的命令、工具和菜單。ToolbarControl的每個“伙伴控件”都實現(xiàn)了IToolb
35、arBuddy接口。這個接口用于設置“伙伴控件”的CurrentTool屬性。例如,設想駐留了一個“頁面放大”工具并有一個PageLayoutControl作為其“伙伴控件”的ToolbarControl。當終端用戶單擊該ToolbarControl上的“頁面放大”工具時,該“頁面放大”工具就會成為PageLayoutControl的CurrentTool?!绊撁娣糯蟆惫ぞ叩膶崿F(xiàn)會查詢ToolbarControl以訪問其“伙伴控件”(PageLayoutControl)并取回該PageLayoutControl。然后該PageLayoutControl提供實現(xiàn)顯示終端用戶拉動鼠標所畫的框并改變
36、布局的范圍。2.5應用實例第三章幾何對象和空間坐標3.1Geometry對象Geometry是ArcGISEngine中使用最為廣泛的對象集之一,用戶在創(chuàng)建、刪除、編輯和進行地理分析的時候,就是處理一個包含幾何形體的矢量對象;除了顯示要素意外,控件對象選擇,要素符號化,標注要素,編輯要素都需要Geometry參與。下圖是Geometry的主要幾何對象模型圖,接下來將一一介紹這些幾何對象。3.1.2Point和MultiPoint幾何對象Point幾何對象Point:是一個0維的幾何圖形,具有X,Y坐標值,以及一些可選的屬性:如高程值(Z值),度量值(M值)和ID號,點對象用于描述精確定位的對象
37、,例如一個電話亭在一個城市的精確位置以下代碼演示如何創(chuàng)建一個Point對象:IPointpPoint=newPoinpPoint.X=100;pPoint.=100;MultiPoint幾何對象MultiPoint:點集對象是一系列無序的點的群集,這些點具有相同的屬性信息。例如可以用一個點集來表示整個城市天然氣調(diào)壓站如下圖所示:一個Multipoint對象由6個Point對象組成。.PointIMultipointwith1sixpoints以下代碼片段演示如何構建Multipoint對象:/定義第一個點IPointpPoint1二newPointClass。;pPointlX=100;pPo
38、intl.Y=100;定義第二個點IPointpPoint2=newPointClass。;pPoint2X=200;pPoint2.Y=200;構建其他點IPointCollectionpMultipoint二newMultipointClass。;objecto二Type.Missing;/添加第一個點,不需要設置點的順序,參數(shù)設置為TypeMissingpMultipoint.AddPoint(pPoint1,refo,refo);/添加第二個點,不需要設置點的順序,參數(shù)設置為Type.MissingpMultipoint.AddPoint(pPoint2,refo,refo);/添加其
39、他點3.1.3Segment幾何對象Segment有起點,終點和參數(shù)定義三個方面定義。它有四個子類分別是屮Path是連續(xù)的Segment的集合,除了路徑的第一個Segment和最后一個Segment外其余的Segment的起始點都是前一個Segment的終止點,即Path對象的中的Segment不能出現(xiàn)分離,Path可以是任意數(shù)的Line,CircularArc,EllipticArc和BezierCurve的組合。一個或多個Path組成一個Polyline對象。Ring幾何對象Ring是一個封閉的Path即起始和終止點有相同的坐標值。它有內(nèi)部和外部屬性。一個或多個Ring對象組成一個Poly
40、gon對象。3.15Polyline和Polygon幾何對象Polyline幾何對象Polyline對象是由一個或多個相連或者不相連的path對象的有序集合,它可以是單個Path對象組成,也可以是多個相連的Path對象組成,或者是多個分離的Path組成,如下圖所示。Polyline通常用來代表線狀地物如道路,河流,管線等等。只有一個Path組成的Polyline多個相連的Path組成的Polyline丿多個分離的陽th組戰(zhàn)的Polyline一個Polyline對象必須滿足以下準則:組成Polyline對象的所有Path對象必須是有效的。組成Polyline對象的所有Path對象不能重合,相交或
41、自相交。組成Polyline對象的多個Path對象可以連接與某一點,也可以分離。Path對象的長度不能為0。IPolyline是Polyline類的主要接口,IPolyline的Reshape方法可以使用一個Path對象為一個Polyline對象整形,IPolyline的SimplifyNetwork方法用于簡化網(wǎng)絡。Polyline對象可以使用IGeometryCollection接口添加Path對象的方法來創(chuàng)建,使用該接口需注意以下情況:每一個Path對象必須是有效的,或使用IPath:Simplify方法后有效。A由于Polyline是Path對象的有序集合,所以添加Path對象時必須注
42、意順序和方向。為了保證Polyline是有效的,可以創(chuàng)建完Polyline對象后使用ITopologicalOperator接口的Simplify方法。以下代碼片段為使用IGeometryCollection接口創(chuàng)建一個Polyline對象:/定義第一個點IPointpPoint1二newPointClass。;pPoint1X=100;pPoint1Y=100;定義第二個點IPointpPoint2=newPointClass。;pPoint2X=200;pPoint2.Y=200;/創(chuàng)建一個Line對象ILinepLine=newLineClass();設置Line對象的起始終止點pLin
43、e.PutCoords(pPoint1,pPoint2);/QI到ISegmentISegmentpSegment二pLineasISegment;/創(chuàng)建一個Path對象SegmentCollectionpPath二newPathClassO;objecto二Type.Missing;通過ISegmentCollectior接口為Path對象添加Segment對象pPath.AddSegment(pSegment,refo,refo);/創(chuàng)建一個Polyline對象IGeometryCollectionpPolyline=newPolylineClassO;通過IGeometryCollect
44、ior為Polyline對象添加Path對象pPolyline.AddGeometry(pPatlasIGeometry,refo,refo);Polylgon幾何對象Polylgon對象是由一個或多個Ring對象的有序集合,它可以是由單個Ring對象構成,也可以使用多個Ring組成如下圖所示。其中Ring可以分為OuterRing(外環(huán))和InnerRing(內(nèi)環(huán))之分。外環(huán)和內(nèi)環(huán)都是有方向的,它們的區(qū)別是外環(huán)的方向是順時針的,內(nèi)環(huán)的方向是逆時針。Polygon通常用來代表有面積的多邊形矢量對象,如行政區(qū),建筑物等。一個外環(huán)Polygons口環(huán)RingiIJ-丁匚I內(nèi)環(huán)個內(nèi)環(huán)以下代碼片段演示
45、如何構建一個Polygon:/創(chuàng)建一個Ring對象,通過ISegmentCollectior接口向其中添加Segment對象ISegmentCollectionpSegCollection二newRingClassO;objecto二Type.Missing;pSegCollection.AddSegment(pSegment1,refo,refo);pSegCollection.AddSegment(pSegment2,refo,refo);/QI到IRing接口封閉Ring對象,使其有效IRingpRing=pSegCollectionasIRing;pRing.Close。;使用Ring
46、對象構建Polygon對象IGeometryCollectiorpGeometryColl二newPolygonClass();pGeometryColl.AddGeometry(pRing,refo,refo);3.16Envelope幾何對象Envelope是所有幾何對象的外接矩形,用于表示幾何對象的最小邊框,所有的幾何對象都有一個Envelope對象,lEnvelope是Envelope對象的主要接口,通過它可以獲取幾何對象的XMax,XMin,YMax,YMin,Height,Width屬性。通過lEnvelope的Expand方法還可以按比例縮放Envelope對象的范圍,如下圖所示
47、:UpperLeftLowarLeftYMaxUpp&rRljghtEnvelopeExpa門占uw??s放Y縮故3.17Curve對象幾何對象除去Point,MultiPoint和Envelope外,其他所有的幾何體都可以看做是Curve(曲線)。Line,Polyline,Polygon,CircularArc,BezierCurve,EllipticArc和CircularArc都是曲線的一種,它們都實現(xiàn)了ICurve接口。ICurve接口的Length屬性用于返回一個Curve對象的長度。ICurve接口的FromPoint和ToPoint屬性可以獲得Curve對象的起止點。ICurve
48、接口的Reverseorientation方法可以改變一個Curve對象的節(jié)點次序即調(diào)動Curve對象的起始點和終止點互相調(diào)換。ICurve接口的IsClosed屬性則可以判斷一個Curve對象起始點和終止點是否在一個位置上。ICurve接口的GetSubcurve方法可以復制一條Curve對象的特定部分,例如一條10千米公路的Curve對象,獲取2-5千米處的公路的曲線代碼片段如下所示:/QI到ICurve接口ICurvepCurve=pPolylineasICurve;創(chuàng)建一個Polyline對象ICurvepNewCurve=newPolylineClassO;boolbtrue=tru
49、e;獲取-5千米間的曲線對象pCurve.GetSubcurve(2,5,btrue,outpNewCurve);此外ICurve的QueryTangent和QueryNormal方法分別用于獲取Curve對象上某一點的曲線的切線和法線。3.18Geometry集合接口通過前邊對于具體的Geometry對象的介紹可知,除了Point對象之外,其他幾何對象都是通過其他幾何對象集合構建而成。如MultiPoint對象是點的集合,Path對象是Segment對象的集合,Polyline對象是Path對象的集合,Polygon對象是Ring對象的集合,Multipatch對象是TriangleStri
50、p和TrangleFan,Trangle,Ring對象的集合。ArcGISEngine提供了三個主要的幾何圖形集合接口用于對幾何對象的操作,分別是IPointCollection,ISegmentCollection和IGeometryCollection,這些接口揭示出ArcGISEngine的幾何模型的實質(zhì)一一它們是一種組合構成的模式,這種組合并不一定按照嚴格的層次結構組織。在前面介紹一些幾何對象的時候,也給大家演示了部分使用功能,這三個接口在程序開發(fā)中經(jīng)常使用到,接下來簡單闡述以下這三個接口的使用方法。IGeometryCollection接口IGeometryCollection接口被
51、Polygon,Polyline,Multipoint,Multipatch,Trangle,TrangleStrip,TrangleFan和GeometryBag所實現(xiàn)。IGeometryCollection接口提供的方法可以讓開發(fā)者對一個幾何對象的組成元素即子對象進行添加,改變和移除。例如:組成Polyline對象的子對象是Path對象。組成Polygon對象的子對象是Ring對象。組成Multipoint對象的子對象是Point對象。組成MultiPatch對象的子對象是TrangleFanTrangleStrip,Triangle或Ring對象。組成GeometryBag對象的是任何類
52、型的幾何體對象,實際上GeometryBag是一個可以容納任何類型幾何對象的容器。IGeometryCollection的Geometry屬性可以通過一個索引值返回一個組成該幾何對象的某個子對象,而GeometryCount返回組成該幾何對象的子對象的數(shù)目。IGeometry的AddGeometry和AddGeometries方法都用于向一個幾何對象添加子對象,它們的區(qū)別是前者一次只能添加一個幾何對象,而后者可以一次添加一個幾何對象數(shù)組。除此之外,AddGeometry方法可以將子對象添加到幾何的指定索引值的位置,而AddGeometries方法將子對象數(shù)組添加到集合的最后。在使用AddGeo
53、metry方法添加子對象到Polygon對象的過程中,如果子對象即Ring出現(xiàn)覆蓋現(xiàn)象,那么多邊形就沒有封閉或出現(xiàn)了包含關系,那么這個Polygon就不是簡單Polygon,因此通過IGometryCollection來創(chuàng)建一個Polygon時,需要使用ITopologicalOperator的Simplify方法保證其有效性。ISegmentCollection接口ISegmentCollection接口被Path,Ring,Polyline和Polygon四個類所實現(xiàn),它們被稱作是Segment集合對象,使用這個接口可以處理組成Segment集合對象中的每一個子Segment對象。使用IS
54、egmentCollection接口可以為一個Segment集合對象添加,插入,刪除Segment子對象。ISegmentCollection接口SetCircle和SetRectangle方法提供了一種簡單不需要添加Segment的情況下構建一個完成的Path,Ring,Polyline和Polygon的方法。IPointCollection接口IPointCollection可以被多個幾何對象類所實現(xiàn),這些對象都是由多個點構成如:Mullipoint,Path,Ring,Polyline,Polygon,TriangleFan,TrangleStrip,Trangle,Multipatch等,它們都可以稱作PointCollection對象,通過IPointCollection接口定義的方法可以獲取,添加,插入,查詢,移除幾何對象中的某個頂點。同以上兩個接口一樣它也定義了操作一個點集合對象的方法,例如通過AddPoint方法可以向PointCollection對象
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 食材存儲倉庫管理制度(3篇)
- 小麥訂購活動策劃方案(3篇)
- 超市618活動策劃方案(3篇)
- 廣西糧油出入庫管理制度(3篇)
- 2025陜西延能天元智能裝備有限公司招聘(10人)參考考試題庫及答案解析
- 2026山東事業(yè)單位統(tǒng)考淄博文昌湖省級旅游度假區(qū)面向大學生退役士兵專項崗位公開招聘工作人員(1人)筆試備考試題及答案解析
- 2026貴州遵義市務川縣檔案館見習生招聘考試參考題庫及答案解析
- 2026湖北武漢市江岸區(qū)公立幼兒園招聘幼師2人參考考試題庫及答案解析
- 2026青海海西州格爾木市省級公益性崗位及勞動保障協(xié)理員招聘24人考試備考題庫及答案解析
- 江西省國有資本運營控股集團有限公司2026年第一批批次公開招聘備考考試題庫及答案解析
- 當代中國社會分層
- 呆滯存貨處理流程
- GB/T 16895.6-2014低壓電氣裝置第5-52部分:電氣設備的選擇和安裝布線系統(tǒng)
- GB/T 11018.1-2008絲包銅繞組線第1部分:絲包單線
- GB 31633-2014食品安全國家標準食品添加劑氫氣
- 麻風病防治知識課件整理
- 手術室物品清點護理質(zhì)量控制考核標準
- 消防工程監(jiān)理實施細則
- 權利的游戲雙語劇本-第Ⅰ季
- 衛(wèi)生部《臭氧消毒技術規(guī)范》
- 早期復極綜合征的再認識
評論
0/150
提交評論