畢業(yè)論文:基于arc engine的智能交通系統(tǒng)_第1頁
已閱讀1頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  本科生畢業(yè)論文(設計)</p><p>  題 目:基于Arc Engine的智能交通系統(tǒng)</p><p>  專業(yè)代碼: 070703 </p><p>  作者姓名: 劉興 </p><p>  學 號: 2

2、007201956 </p><p>  單 位: 環(huán)境與規(guī)劃學院 </p><p>  指導教師: 肖燕 </p><p>  2011年5月31日</p><p><b>  原創(chuàng)性聲明</b></p><

3、p>  本人鄭重聲明:所提交的學位論文是本人在導師指導下,獨立進行研究取得的成果。除文中已經(jīng)注明引用的內(nèi)容外,論文中不含其他人已經(jīng)發(fā)表或撰寫過的研究成果,也不包含為獲得聊城大學或其他教育機構的學位證書而使用過的材料。對本文的研究作出重要貢獻的個人和集體,均已在文中以明確方式標明。本人承擔本聲明的相應責任。</p><p>  學位論文作者簽名:      日期     </p><p&

4、gt;  指 導 教 師 簽 名:     日期      </p><p><b>  目錄</b></p><p><b>  1前言1</b></p><p>  2 相關概念和技術1</p><p>  2.1智能交通系統(tǒng)簡介1</p><p>  2.2網(wǎng)絡分

5、析簡介2</p><p>  2.3組件對象模型(COM)3</p><p>  2.4組件式GIS3</p><p>  2.5 C#簡介4</p><p>  2.6關于ArcGIS Engine5</p><p><b>  3 系統(tǒng)構建5</b></p><

6、p>  3.1 系統(tǒng)分析5</p><p>  3.1.1需求分析5</p><p>  3.1.2可行性分析6</p><p>  3.2 系統(tǒng)設計6</p><p>  3.2.1系統(tǒng)設計目標6</p><p>  3.2.2系統(tǒng)結構設計6</p><p>  3.2.3系

7、統(tǒng)功能設計7</p><p>  3.2.4基礎數(shù)據(jù)庫設計8</p><p>  3.3 系統(tǒng)實現(xiàn)9</p><p>  3.3.1用戶主界面的實現(xiàn)9</p><p>  3.3.2地圖基本操作功能的實現(xiàn)10</p><p>  3.3.3查詢功能的實現(xiàn)10</p><p>  3.

8、3.4網(wǎng)絡分析功能的實現(xiàn)19</p><p><b>  4結束語24</b></p><p><b>  參考文獻25</b></p><p><b>  致謝26</b></p><p><b>  摘要</b></p><

9、p>  以推進交通智能化建設為目標,研究了智能交通系統(tǒng)的設計與實現(xiàn)。該系統(tǒng)以VS.Net為開發(fā)平臺,選用ArcGIS Engine-組件式GIS作為地理信息系統(tǒng)軟件,采用Visual C#編程語言作為開發(fā)設計工具,實現(xiàn)了高效便捷的對交通信息的查詢、分析和管理。本文著重介紹了系統(tǒng)功能設計和功能實現(xiàn)的過程。</p><p>  關鍵詞:ArcGIS Engine;智能交通系統(tǒng);組件式GIS;網(wǎng)絡分析;Geoda

10、tabase</p><p><b>  Abstract</b></p><p>  In order to improve the traffic intelligence, the design and implementation of ITS was studied. This system selects VS.Net as development pla

11、tform, ArcGIS Engine-ComponentGIS as the GIS software, Visual C# as develop tool, and it can effectively and conveniently. This paper focuses on the process of system function design and implementation.</p><p&

12、gt;  Key words:ArcGIS Engine;ITS;ComGIS;Network Analysis;Geodatabase</p><p>  基于Arc Engine的智能交通系統(tǒng)</p><p><b>  1前言</b></p><p>  作為智能交通系統(tǒng)基礎的城市交通控制系統(tǒng)的開發(fā)研究在我國已有20多年的歷史,這20多年

13、來該系統(tǒng)已經(jīng)經(jīng)歷了三個階段:第一個階段始于1973年的北京前三門交通監(jiān)控系統(tǒng),一直到1984年。這個階段依靠自己的技術和國產(chǎn)設備,以電視監(jiān)視與線控為起點逐步向面控系統(tǒng)發(fā)展,其結果是我國城市中主要交叉路口實現(xiàn)了點控制,一些街道實現(xiàn)了線控制;第二階段從1984年開始,北京、上海分別引進國外的面控系統(tǒng),直到公安部在南京組織系統(tǒng)國產(chǎn)化,并完成面控系統(tǒng)的“七五”攻關。在這十年間,我國十幾個大城市中,或者是引進國外系統(tǒng),或者是采用了國產(chǎn)的面控系統(tǒng);

14、第三階段從1993年開始,我國一些城市實施了現(xiàn)代化綜合交通管制系統(tǒng)。這種系統(tǒng)不僅包括交通信號控制和電視監(jiān)視系統(tǒng),而且還包括了除交通信號控制和電視監(jiān)視以外的警車定位系統(tǒng)、地理交通信息系統(tǒng)和交通事故、車輛與駕駛員檔案等綜合靜態(tài)信息系統(tǒng)等。這種現(xiàn)代化綜合交通管制系統(tǒng)實際上就是智能交通系統(tǒng)的基礎。</p><p>  近幾年在一些省市還實現(xiàn)了不停車自動收費系統(tǒng)和IC卡機動車駕駛員交通違章罰款管理系統(tǒng)。實際上這些基本上屬于

