• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于ArcGIS Engine的GIS軟件開發(fā)方法

      2010-09-28 01:19:08吳建華
      測繪通報 2010年11期
      關(guān)鍵詞:類庫控件組件

      吳建華

      (江西師范大學地理與環(huán)境學院,江西南昌330022)

      基于ArcGIS Engine的GIS軟件開發(fā)方法

      吳建華

      (江西師范大學地理與環(huán)境學院,江西南昌330022)

      介紹ArcGIS Engine體系結(jié)構(gòu)、類與接口的應用方法,以及ArcGIS Engine界面開發(fā)框架與功能定制方法,最后闡述利用ArcGIS Engine組件開發(fā)GIS軟件的基本過程與方法,并給出地圖瀏覽與查詢系統(tǒng)開發(fā)實例。希望對相關(guān)GIS系統(tǒng)的開發(fā)者具有較好的指導和借鑒作用。

      GIS;ArcGIS Engine;組件技術(shù);軟件開發(fā)

      一、引 言

      由于GIS可以同時提供表征地理位置的圖形信息和空間對象的屬性信息,以及其獨有的空間分析功能,目前已被廣泛應用于測繪、遙感、國土、國防、資源、環(huán)境、交通、水利、電力、地質(zhì)、農(nóng)業(yè)、林業(yè)、城市規(guī)劃與管理、生活信息服務等領(lǐng)域。GIS已經(jīng)成為一項服務于信息化建設(shè)、生產(chǎn)、生活、科研的技術(shù)工具,如何快速、低成本地開發(fā)出滿足應用需求的GIS系統(tǒng)已經(jīng)引起GIS軟件開發(fā)商、公司、企業(yè)及科研院所的關(guān)注。目前許多專業(yè)的GIS軟件開發(fā)商都推出了自己的二次開發(fā)產(chǎn)品,如Esri公司先后推出了MapObject、ArcObjects和ArcGIS Engine;MapInfo公司推出了MapX;國內(nèi)的SuperMap、MapGIS及GeoStar也都具備二次開發(fā)的功能。在二次開發(fā)平臺選型中沒有最好的,只有最合適的,各類產(chǎn)品都有自己的優(yōu)勢與劣勢。但當前主流的二次開發(fā)產(chǎn)品還屬于全球GIS行業(yè)的領(lǐng)頭羊Esri公司的ArcGIS Engine產(chǎn)品,它具有簡潔、靈活、易用、可移植性強、開發(fā)成本低等優(yōu)點,受到了GIS人員的喜愛。但由于ArcGIS Engine開發(fā)方式多樣、類庫龐大、接口眾多等原因,使得開發(fā)者很難在短期內(nèi)掌握好,最終導致開發(fā)出的系統(tǒng)結(jié)構(gòu)不合理、性能差、界面不美觀等。為此,本文基于以往多個GIS項目的開發(fā)經(jīng)驗以及對ArcGIS Engine的深入研究,由淺入深地介紹了利用ArcGIS Engine開發(fā)GIS軟件的方法。希望給GIS同行們帶來有益的借鑒作用。

      二、ArcGIS Engine概述

      ArcGIS Engine是美國Esri公司發(fā)布的一款GIS二次開發(fā)產(chǎn)品,它是目前GIS業(yè)界最為著名的組件式GIS開發(fā)產(chǎn)品。它是對ArcGIS Desktop開發(fā)包ArcObjects組件集中的大部分接口、類、庫進行封裝后構(gòu)成的獨立的嵌入式組件,不依賴ArcGIS Desktop桌面平臺。它由兩部分組成:面向開發(fā)人員的開發(fā)工具包ArcGIS engine developer kit和面向最終用戶的運行時環(huán)境ArcGIS engine runtime[1]。ArcGIS Engine可以在不同開發(fā)語言環(huán)境(COM、.NET、Java、C++)下開發(fā),它提供了一系列可以在ArcGIS Desktop框架之外使用的GIS組件和可視化控件,它包含20多個類庫,比如Geometry、Display、Geodatabase、System、Carto等,用戶通過引用各個類庫中的接口并配合控件的使用,可以方便地實現(xiàn)GIS功能,這使得開發(fā)者能夠?qū)⒕械浇鉀Q應用程序中的業(yè)務邏輯中,而不是從頭開始開發(fā)GIS功能。開發(fā)人員可以將定制的GIS功能嵌入到已有的應用軟件中或創(chuàng)建自定義應用軟件[2]。

      三、ArcGIS Engine組件應用方法

      1.類庫體系結(jié)構(gòu)

      ArcGIS Engine從功能層次上劃分為以下五個部分:①基礎(chǔ)服務:由GIS核心ArcObjects構(gòu)成,幾乎所有GIS應用程序都需要;②數(shù)據(jù)存取:對矢量和柵格數(shù)據(jù)進行存取;③ 地圖表達:實現(xiàn)地圖的標注、符號化及專題圖的渲染;④地圖分析:提供空間建模與分析功能;⑤ 開發(fā)者組件:用于開發(fā)應用程序的界面控件,如制圖控件、3D控件、工具條、TOC等。

      針對不同方面的功能,ArcGIS Engine提供了相應的組件類庫,類庫體系結(jié)構(gòu)如圖1所示。

      圖1 類庫體系結(jié)構(gòu)

      圖1中,System類庫是ArcGIS最底層的組件庫,該類庫包含為構(gòu)成ArcGIS的其他類庫提供服務的組件;SystemUI庫包含用戶界面組件接口定義,這些用戶界面組件可以在ArcGIS Engine中進行擴展,比如ICommand和ITool;Geometry類庫包含了核心幾何對象,如點、線、多邊形等,并且定義和實現(xiàn)坐標系統(tǒng)的空間參考對象;Display類庫包含了支持向輸出設(shè)備繪制符號的組件;Server類庫包含允許用戶連接并操作ArcGIS Server的對象;Output類庫用于創(chuàng)建圖形輸出到諸如打印機和繪圖儀等設(shè)備,或以文件的方式導出,如導出為柵格圖像格式(JPG、BMP等)。Geodatabase類庫為地理數(shù)據(jù)庫提供了編程API,支持多種類型對象(如Feature、tables、networks、TINs)的數(shù)據(jù)訪問;GISClient類庫包含了操作ArcIMS或ArcGIS Server提供的遠程GIS服務的對象;DataSourcesOleDB類庫提供了操作基于OleDB的數(shù)據(jù)源的工作空間;DataSourcesFile類庫包含用于基于文件數(shù)據(jù)源的GeoDatabase API實現(xiàn)。這些基于文件的數(shù)據(jù)源包括 shapefile、coverage、TIN、CAD、SDC、StreetMap和VPF;DataSourcesGDB庫包含了存儲在關(guān)系數(shù)據(jù)庫管理系統(tǒng)中基于地理數(shù)據(jù)庫模型的矢量和柵格數(shù)據(jù)格式的工作空間工廠和工作空間;DataSourcesRaster庫包含了適用于基于文件的柵格數(shù)據(jù)格式的工作空間工廠和工作空間; GeoDatabaseDistributed庫包含了支持分布式地理數(shù)據(jù)庫的檢出/檢入操作所必需,的對象。Carto類庫包含了用于顯示數(shù)據(jù)的對象,如PageLayout和Map對象,以及map layers和renders可作用于所有支持的數(shù)據(jù)類型。Location類庫包含了與位置數(shù)據(jù)操作相關(guān)的對象,位置數(shù)據(jù)可以是路徑事件或地理編碼位置;NetworkAnalysis類庫支持效用網(wǎng)絡(luò)的創(chuàng)建和分析;GeoAnalyst類庫包含了核心空間分析的操作,這些操作可以通過空間分析和三維分析擴展模塊; 3DAnalyst類庫用于數(shù)據(jù)的三維分析并支持三維數(shù)據(jù)的顯示;GlobeCore類庫包含用于進行球體數(shù)據(jù)分析以及支持球體數(shù)據(jù)顯示的對象;SpatialAnalyst類庫包含了在柵格數(shù)據(jù)和矢量數(shù)據(jù)上執(zhí)行空間分析的對象。Controls類庫包含用于應用開發(fā)的各類控件,如MapControl和PageLayoutControl等,也可以通過創(chuàng)建自定義的操作控件的命令和工具來擴展Controls類庫;ArcReader Control類庫支持ArcReader對象模型,用于創(chuàng)建自定義的基于ArcReader的應用。

      2.類與接口的使用

      在總體了解ArcGIS Engine的類庫體系結(jié)構(gòu)后,需要進一步認識類庫中的類與接口并掌握它們的使用方法。類庫可以簡單理解為實現(xiàn)各種功能的類的集合,類的主要作用是定義與實現(xiàn)功能,解決怎么去做的問題,類有三種不同的類型(如圖2所示):①抽象類(AbstractClass):這種類不能被實例化,即不能用new關(guān)鍵字去產(chǎn)生對象,抽象類的成員一般都是部分實現(xiàn)或者根本不實現(xiàn);②組件類(CoClass):這種類可以通過new關(guān)鍵字直接實例化對象;③普通類(Class):不能直接使用new關(guān)鍵字創(chuàng)建對象,但它可以作為其他類的一個屬性或者從其他類的對象實例化來創(chuàng)建,比如:ArcGIS Engine中普通類Work-Space不能用new創(chuàng)建,但可以通過IDataset對象的Workspace屬性來創(chuàng)建,或通過IWorkspaceFactory對象的OpenFromFile方法實例化一個對象來創(chuàng)建。

      圖2 對象模型圖

      上述三種類之間的關(guān)系有四種(如圖2所示):①繼承(inheritance):圖中的空心三角箭頭表示繼承關(guān)系;② 組成(composition):圖中的菱形表示組成關(guān)系;③關(guān)聯(lián)(association):圖中的線表示關(guān)聯(lián)關(guān)系;④實例化(instantiation):圖中的虛線箭頭表示實例化關(guān)系。

      接口定義了一個對象能做什么,它實現(xiàn)了一組功能的屬性、方法及事件。ArcGIS Engine中,一個接口由一個或多個類來實現(xiàn),而一個類可以實現(xiàn)一個或多個接口。接口的命名都以“I”字母開頭,容易識別,比如IMap。同屬于一個類的接口,通過查詢接口(QueryInterface)可以實現(xiàn)不同接口之間的切換[3],即實現(xiàn)一個接口對另一個接口定義的屬性和方法的調(diào)用,比如IMap與IActiveView同屬于Map類,IMap接口通過查詢接口就可獲得IActiveView接口中定義方法。在工程開發(fā)中,接口使用的基本過程如下:首先在工程中引用相應的類庫,然后在程序函數(shù)或過程定義接口變量并實例化,最后調(diào)用接口的屬性、方法或觸發(fā)接口中的事件,從而實現(xiàn)程序設(shè)計中定義的功能。

      四、界面開發(fā)框架與功能定制

      1.界面開發(fā)框架

      在了解了類庫、類及接口之后,就可以著手搭建GIS軟件的主界面了。通常按照C/S結(jié)構(gòu)開發(fā)的GIS系統(tǒng)主界面應包括圖3所示的七個部分,其中,工具欄、地圖數(shù)據(jù)目錄顯示區(qū)、地圖顯示與操作區(qū)為主要部分,工具欄可由ToolbarControl控件實現(xiàn),地圖數(shù)據(jù)目錄顯示區(qū)可由TOCControl控件實現(xiàn),地圖顯示與操作區(qū)通常由MapControl、PageLayoutControl等地圖控件實現(xiàn)。在主窗體界面上添加各類控件后,還要實現(xiàn)ToolbarControl和TOCControl與地圖控件的綁定,通過設(shè)置 ToolbarControl和TOCControl的Buddy屬性即可。通過控件之間的綁定,確定了ToolbarControl中的命令與工具操作的對象是地圖控件中的地圖數(shù)據(jù),而地圖數(shù)據(jù)目錄顯示區(qū)的內(nèi)容也會隨著地圖控件中的數(shù)據(jù)變化而變化。鷹眼導航圖顯示區(qū)根據(jù)用戶需求決定取舍,它也是通過MapControl控件實現(xiàn)的,其主要作用是將地圖顯示與操作區(qū)的地圖快速導航到用戶感興趣的區(qū)域。

      圖3 界面開發(fā)框架

      2.GIS功能定制方法

      在搭建好系統(tǒng)界面后,就需要進一步實現(xiàn)工具條按鈕或菜單按鈕的功能了。從是否與地圖交互的角度,將功能分為兩類:①命令功能:即鼠標不需要在地圖顯示與操作區(qū)操作(鼠標單擊、移動、釋放等),就可以實現(xiàn)對地圖的訪問與操作;② 工具功能:需要與地圖交互才能實現(xiàn)對地圖的訪問與操作。以上兩種功能可分別通過ICommad和ITool的實現(xiàn)來創(chuàng)建,而通過集成多個命令或工具就可以形成工具條或菜單。為此下面著重介紹ICommad和ITool接口的實現(xiàn)方法,以及工具條和菜單的定制方法。

      (1)ICommand接口

      首先創(chuàng)建一個ActiveX DLL的工程,然后創(chuàng)建一個類并引用SystemUI類庫,最后在該類中實現(xiàn)ICommand接口:先在類的代碼區(qū)前面書寫“Implements ICommand”語句,然后在代碼區(qū)具體實現(xiàn)ICommand接口的屬性與方法。ICommand提供了Bitmap、Caption、Category、Checked、Enabled、Help-ContextID、HelpFile、Message、Name、Tooltip十個屬性和OnClick、OnCreate兩個方法。

      (2)ITool接口實現(xiàn)

      與ICommand接口類似,首先也要創(chuàng)建一個ActiveX DLL的工程,然后創(chuàng)建一個類并引用SystemUI類庫,最后在該類中實現(xiàn)ITool接口:先在類的代碼區(qū)前面書寫“Implements ITool”語句,然后在代碼區(qū)具體實現(xiàn)ITool接口的屬性與方法。ICommand提供了Cursor屬性和 Deactivate、OnContextMenu、OnD-blClick、OnKeyDown、OnKeyUp、OnMouseDown、On-MouseMove、OnMouseUp、Refresh九個方法。值得注意的是,要實現(xiàn)工具功能,需要在同一個類中同時實現(xiàn)ICommand和ITool。

      (3)IToolbarDef接口與IMenuDef接口

      IToobarDef接口用于集成命令和工具功能形成工具條。實現(xiàn) IToobarDef接口也需要在一個 ActiveX DLL的工程的新類中實現(xiàn),它提供了Caption、ItemCount、Name三個屬性和GetItemInfo方法。其中ItemCount表示工具條按鈕的個數(shù),GetItemInfo用于設(shè)置指定索引位置上按鈕的CLSID(實現(xiàn)命令或工具功能的類名稱)。IMenuDef使用類似IToobarDef,結(jié)合使用IToolbarMenu、IToolbarItem等接口可以創(chuàng)建工具條菜單、彈出式菜單、子菜單。最后利用Toolbar-Control控件的 AddToolbarDef、AddItem等方法把上述接口實現(xiàn)的功能集成在ToolbarControl控件上。

      五、基于ArcGIS Engine的GIS軟件開發(fā)方法

      1.系統(tǒng)開發(fā)基本過程與方法

      通過對上述ArcGIS Engine開發(fā)方法的深入研究,并結(jié)合筆者以往GIS軟件開發(fā)的經(jīng)驗,現(xiàn)將VB 6.0+ArcGIS Engine開發(fā)GIS軟件的基本過程與方法歸納如下:

      1)系統(tǒng)主界面設(shè)計。創(chuàng)建一個新的主工程,引用相關(guān)部件和類庫,根據(jù)需要在主窗體上添加地圖控件(MapControl或PageLayoutControl等)、框架控件(TocControl和ToolbarControl)及其他控件。通過屬性設(shè)置進行框架控件與地圖控件的綁定,當然也可以在程序中動態(tài)綁定。

      2)產(chǎn)品的許可認證。所有的應用必須在運行時初始化一個產(chǎn)品許可,可以通過提供的License控件設(shè)置完成,也可以利用esriSystem::AoInitialize初始化產(chǎn)品許可。

      3)GIS功能模塊實現(xiàn)。比如地圖瀏覽、空間查詢等分別在ActiveX DLL工程中實現(xiàn),模塊中的每一個小功能點通過類實現(xiàn)ICommand或ITool,然后將多個命令和工具集成實現(xiàn) IToolBarDef或IMenuDef接口。

      4)功能集成到工具條控件。在主工程中引用上一步中的ActiveX DLL工程,然后通過Toolbar-Control的AddToolbarDef方法建立IToolBarDef實現(xiàn)類的對象與ToolbarControl的關(guān)聯(lián),例如程序語句“tbQuery.AddToolbarDefpQueryToolBar”,其中,tbQuery是 ToolbarControl控件;pQueryToolBar是IToolBarDef實現(xiàn)類的對象。

      5)程序打包與發(fā)布。在開發(fā)完所有的功能后,就需要進行系統(tǒng)的打包發(fā)布,打包時需要配置好所需的數(shù)據(jù)和符號庫等,由于ArcGIS Engine Runtime是ArcGIS Engine應用程序的運行環(huán)境,所以需要和應用程序一起打包。

      2.GIS軟件開發(fā)實例

      本文在以上開發(fā)方法的指導下,基于VB 6.0+ ArcGIS Engine開發(fā)了一個小型的地圖瀏覽與查詢系統(tǒng)。該系統(tǒng)主要包括以下功能:① 地圖瀏覽:包括地圖放大、縮小、固定放大、固定縮小、平移、全屏顯示、地圖量算、地圖書簽;② 空間查詢:選擇空間對象查詢其屬性、一般條件查詢空間對象、綜合條件查詢空間對象;③ 圖層管理:包括顯示、關(guān)閉、移除所有圖層,顯示、關(guān)閉、移除當前圖層,當前圖層可選與不可選等功能;④地圖鷹眼。系統(tǒng)主界面如圖4所示。

      圖4 地圖瀏覽與查詢系統(tǒng)界面

      六、結(jié)束語

      由于ArcGIS Engine具有簡潔、靈活、易用、可移植性強、開發(fā)成本低等優(yōu)點,已成為當前GIS軟件二次開發(fā)的主流產(chǎn)品。但由于ArcGIS Engine開發(fā)方式多樣、類庫龐大、接口眾多且關(guān)系復雜,使得許多初學者無所適從,甚至一些有開發(fā)經(jīng)驗的程序員也對其中的概念比較懵懂,短期內(nèi)很難開發(fā)出優(yōu)秀的GIS產(chǎn)品。為此,本文從技術(shù)的角度,對ArcGIS Engine的關(guān)鍵與難點技術(shù)進行了闡述與分析,介紹了利用ArcGIS Engine開發(fā)GIS軟件的基本方法。期盼本文能引領(lǐng)GIS二次開發(fā)人員盡快進入基于ArcGIS Engine的GIS軟件開發(fā)領(lǐng)域,盡快開發(fā)出成果,以支持他們的科研或生產(chǎn)應用。

      [1] 朱政.通過ArcGIS Engine構(gòu)建GIS應用[R].北京:2004年第六屆 ArcGIS暨 ERDAS中國用戶大會,2004.

      [2] 楊海燕,周榮福,谷雙喜.基于ArcGIS Engine的GIS開發(fā)的系統(tǒng)設(shè)計與實現(xiàn)[J].國土資源信息化,2008(1):16-18.

      [3] 史永忠,曹全龍.基于ArcGIS Engine的三維地形可視化系統(tǒng)的研究與開發(fā)[J].現(xiàn)代測繪,2007,30(3):37-41.

      Development Methods of GIS Software Based on ArcGIS Engine

      WU Jianhua

      0494-0911(2010)11-0054-04

      P208

      B

      2009-11-10

      江西師范大學博士啟動基金(2644)

      吳建華(1981—),男,江西鄱陽人,博士,講師,主要從事GIS應用與開發(fā)、空間數(shù)據(jù)集成與更新研究工作。

      猜你喜歡
      類庫控件組件
      無人機智能巡檢在光伏電站組件診斷中的應用
      能源工程(2022年2期)2022-05-23 13:51:50
      新型碎邊剪刀盤組件
      重型機械(2020年2期)2020-07-24 08:16:16
      U盾外殼組件注塑模具設(shè)計
      用Java編寫客戶機/服務器端應用程序
      Python在數(shù)據(jù)可視化中的應用
      關(guān)于.net控件數(shù)組的探討
      軟件(2018年7期)2018-08-13 09:44:42
      數(shù)據(jù)結(jié)構(gòu)課程教學改革方案和應用效果
      軟件工程(2017年12期)2018-01-29 17:35:55
      數(shù)據(jù)結(jié)構(gòu)可視化類庫的設(shè)計與實現(xiàn)
      風起新一代光伏組件膜層:SSG納米自清潔膜層
      太陽能(2015年11期)2015-04-10 12:53:04
      就這樣玩會VBA中常見的自定義控件
      電腦迷(2012年24期)2012-04-29 00:44:03
      铁岭市| 轮台县| 灵宝市| 右玉县| 大足县| 额尔古纳市| 磴口县| 哈密市| 桐庐县| 岑溪市| 昌平区| 兴国县| 南川市| 龙州县| 建水县| 巨鹿县| 铁力市| 安图县| 民县| 大丰市| 宁波市| 南郑县| 石阡县| 赤壁市| 湘潭市| 红安县| 合肥市| 太仓市| 高碑店市| 奈曼旗| 皮山县| 蛟河市| 阜新| 雅江县| 日照市| 儋州市| 舟山市| 乐东| 博白县| 安庆市| 鄯善县|