15、智能交通系統(tǒng)的一部分。</p><p>  隨著經(jīng)濟的快速發(fā)展,我國對智能交通系統(tǒng)的研究和應用將會越來越快,特別是隨著我國“五縱七橫”國道主干網(wǎng)即將建成,到2015年全面建成以高速公路為主體的公路運輸主骨架。我國即將掀起智能交通系統(tǒng)建設的熱潮,智能交通系統(tǒng)將給我們的生活帶來極大的變化。</p><p><b>  2 相關概念和技術</b></p>&l

16、t;p>  2.1智能交通系統(tǒng)簡介</p><p>  智能交通系統(tǒng)是一個基于現(xiàn)代電子信息技術面向交通的服務系統(tǒng)。突出特點是以信息的收集、處理、發(fā)布、交換、分析、利用為主線,為交通參與者提供多樣性服務。智能交通系統(tǒng)是信息技術和其他電子技術在交通運輸安全和效率管理中的應用平臺,它包括:互聯(lián)網(wǎng)技術、現(xiàn)代通訊和網(wǎng)絡技術、信息技術、地理信息系統(tǒng)技術和全球定位技術、電子數(shù)據(jù)交換技術、車輛和場站裝備、管理技術等。近十年

17、來,全球范圍內(nèi)信息化進程的加快,先進技術不斷創(chuàng)新,使用信息技術的成本也日趨下降。交通運輸系統(tǒng)通過網(wǎng)絡信息技術為使用者提供最有效的信息服務,實現(xiàn)了各種資源共享,從而節(jié)省了投資和運營成本。因此,智能交通系統(tǒng)的實施建設為交通運輸、物流、車輛制造、信息等產(chǎn)業(yè)提供更多的商業(yè)機會。</p><p><b>  2.2網(wǎng)絡分析簡介</b></p><p>  網(wǎng)絡分析是對地理網(wǎng)絡(

18、如交通網(wǎng)絡)、城市基礎設施網(wǎng)絡(如各種網(wǎng)線、電纜線、電力線、電話線、供水線、排水管道等)進行地理分析和模型化過程,通過研究網(wǎng)絡的狀態(tài)以及模擬和分析資源在網(wǎng)絡上的流動和分配情況,實現(xiàn)對網(wǎng)絡結構及其資源等的優(yōu)化問題。網(wǎng)絡分析的理論基礎是圖論和運籌學,它從運籌學的角度來研究、統(tǒng)籌、策劃一類具有網(wǎng)絡拓撲性質(zhì)的工程,安排各個要素的運行使其能充分發(fā)揮作用或達到所預想的目標。網(wǎng)絡分析是基于幾何網(wǎng)絡的特征和屬性,利用距離、權重個規(guī)劃條件進行分析得到結果

19、并且應用在實際中,主要包括路徑分析、地址匹配、和資源分配三個方面。</p><p><b>  (1)路徑分析</b></p><p>  1)最佳路徑分析:分為靜態(tài)和動態(tài)兩種。靜態(tài)方法指給定每條弧段的屬性后,求最佳路徑;動態(tài)方法是指實際網(wǎng)絡分析中權值是隨著權值關系式變化的,而且可能會臨時出現(xiàn)一些障礙點,需要動態(tài)的計算最佳路徑。</p><p>

20、;  2)N條最佳路徑分析:確定起點、終點,求代價較小的N條路徑,因為在實踐中由于種種因素需要選擇近似最佳路徑。</p><p>  3)最短路徑:確定起點、終點和所要求經(jīng)過的中間點、中間連線,求最短路徑或最小成本路徑。</p><p><b>  (2)地址匹配</b></p><p>  地址匹配實質(zhì)是對地理位置的查詢,它涉及到地址編碼。地

21、址匹配與其他網(wǎng)絡分析功能結合在一起,可以滿足實際工作中非常復雜的分析要求。需要輸入的數(shù)據(jù)包括地址表和含地址范圍的街道網(wǎng)絡以及待查詢地址的屬性值。</p><p><b>  (3)資源分配</b></p><p>  資源分配網(wǎng)絡模型由中心點(分配中心)及其狀態(tài)屬性和網(wǎng)絡組成。分配有兩種方式:一種是由中心向四周輸出;另一種是由四周向中心集中。這種分配功能可以解決資源的

22、有效流動和合理分配問題。例如,為網(wǎng)絡中的每一連接尋找最近的中心,以實現(xiàn)最佳服務。</p><p>  2.3組件對象模型(COM)</p><p>  組件對象模型(Component Object Model,COM)用以建立軟件模塊之間的通訊,為軟件部件之間進行連接和通訊提供了有效機制。在基于組件對象模型的軟件開發(fā)中,應用程序和其他程序之間通過接口進行通訊,接口應滿足COM的二進制標準

23、,以實現(xiàn)對多個接口的支持[1]。COM不僅僅提供了組件之間的接口標準,還引入了面向?qū)ο蟮乃枷?。組件模塊為COM對象提供了活動的空間,COM對象以接口的方式提供服務,使用者可以直接調(diào)用執(zhí)行模塊來獲得COM對象所提供的服務和功能,此接口被稱為COM接口。如圖1所示。</p><p>  圖1 COM組件、COM對象、COM接口</p><p>  Fig.1 COM components,C

24、OM object,COM interface</p><p><b>  2.4組件式GIS</b></p><p>  (1)概念與形成:簡單地說,ComGIS就是采用了面向?qū)ο蠹夹g和組件式軟件的GIS系統(tǒng)(包括基礎平臺和應用系統(tǒng))[4]。COM GIS的基本思想是把GIS的各大功能模塊劃分為幾個組件,每個組件完成不同的功能,各個GIS組件之間,以及GIS組件與其

25、他非GIS組件之間,都可以方便地通過可視化的軟件開發(fā)工具集成起來,形成最終的GIS基礎平臺以及應用系統(tǒng)[5]。目前,組件式GIS主要有兩種方式:一種是由可以實現(xiàn)制圖與一般GIS 功能的ActiveX控件集成構成的組件式GIS。這些控件既可以通過屬性、事件、方法等接口與應用程序進行交互,也可以在可視化開發(fā)環(huán)境中集成構成應用系統(tǒng)。另一種形勢的組件式GIS是基于Microsoft COM技術構建一系列COM組件集,用戶可以利用這些組件開發(fā)各種

26、GIS功能,并在此基礎上構建GIS 應用系統(tǒng)。這種開發(fā)模式更為底層,開發(fā)較為復雜,功能更為強大,以ESRI公司的ArcObject(簡稱AO)組件為典型。兩種開發(fā)形式的軟件都具有地圖控制、圖層顯示、數(shù)據(jù)查詢、地圖符號化、專題地圖等基本功能[6]。</p><p>  (2)與傳統(tǒng)GIS的對比:傳統(tǒng)GIS開發(fā)平臺均采用專門的設計開發(fā)語言,加上龐大的函數(shù)和命令庫進行開發(fā),這樣就面臨著開發(fā)難度大、投入高、周期長、可重復

27、性差的問題;而組件式GIS很好地解決了這些問題,使構建系統(tǒng)就像搭積木一樣便捷[7]。與傳統(tǒng)GIS相比,組件式GIS具有的特點:①高效無縫的系統(tǒng)集成,傳統(tǒng)的GIS軟件在系統(tǒng)集成上都存在缺陷,而組件式GIS不依賴與一種開發(fā)語言[8],可以嵌入通用的開發(fā)環(huán)境中實現(xiàn)GIS功能,專業(yè)模型可以在相同的開發(fā)環(huán)境來實現(xiàn),也可以插入其他的專業(yè)分析模型控件,這樣就可以實現(xiàn)高效、無縫的系統(tǒng)集成。②可擴展行強,復用性高,ComGIS不需專門的二次開發(fā)語言,只需

28、在當前可是劃編譯開發(fā)環(huán)境中,如Delphi、Visual C++、Visual Basic等,通過ActiveX控件標準開發(fā)接口來實現(xiàn)基本函數(shù)功能,二次開發(fā)簡單,且擴展性好。③大眾化,ComGIS與用戶和客戶程序之間主要通過屬性、方法和事件進行交互,用戶可以像使用其他ActiveX控件一樣使用組件式GIS控件,使非專業(yè)的普通用戶也能夠開發(fā)和集成GIS應用系統(tǒng),推動了GIS大眾化進程。④低成本,短周期,用戶根據(jù)</p>&l

29、t;p><b>  2.5 C#簡介</b></p><p>  C#(C Sharp)是微軟(Microsoft)為.Net Framework量身定做的程序語言C/C++的是第一個組件導向(Component-oriented)的程序語言,和C++與Java一樣亦為對象向?qū)?object-oriented)程序語言,它吸收了C++、Visual Basic、Delphi、Java等

30、語言的優(yōu)點,體現(xiàn)了當今最新的程序設計技術的功能和精華。C#繼承了C語言的語法風格,同時又繼承了C++的面向?qū)ο筇匦?。不同的是,C#的對象模型已經(jīng)面向Internet進行了重新設計,使用的是.Net框架的類庫;C#不在提供對指針類型的支持,使得程序不能隨便訪問內(nèi)存地址空間,從而更加健壯;C#不再支持多重繼承,避免了以往類層次結構中由于多重繼承帶來的可怕后果。.Net框架為C#提供了一個強大的、易用的、邏輯結構一致的程序設計環(huán)境。同時,公共

31、語言運行時為C#程序語言提供了一個托管的運行時環(huán)境,是程序比以往更加穩(wěn)定、安全。其特點有①語言簡潔②保留了C++的強大功能③快速應用開發(fā)功能④語言的自由性⑤強大的Web服務器控件⑥支持跨平臺⑦與XML相融合。</p><p>  2.6關于ArcGIS Engine</p><p>  (1)ArcGIS Engine簡介:作為嵌入式GIS,ArcGIS Engine能用在一個組織內(nèi)建立應

32、用,為用戶提供有針對性的GIS功能,進行GIS應用開發(fā)時可以脫離了ArcGIS桌面平臺。事實上,ArcGIS Engine是由一組核心ArcObject包組成,能在各種編程接口中運用[2]。</p><p>  (2)ArcGIS Engine開發(fā)方法:可以選擇不同的環(huán)境開發(fā)ArcGIS Engine應用程序,對.Net開發(fā)者來說有Microsoft Visual Studio或Delphi等,對Java開發(fā)者來

33、說有ECLIPSE,Sun ONE Studio等[3]。首先用集成開發(fā)環(huán)境注冊ArcGIS Engine開發(fā)組件,然后建立一個基本窗體的應用,添加ArcGIS Engine組件后選擇一種模式構建自己的應用。主要技術點:①窗體設計與圖層引入。在C#環(huán)境下加載MapControl、TOCControl、ToolbarControl空間和相關引用,并在窗口中加進控件,引入圖層是通過MapControl控件實現(xiàn),通過它們可以獲得組件庫提供的相

34、關接口,從而實現(xiàn)各種功能。②代碼控制。設置TOCControl、ToolbarControl和PageLayout控件連接,并實現(xiàn)功能,通過代碼控制,調(diào)用ArcGIS Engine開發(fā)包,執(zhí)行程序后可得到小型應用系統(tǒng)。</p><p><b>  3 系統(tǒng)構建</b></p><p><b>  3.1 系統(tǒng)分析</b></p>&

35、lt;p><b>  3.1.1需求分析</b></p><p>  隨著改革開放的不斷深入,我國國民經(jīng)濟持續(xù)穩(wěn)定增長,人們對交通的要求日益增高,雖然城市道路不斷的進行改、擴建工程,但仍是解決不了交通擁擠等問題。我國機動車和非機動車都為主要的交通工具,交通結構不合理,道路容量不足,交通控制管理設施不健全。行人自行車違章以及交通事故、亂停車等是導致交通擁擠、機動車車速不斷下降的直接原因。

36、交通事故的頻繁發(fā)生也使交通阻塞加劇,形成惡劣循環(huán)。這也是我國多數(shù)城市交通存在的普遍問題。智能交通系統(tǒng)的實現(xiàn),可以很好的解決上述問題。</p><p>  3.1.2可行性分析</p><p>  自從20世紀80年代以來,計算機技術、電子控制技術和通訊技術有了極大發(fā)展,利用這些新技術把車輛、道路、使用者和交通管理者緊密結合起來,從而形成一種及時、準確、高效的智能交通系統(tǒng)。</p>

37、;<p><b>  (1)經(jīng)濟可行性</b></p><p>  進行成本效益分析,評估項目的開發(fā)成本,估算開發(fā)成本是否會超過項目預期的全部利潤。通過分析,該系統(tǒng)效益顯著,資源可通過網(wǎng)絡搜索和書籍查閱等方法獲得,開發(fā)成本較低,經(jīng)濟可行。</p><p><b>  (2)技術可行性</b></p><p>

38、  根據(jù)系統(tǒng)的功能、性能及實現(xiàn)系統(tǒng)的各項約束條件以及系統(tǒng)目標來衡量所需的技術是否具備,估計利用現(xiàn)有技術條件完全可以達到該系統(tǒng)的功能目標。</p><p><b>  (3)法律可行性</b></p><p>  該系統(tǒng)只作為演示,該系統(tǒng)其他部分的研制和開發(fā),將不會侵犯他人、集體和國家的利益,不會違反國家法律法規(guī)。</p><p><b&g

39、t;  3.2 系統(tǒng)設計</b></p><p>  3.2.1系統(tǒng)設計目標</p><p>  本系統(tǒng)采用先進組件式開發(fā)方式,設計并實現(xiàn)了智能交通系統(tǒng)。以GIS的強大數(shù)據(jù)分析和管理功能作為支持,以用戶的選擇和要求為目標,真正實現(xiàn)基礎地理數(shù)據(jù)的共享,為交通管理部門的日常管理和各項決策服務。</p><p>  3.2.2系統(tǒng)結構設計</p>

40、<p>  通過用戶需求分析、可行性分析、總體設計和功能模塊設計,產(chǎn)生了本系統(tǒng)的總體結構框架,如圖2所示。</p><p>  圖2 系統(tǒng)結構設計圖</p><p>  Fig.2 System architecture design</p><p>  3.2.3系統(tǒng)功能設計</p><p>  整個系統(tǒng)在VS.Net平臺上開發(fā)

41、,在計算機環(huán)境下形象生動的顯示,本系統(tǒng)的功能可劃分為以下模塊,如圖3所示。</p><p>  圖3 系統(tǒng)功能設計圖</p><p>  Fig.3 Functional design</p><p>  圖中智能交通系統(tǒng)各個功能模塊分別可以實現(xiàn)以下功能:</p><p>  (1)圖形基本操作模塊:地圖數(shù)據(jù)顯示,是通過列表向用戶顯示組成當前

42、地圖的所有圖層信息,包括圖層名稱、可見性、控制地圖顯示比例;地圖操作功能,是指系統(tǒng)提供了放大、縮小、漫游、全景顯示、選擇等圖形基本操作功能;鷹眼即圖形的鳥瞰圖;測量功能,是指通過交互操作對地圖數(shù)據(jù)的周長、面積進行量算。</p><p>  (2)空間數(shù)據(jù)查詢:此模塊包括兩大部分:①簡單查詢,通過在地圖顯示窗口畫線、畫矩形、畫圓、畫多邊形查詢地圖屬性數(shù)據(jù),通過雙擊屬性數(shù)據(jù)列表可以快速定位到選擇要素;②高級查詢,包括

43、快速查詢、屬性查詢、空間查詢,快速查詢是一種簡單的屬性查詢,可以查詢某一圖層的一個屬性值定位要素;屬性查詢是指通過屬性查詢語句查找符合屬性條件的要素;空間查詢是指通過設置空間查詢條件來查找符合條件的要素。</p><p>  (3)空間數(shù)據(jù)網(wǎng)絡分析:此模塊有三種網(wǎng)絡分析方法:最短路徑分析、最鄰近設施分析和服務區(qū)分析。網(wǎng)絡分析是基于網(wǎng)絡數(shù)據(jù)的,通過設置站點、障礙點以及成本屬性等得到路徑或區(qū)域。</p>

44、<p>  (4)地圖輸出模塊:可以將地圖顯示窗口中當前顯示的地圖以.jpg格式輸出,隨時對分析得到的結果存儲。</p><p>  3.2.4基礎數(shù)據(jù)庫設計</p><p>  根據(jù)交通圖的特點,在ArcGIS的FileGeodatabase中建立數(shù)據(jù)庫并進行管理,其性能高于Personal Geodatabase[11],數(shù)據(jù)庫邏輯設計如圖4所示。</p>&

45、lt;p>  圖4 數(shù)據(jù)庫邏輯設計</p><p>  Fig.4 Database logical design</p><p><b>  3.3 系統(tǒng)實現(xiàn)</b></p><p>  系統(tǒng)實現(xiàn)的主要任務就是將功能設計產(chǎn)生的每一模塊用程序予以實現(xiàn),并檢驗程序的正確性。本系統(tǒng)的開發(fā)主要是根據(jù)在系統(tǒng)設計階段劃分出的各個功能模塊,采用結構化

46、程序設計方法進行代碼的編寫工作。在開發(fā)語言的選擇上,本系統(tǒng)采用Visual C#作為開發(fā)語言。</p><p>  3.3.1用戶主界面的實現(xiàn)</p><p>  用戶界面是保證系統(tǒng)正常運行的一個重要因素。系統(tǒng)界面是人機交互的接口,包括用戶如何向系統(tǒng)提出請求以及系統(tǒng)如何向用戶反饋信息。一個設計良好的用戶界面使得用戶更容易掌握系統(tǒng),從而增加對系統(tǒng)的接受程度。本智能交通系統(tǒng)界面設計遵循以下原則

47、:</p><p>  (1)采用面向用戶的思想,使用中文菜單,操作簡便并易于使用,并能充分體現(xiàn)功能的直觀性和方便性。</p><p>  (2)采用基于Arc Engine的MapControl Application風格的用戶界面,使用窗口、菜單、圖標、對話框等圖形符號操作系統(tǒng)來完成系統(tǒng)應用,實現(xiàn)系統(tǒng)與用戶的交互性。</p><p>  (3)菜單、窗口、工具、

48、按鈕、等保持一致,便于用戶的交互性。</p><p>  本智能交通系統(tǒng)主界面包括六個部分:菜單欄、工具欄、狀態(tài)欄、圖層控制窗口、地圖顯示窗口和鷹眼窗口。如圖5所示。</p><p><b>  圖5 系統(tǒng)界面布局</b></p><p>  Fig.5 System interface layout</p><p> 

49、 3.3.2地圖基本操作功能的實現(xiàn)</p><p>  (1)地圖數(shù)據(jù)的加載和顯示</p><p>  通過Arc Engine組件封裝的方法實現(xiàn),只需設置控件之間的關聯(lián)。</p><p>  (2)地圖操作功能實現(xiàn)</p><p>  通過調(diào)用Arc Engine集成方法實現(xiàn),包括放大、縮小、漫游等,部分代碼如下所示。</p>

50、<p>  #region 放大功能</p><p>  private void ZoomInButton_Click(object sender, EventArgs e)</p><p><b>  {</b></p><p>  ICommand pCommand;</p><p>  pComman

51、d = new ESRI.ArcGIS.Controls.ControlsMapZoomInToolClass();</p><p>  pCommand.OnCreate(MainaxMapControl.Object);</p><p>  MainaxMapControl.CurrentTool = pCommand as ITool; </p><p>&l

52、t;b>  }</b></p><p>  #endregion</p><p>  3.3.3查詢功能的實現(xiàn)</p><p>  (1)簡單查詢功能實現(xiàn)</p><p>  實現(xiàn)該功能用到的主要接口有ISpatialFilter、IQueryFilter、IFeatureLayer、IFeature、IFeatureCur

53、sor,通過IFeatureCursor獲取滿足ISpatialFilter、IQueryFilter設置的空間過濾對象和查詢條件的IFeature集來對空間數(shù)據(jù)進行查詢和檢索并通過dataGridView控件加載查詢結果,簡單查詢運行結果如圖6、圖7所示。部分代碼如下所示。</p><p>  /// <summary></p><p>  /// 獲取查詢要素</p&

54、gt;<p>  /// </summary></p><p>  /// <param name="pFeatureLayer">要素圖層</param></p><p>  /// <param name="pGeometry">圖形范圍參數(shù)</param></p&g

55、t;<p>  /// <returns>符合條件要素集合</returns></p><p>  private List<IFeature> GetSearchFeartures(IFeatureLayer pFeatureLayer, IGeometry pGeometry)</p><p><b>  {</b>

56、;</p><p><b>  try</b></p><p><b>  {</b></p><p>  List<IFeature> pList = new List<IFeature>();</p><p>  //創(chuàng)建SpatialFilter空間過濾對象</p

57、><p>  ISpatialFilter pSpatialFilter = new SpatialFilterClass();</p><p>  IQueryFilter pQueryFilter = pSpatialFilter as ISpatialFilter;</p><p>  //設置過濾器的Geometry</p><p>  

58、pSpatialFilter.Geometry = pGeometry;</p><p>  pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;</p><p>  //獲取FeatureCursor游標</p><p>  IFeatureCursor pFeatureC

59、ursor = pFeatureLayer.Search(pQueryFilter, false);</p><p>  //遍歷FeatureCursor</p><p>  IFeature pFeature = pFeatureCursor.NextFeature();</p><p>  while (pFeature != null)</p>

60、<p><b>  {</b></p><p>  IMap pMap = this.MainMap.Map;</p><p>  pMap.SelectFeature(pFeatureLayer, pFeature)</p><p><b>  //獲取要素對象</b></p><p>

61、;  pList.Add(pFeature);</p><p>  pFeature = pFeatureCursor.NextFeature();</p><p><b>  }</b></p><p>  this.MainMap.Refresh();</p><p>  System.Runtime.Interop

62、Services.Marshal.ReleaseComObject(pFeatureCursor);</p><p>  return pList;</p><p><b>  }</b></p><p>  catch (Exception Err)</p><p><b>  {</b><

63、/p><p>  MessageBox.Show(Err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);</p><p>  return null;</p><p><b>  }</b></p><p><b&g

64、t;  }</b></p><p>  #region 設置主Mapcontrol的MouseDown事件</p><p>  private void MainMap_OnMouseDown(object sender, AxESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e)</p><p

65、><b>  {</b></p><p>  #region 查詢</p><p>  if (MainMap.CurrentTool != null)</p><p><b>  {</b></p><p>  bSearch = false;</p><p><

66、;b>  }</b></p><p>  if (bSearch)</p><p><b>  {</b></p><p>  this.comboBox1.Visible = false;</p><p>  SetMousePoint();</p><p>  //獲取畫定范

67、圍的Geometry</p><p>  IGeometry pGeometry = null;</p><p>  switch (Model)</p><p><b>  {</b></p><p><b>  case 1:</b></p><p>  pGeometr

68、y = this.MainMap.TrackCircle();</p><p><b>  break;</b></p><p><b>  case 2:</b></p><p>  pGeometry = this.MainMap.TrackPolygon();</p><p><b>

69、;  break;</b></p><p><b>  case 3:</b></p><p>  pGeometry = this.MainMap.TrackRectangle();</p><p><b>  break;</b></p><p><b>  case 4:

70、</b></p><p>  pGeometry = this.MainMap.TrackLine();</p><p><b>  break;</b></p><p><b>  default:</b></p><p><b>  return;</b><

71、;/p><p><b>  }</b></p><p><b>  {</b></p><p>  IFeatureLayer pFeatureLayer = this.MainMap.get_Layer(this.comboBox1.SelectedIndex) as IFeatureLayer;</p>&l

72、t;p>  //執(zhí)行查詢獲取符合條件的要素</p><p>  List<IFeature> pList = this.GetSearchFeartures(pFeatureLayer, pGeometry);</p><p>  Attribute pAttribute = new Attribute(this.comboBox1.SelectedIndex, this

73、);</p><p>  //設置信息顯示窗體中DataGridView的屬性</p><p>  //設置行數(shù)Plist.Count+1包括字段名那一行即表頭</p><p>  pAttribute.dataGridView1.RowCount = pList.Count + 1;</p><p><b>  //設置邊界風格&

74、lt;/b></p><p>  pAttribute.dataGridView1.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Sunken;</p><p><b>  //設置列數(shù)</b></p><p>  pAttribute.dataGridView1.Col

75、umnCount = pList[0].Fields.FieldCount;</p><p>  //遍歷第一個要素的字段用于給列頭賦值(字段的名稱)</p><p>  for (int m = 0; m < pList[0].Fields.FieldCount; m++)</p><p><b>  {</b></p>

76、<p>  pAttribute.dataGridView1.Columns[m].HeaderText = pList[0].Fields.get_Field(m).AliasName;</p><p><b>  }</b></p><p><b>  //遍歷要素</b></p><p>  for (in

77、t i = 0; i < pList.Count; i++)</p><p><b>  {</b></p><p>  IFeature pFeature = pList[i];</p><p>  for (int j = 0; j < pFeature.Fields.FieldCount; j++)</p>&l

78、t;p><b>  {</b></p><p><b>  //填充字段值</b></p><p>  pAttribute.dataGridView1[j, i].Value = pFeature.get_Value(j).ToString();</p><p><b>  }</b><

79、/p><p><b>  }</b></p><p>  pAttribute.Show();</p><p>  this.MainMap.MousePointer = esriControlsMousePointer.esriPointerDefault;</p><p><b>  }</b>&l

80、t;/p><p><b>  }</b></p><p>  bSearch = false;</p><p>  #endregion</p><p><b>  }</b></p><p>  #endregion</p><p><b> 

81、 圖6 圓形查詢</b></p><p>  Fig.6 Circular query</p><p>  圖7 屬性信息顯示窗口</p><p>  Fig.7 Attribute information display window</p><p>  (2)屬性查詢功能的實現(xiàn)</p><p>  實現(xiàn)

82、該功能用到的主要接口有:IQueryFilter、IFeatureLayer、IFeature 、IFeatureSelection、IEnumFeature、IEnvelope,通過IEnumFeature獲取滿足IFeatureSelection查詢條件的IFeature集來對空間數(shù)據(jù)進行查詢和檢索并通過IEnvelope獲取IFeature集的幾何中心進行定位,屬性查詢運行結果如圖8、圖9所示。部分代碼如下所示。</p>

83、;<p>  #region 執(zhí)行屬性查詢</p><p>  private void PerformAttributeSelect()</p><p><b>  {</b></p><p><b>  try</b></p><p><b>  {</b>&

84、lt;/p><p>  IQueryFilter pQueryFilter = new QueryFilterClass();</p><p>  IFeatureLayer pFeatureLayer;</p><p>  pQueryFilter.WhereClause = textBoxWhereClause.Text;</p><p> 

85、 pFeatureLayer = GetLayerByName(comboBoxLayers.SelectedItem.ToString()) as IFeatureLayer;</p><p>  pFeatureSelection = pFeatureLayer as IFeatureSelection;</p><p>  int iSelectedFeaturesCount = p

86、FeatureSelection.SelectionSet.Count;</p><p>  pFeatureSelection.SelectFeatures(pQueryFilter, selectmethod, false);//執(zhí)行查詢</p><p>  //如果本次查詢后,查詢的結果數(shù)目沒有改變,則認為本次查詢沒有產(chǎn)生新的結果</p><p>  if (

87、pFeatureSelection.SelectionSet.Count == iSelectedFeaturesCount || pFeatureSelection.SelectionSet.Count == 0)</p><p><b>  {</b></p><p>  MessageBox.Show("沒有符合本次查詢條件的結果!");&l

88、t;/p><p><b>  return;</b></p><p><b>  }</b></p><p>  //如果復選框被選中,則定位到選擇結果</p><p>  if (checkBoxZoomtoSelected.Checked == true)</p><p>&

89、lt;b>  {</b></p><p>  IEnumFeature pEnumFeature = MainAxMapControl.Map.FeatureSelection as IEnumFeature;</p><p>  IFeature pFeature = pEnumFeature.Next();</p><p>  IEnvelop

90、e pEnvelope = new EnvelopeClass();</p><p>  while (pFeature != null)</p><p><b>  {</b></p><p>  pEnvelope.Union(pFeature.Extent);</p><p>  pFeature = pEnumF

91、eature.Next();</p><p><b>  }</b></p><p>  MainAxMapControl.ActiveView.Extent = pEnvelope;</p><p>  MainAxMapControl.ActiveView.Refresh();</p><p><b>  

92、}</b></p><p>  else MainAxMapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null);</p><p><b>  }</b></p><p>  catch (Exception ex)

93、</p><p><b>  {</b></p><p>  MessageBox.Show("您的查詢語句可能有誤,請檢查 | " + ex.Message);</p><p><b>  return;</b></p><p><b>  }</b>&l

94、t;/p><p><b>  }</b></p><p>  #endregion</p><p>  圖8 屬性信息查詢窗口</p><p>  Fig.8 Attribute information query window</p><p>  圖9 屬性信息查詢結果</p><

95、;p>  Fig.9 Attribute information query result</p><p>  (3)空間查詢功能的實現(xiàn)</p><p>  實現(xiàn)該功能用到的主要接口有IFeatureLayer、IFeatureSelection、ISpatialFilter、IEnumFeature、IEnvelope,通過IFeatureSelection的SelectFeatu

96、res方法獲取IFeature集并通過IEnvelope進行定位,空間查詢運行結果如圖10、圖11所示。部分代碼如下所示。</p><p>  #region 執(zhí)行空間查詢</p><p>  private void PerformLocationQuery(ISpatialFilter pSpatialFilter)</p><p><b>  {&l

97、t;/b></p><p><b>  try</b></p><p><b>  {</b></p><p>  string strLayerName;</p><p>  IFeatureLayer pFeatureLayer;</p><p>  IFeatur

98、eSelection pFeatureSelection;//用來記錄查詢的結果</p><p>  foreach (object itemChecked in checkedListBoxFeaturesLayer1.CheckedItems) //對于每一個選中的層都執(zhí)行查詢,結果合并</p><p><b>  {</b></p><

99、p>  strLayerName = itemChecked.ToString(); //待查詢的layer</p><p>  pFeatureLayer = GetLayerbyName(strLayerName) as IFeatureLayer;</p><p>  pFeatureSelection = pFeatureLayer as IFeatureSelecti

100、on;</p><p>  pFeatureSelection.SelectFeatures(pSpatialFilter, esriSelectionResultEnum.esriSelectionResultAdd, false);//待選的層可能不止一個通過循環(huán)依次查詢每個層,把結果add起來</p><p><b>  }</b></p><

101、;p>  //把結果顯示出來 MainAxMapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null);</p><p><b>  }</b></p><p>  catch (Exception ex)</p&g

102、t;<p><b>  {</b></p><p>  MessageBox.Show("生成查詢結果出錯!請檢查 | " + ex.Message);</p><p><b>  return;</b></p><p><b>  }</b></p>

103、<p><b>  }</b></p><p>  #endregion</p><p>  圖10 空間查詢窗口</p><p>  Fig.10 Spatial query window </p><p>  圖11 空間查詢結果</p><p>  Fig.11 Spatial q

104、uery result</p><p>  3.3.4網(wǎng)絡分析功能的實現(xiàn)</p><p>  本系統(tǒng)實現(xiàn)了網(wǎng)絡分析中的最短路徑分析、最鄰近設施分析和服務區(qū)分析,此處以最短路徑分析為例說明網(wǎng)絡分析的具體實現(xiàn)過程。實現(xiàn)最短路徑分析用到的主要接口是INAContext,最短路徑分析實現(xiàn)的具體步驟如下:</p><p>  (1)打開工作空間和加載網(wǎng)絡分析數(shù)據(jù)集,是通過Op

105、enWorkspace函數(shù)和GetNetworkDataSet函數(shù)實現(xiàn);</p><p>  (2)創(chuàng)建網(wǎng)絡分析的上下文對象,網(wǎng)絡數(shù)據(jù)集打開后,可以根據(jù)網(wǎng)絡數(shù)據(jù)集對象創(chuàng)建INAContext網(wǎng)絡分析上下文對象和最短歷經(jīng)分析使用的分析決策對象INASolver;</p><p>  (3)裝載停留點并創(chuàng)建最短路徑圖層,從要素類中載入最短路徑所要經(jīng)歷的停留點,并將其映射到道路網(wǎng)絡拓撲中來創(chuàng)建最

106、短路徑圖層,查找最短歷經(jīng)所經(jīng)歷的點通過LoadNANetworkLocations函數(shù)實現(xiàn);</p><p>  (4)生成路徑,最短路徑的查找是通過Solver來實現(xiàn)。</p><p>  最短路徑分析的運行結果如圖12、圖13、圖14所示。部分代碼如下所示。</p><p>  /// <summary></p><p>  

107、/// 獲取網(wǎng)絡分析數(shù)據(jù)集</p><p>  /// </summary></p><p>  /// <param name="MapControl">主窗體的MapControl</param></p><p>  /// <returns>網(wǎng)絡分析數(shù)據(jù)集</returns><

108、;/p><p>  private INetworkDataset GetNetworkDataSet(AxMapControl MapControl)</p><p><b>  {</b></p><p>  INetworkDataset pNetworkDataset = null;//定義網(wǎng)絡數(shù)據(jù)集變量</p><p&

109、gt;  for (int clayer = 0; clayer < MapControl.LayerCount; clayer++)</p><p><b>  {</b></p><p>  ILayer player = MapControl.get_Layer(clayer);</p><p>  if (player is IN

110、etworkLayer)</p><p><b>  {</b></p><p>  INetworkLayer pNetworkLayer = player as INetworkLayer;</p><p>  pNetworkDataset = pNetworkLayer.NetworkDataset;</p><p&

111、gt;<b>  break;</b></p><p><b>  }</b></p><p>  if (player is IGroupLayer)//IGroupLayer圖層組</p><p><b>  {</b></p><p>  ICompositeLayer

112、pCompositeLayer = player as ICompositeLayer;//新建一個圖層集合</p><p>  for (int cContainlayer = 0; cContainlayer < pCompositeLayer.Count; cContainlayer++)</p><p><b>  {</b></p>&l

113、t;p>  if (pCompositeLayer.get_Layer(cContainlayer) is INetworkLayer)</p><p><b>  {</b></p><p>  INetworkLayer pNetworkLayer = pCompositeLayer.get_Layer(cContainlayer) as INetworkL

114、ayer;</p><p>  pNetworkDataset = pNetworkLayer.NetworkDataset;</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p>

115、<p><b>  }</b></p><p><b>  }</b></p><p>  return pNetworkDataset;</p><p><b>  }</b></p><p>  /// <summary></p>&l

116、t;p>  /// 創(chuàng)建網(wǎng)絡分析上下文</p><p>  /// </summary></p><p>  /// <param name="pNetworkDataset">網(wǎng)絡分析數(shù)據(jù)集</param></p><p>  /// <returns></returns><

117、;/p><p>  public INAContext Create_RouteSolverContext(INetworkDataset pNetworkDataset)</p><p><b>  {</b></p><p>  IDatasetComponent pDatasetComponent;</p><p> 

118、 pDatasetComponent = pNetworkDataset as IDatasetComponent;</p><p>  //得到創(chuàng)建網(wǎng)絡分析上下文所需的IDENetworkDataset類型參數(shù) </p><p>  IDENetworkDataset pDENetworkDataset;</p><p>  pDENetworkDataset =

119、 pDatasetComponent.DataElement as IDENetworkDataset;</p><p>  INASolver pNASolver;</p><p>  INAContextEdit pNAContextEdit;</p><p>  pNASolver = new NARouteSolverClass();</p>

120、<p>  pNAContextEdit = pNASolver.CreateContext(pDENetworkDataset, pNASolver.Name) as INAContextEdit;</p><p>  pNAContextEdit.Bind(pNetworkDataset, new GPMessagesClass());</p><p>  return pN

121、AContextEdit as INAContext;</p><p><b>  }</b></p><p>  /// <summary></p><p>  /// 加載網(wǎng)絡分析數(shù)據(jù)</p><p>  /// </summary></p><p>  /// <

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論