版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 畢 業(yè) 設(shè) 計(jì) [論 文]</p><p> 題 目: 緩沖區(qū)分析與應(yīng)用 </p><p> 學(xué) 院: 測(cè)繪工學(xué)院 </p><p> 專 業(yè): 地理信息系統(tǒng)
2、 </p><p> 姓 名: </p><p> 學(xué) 號(hào): </p><p> 指導(dǎo)老師: </
3、p><p> 完成時(shí)間: 2013年5月25日 </p><p><b> 目 錄</b></p><p><b> 摘 要1</b></p><p><b> 第一章 緒 論3</b></p>
4、;<p> 1.1.緩沖區(qū)問(wèn)題的提出及意義3</p><p> 1.1.1緩沖區(qū)分析問(wèn)題的提出3</p><p> 1.1.2緩沖區(qū)分析問(wèn)題的意義4</p><p> 1.2 緩沖區(qū)分析實(shí)現(xiàn)的常用算法5</p><p> 1.2.1凸角圓弧法原理5</p><p> 1.2.2角分線
5、法原理6</p><p> 1.2.3柵格法原理7</p><p> 1.3論文的主要內(nèi)容7</p><p> 第二章 建立空間對(duì)象緩沖區(qū)方法8</p><p> 2.1 空間對(duì)象的數(shù)據(jù)表示8</p><p> 2.1.1 空間數(shù)據(jù)的柵格模型和矢量模型8</p><p>
6、 2.1.2 柵格數(shù)據(jù)——BMP 格式文件說(shuō)明8</p><p> 2.2 建立空間對(duì)象緩沖區(qū)的原理12</p><p> 2.2.1 空間對(duì)象緩沖區(qū)實(shí)現(xiàn)的矢量法原理12</p><p> 2.2.2 空間對(duì)象緩沖區(qū)實(shí)現(xiàn)的柵格法原理13</p><p> 2.3 基于矢量的空間對(duì)象緩沖區(qū)生成算法的引理和概念14</p&
7、gt;<p> 第三章 研究方法和技術(shù)路線20</p><p> 3.1 研究方法20</p><p> 3.2 技術(shù)路線21</p><p> 第四章 緩沖區(qū)分析的實(shí)現(xiàn)23</p><p> 4.1打開(kāi)工作空間23</p><p> 4.2.自定義緩沖區(qū)23</p>
8、<p> 4.3生成緩沖區(qū)28</p><p> 4.4緩沖區(qū)分析28</p><p> 4.5最終實(shí)現(xiàn)的功能32</p><p> 4.6基于矢量和柵格的緩沖區(qū)算法比較37</p><p><b> 第五章 總結(jié)39</b></p><p><b>
9、5.1 結(jié)論39</b></p><p> 5.2 問(wèn)題及展望39</p><p><b> 參考文獻(xiàn)38</b></p><p><b> 致謝41</b></p><p><b> 摘 要</b></p><p> 本
10、文對(duì)空間對(duì)象的緩沖區(qū)分析算法作了說(shuō)明,討論了分別利用圖形學(xué)方法和圖像處理的形態(tài)學(xué)方法建立地理信息系統(tǒng)中空間對(duì)象的緩沖區(qū)算法,并且就兩種算法的異同做出了分析。</p><p> 在矢量算法中,各類地理要素根據(jù)其空間形態(tài)特征分為點(diǎn)、線、面三類,分別以計(jì)算機(jī)屏幕數(shù)據(jù)的點(diǎn)、線、面圖形對(duì)象表示,進(jìn)行緩沖區(qū)分析。</p><p> 在柵格算法中,地理空間被劃分為規(guī)則的小單元(像元),空間位置由像元
11、的行、列號(hào)表示。以膨脹法原理為基礎(chǔ),進(jìn)行緩沖區(qū)分析。</p><p> 關(guān)鍵字:地理信息系統(tǒng),緩沖區(qū)分析,矢量法,柵格法,膨脹法</p><p><b> ABSTRACT</b></p><p> This paper illuminates the arithmetic of buffer analysis to spacial ob
12、ject. In this paper two arithmetic are discussed, one is based on the computer graphic technology , the other is based on Mathematical Morphology. Then, the similarities and differences of such two arithmetic are discuss
13、ed too.</p><p> In the vector arithmetic, spacial objects are divided into three</p><p> kinds, point、line、polygon, which are expressed by the graphic object on the computer screen. Buffer ana
14、lysis is based on such kind of data.</p><p> In the grid arithmetic, spacial objects are divided into grids.The spacial position is marked by the row and arrange of grids.This arithmetic is based on the exp
15、and method of Mathematical Morphology. </p><p> Keywords: Geographical information system(GIS),buffer analysis, vector method, grid method ,expand method.</p><p><b> 第一章 緒 論</b><
16、;/p><p> 1.1.緩沖區(qū)問(wèn)題的提出及意義</p><p> 1.1.1緩沖區(qū)分析問(wèn)題的提出</p><p> 地理信息系統(tǒng)(Geographic Information System簡(jiǎn)稱GIS)是一項(xiàng)以計(jì)算機(jī)為基礎(chǔ)的新興技術(shù),圍繞著這項(xiàng)技術(shù)的研究、開(kāi)發(fā)和應(yīng)用形成了一門交叉性、邊緣性的學(xué)科。從20世紀(jì)60年代出現(xiàn)至今,只有短短40多年的時(shí)間,但是他的發(fā)展非常
17、迅速,已經(jīng)成為多學(xué)科集成并應(yīng)用于多領(lǐng)域的基礎(chǔ)平臺(tái),成為地學(xué)空間信息處理的重要手段和工具。</p><p> 地理信息系統(tǒng)具有空間數(shù)據(jù)的輸入、存儲(chǔ)、管理、分析和輸出等功能,地理信息系統(tǒng)的主要目的是為了分析空間數(shù)據(jù),以提供空間決策支持信息,因此,空間分析是地理信息系統(tǒng)的主要功能,是核心,是靈魂。</p><p> 空間分析就是利用計(jì)算機(jī)對(duì)數(shù)字地圖進(jìn)行分析,從而獲取和傳輸空間信息。由于空間分
18、析對(duì)空間信息(特別是隱含信息)所具有的提取和傳輸功能,它已經(jīng)成為地理信息系統(tǒng)區(qū)別于一般信息系統(tǒng)的功能特征,也成為評(píng)價(jià)一個(gè)地理信息系統(tǒng)功能的主要指標(biāo)之一。</p><p> 緩沖區(qū)分析是地理信息系統(tǒng)最重要和最基本的空間操作功能之一。緩沖區(qū)分析是根據(jù)點(diǎn)、線、面實(shí)體基礎(chǔ),自動(dòng)建立其周圍一定寬度范圍內(nèi)的緩沖區(qū)多邊形實(shí)體,從而實(shí)現(xiàn)空間數(shù)據(jù)在其領(lǐng)域得以擴(kuò)展的信息分析方法。例如,公共設(shè)施(商場(chǎng)、郵局、銀行、醫(yī)院等)的服務(wù)半徑
19、,大型水庫(kù)建設(shè)引起的搬遷,都是一個(gè)鄰近度的問(wèn)題。城市的噪音污染源所影響的一定空間范圍、交通線兩側(cè)所劃定的綠化帶,既可分別描述為點(diǎn)的緩沖區(qū)與線的緩沖區(qū)帶。</p><p> 緩沖區(qū)分析的基本思想是給定一個(gè)空間物體(的集合),確定它(們)的某鄰域,鄰域的大小由鄰域半徑R決定。因此物體Oi的緩沖區(qū)的定義如下:</p><p> Bi ?{x : d (x, Oi ) ≤?R} </p&
20、gt;<p> 即對(duì)象Oi的半徑為R的緩沖區(qū)是全部距Oi的距離d小于等于R的點(diǎn)的集合,d一般是指最小歐氏距離。 對(duì)于多個(gè)對(duì)象的集合:</p><p> O ?{Oi :i ??1, 2, 3,...., n}</p><p> 其半徑為R的緩沖區(qū)是單個(gè)對(duì)象的緩沖區(qū)的并,即:</p><p><b> n</b></p
21、><p><b> B ??????B</b></p><p> 1.1.2緩沖區(qū)分析問(wèn)題的意義</p><p> 緩沖區(qū)信息處理在現(xiàn)實(shí)生活中有廣泛的應(yīng)用,可以從以下幾個(gè)方面看:</p><p> (1) 緩沖區(qū)分析在生態(tài)環(huán)境影響評(píng)價(jià)中的應(yīng)用</p><p> 在特定的時(shí)空環(huán)境里,生態(tài)環(huán)境問(wèn)
22、題的產(chǎn)生是由于自然、人為條件下各生態(tài)因子綜合作用的結(jié)果,這些生態(tài)因子在不同程度上都具有某種地理含義。地理信息系統(tǒng)是對(duì)具有地理含義的因子進(jìn)行統(tǒng)計(jì)、查詢、分析的有力工具。因此,利用地理信息系統(tǒng)的相關(guān)技術(shù)來(lái)分析、評(píng)價(jià)生態(tài)環(huán)境問(wèn)題的影響就顯得理所當(dāng)然。目前,在整個(gè)環(huán)境領(lǐng)域,地理信息系統(tǒng)的應(yīng)用得到了蓬勃的發(fā)展,空間數(shù)據(jù)的建立、屬性數(shù)據(jù)的逐步完善、空間數(shù)據(jù)與屬性數(shù)據(jù)的鏈接等為環(huán)境的評(píng)價(jià)、管理與規(guī)劃提供了一個(gè)簡(jiǎn)單、便捷、明晰的運(yùn)作平臺(tái).隨著生態(tài)環(huán)境問(wèn)
23、題的出現(xiàn)以及科技的進(jìn)步和人們生態(tài)環(huán)保意識(shí)的提高,越來(lái)越多的人投向生態(tài)環(huán)境的建設(shè)與整治中或盡量減少對(duì)自然生態(tài)環(huán)境的干擾.但人類對(duì)生態(tài)環(huán)境的主觀改造以及人類必須進(jìn)行生產(chǎn)活動(dòng)的效果與影響總是具有隱蔽性和動(dòng)態(tài)性的特點(diǎn),其影響范圍常常表現(xiàn)為一個(gè)趨勢(shì)面.如何有效、直觀地確定趨勢(shì)面亦即影響范圍的大小是生態(tài)環(huán)境影響評(píng)價(jià)面對(duì)的主要問(wèn)題,地理信息系統(tǒng)的空間分析功能之一的緩沖區(qū)分析正是對(duì)這一趨勢(shì)面加以分析的有力工具。例如,在環(huán)境治理時(shí),常在污染的河流周圍劃出
24、一定寬度的范圍表示受到污染的區(qū)域;又如在飛機(jī)場(chǎng),常根據(jù)健康需要在周圍劃出一定范圍的區(qū)域作為</p><p> ?。?)緩沖區(qū)分析在城市規(guī)劃中的應(yīng)用</p><p> 城市作為人口集中、規(guī)模龐大、結(jié)構(gòu)復(fù)雜、不斷發(fā)展的動(dòng)態(tài)系統(tǒng),它的發(fā)展變化不僅表現(xiàn)在人口的增加、經(jīng)濟(jì)的發(fā)展和功能的變化上,而且也表現(xiàn)在城市空間結(jié)構(gòu)的變化上。城市空間結(jié)構(gòu)的基本要素是核心、交通網(wǎng)絡(luò)、節(jié)點(diǎn)以及不同土地利用模式形成的面
25、狀區(qū)域。核心的作用無(wú)庸置疑,多數(shù)城市的生長(zhǎng)都是由核心開(kāi)始的。交通網(wǎng)絡(luò)則是城市生長(zhǎng)的骨架,這里的交通網(wǎng)絡(luò)不僅包含城市內(nèi)部的主干街道,而且包括城市對(duì)外交通干線,它往往形成城市的發(fā)展軸。節(jié)點(diǎn)可以是交通網(wǎng)絡(luò)中重要的交叉點(diǎn),也可以是重要的郊區(qū)小城鎮(zhèn)或衛(wèi)星城鎮(zhèn),它們是城市中人流物流能量流和信息流集聚和擴(kuò)散的源地。正是這些基本要素決定了整個(gè)城市的擴(kuò)展。緩沖區(qū)分析又可以稱為空間影響分析,是地理信息系統(tǒng)中定量研究距離因素影響的重要工具。因而進(jìn)行基于重點(diǎn)區(qū)
26、域和交通線的緩沖區(qū)分析,可以定量地描述城市用地?cái)U(kuò)展過(guò)程以及空間分布。</p><p> 例如:在土地評(píng)測(cè)中,要根據(jù)離開(kāi)交通線或繁華區(qū)的遠(yuǎn)近,進(jìn)行地價(jià)估算;特定場(chǎng)所的選址如大型超市、公園、療養(yǎng)院要依靠諸如“靠近交通線”、“沿河流或?yàn)l臨湖泊”、“包含林塊和綠地”等有關(guān)緩沖區(qū)操作。</p><p> ?。?)在地理數(shù)據(jù)結(jié)構(gòu)化自動(dòng)處理中的應(yīng)用</p><p> 地理信息
27、處理的實(shí)質(zhì)是綜合分析與評(píng)測(cè),借此賦以地理實(shí)體相應(yīng)重要性,為管理與規(guī)劃決策提供依據(jù)和為它們的多比例顯示奠定基礎(chǔ)。然后,地圖的地理信息的綜合評(píng)價(jià)必須在信息結(jié)構(gòu)化的基礎(chǔ)上進(jìn)行,對(duì)于簡(jiǎn)單的數(shù)字化面條數(shù)據(jù)是難以進(jìn)行有效的分析和處理的。例如,河網(wǎng)樹結(jié)構(gòu),地形線(山脊線與谷地線)的結(jié)構(gòu)化(樹結(jié)構(gòu)的自動(dòng)建立)都在遞歸地執(zhí)行緩沖區(qū)操作。邊防城鎮(zhèn)、沿海港口和地形等信息有其獨(dú)特的不言而喻的重要性,這些都是借助緩沖區(qū)操作而實(shí)現(xiàn)的。</p><
28、;p> 綜上所述,緩沖區(qū)分析在現(xiàn)實(shí)生活中有如此廣泛的應(yīng)用,所以,對(duì)緩沖區(qū)算法的研究非常的有必要。</p><p> 1.2 緩沖區(qū)分析實(shí)現(xiàn)的常用算法</p><p> 緩沖區(qū)生成矢量算法,特別是線緩沖區(qū)的生成算法,常見(jiàn)的有凸角圓弧法和角平分線法。凸角圓弧法是逐個(gè)求得每個(gè)線段單獨(dú)的緩沖區(qū),然后用多邊形疊質(zhì)算法依次合并。算法所生成的緩沖區(qū)邊界,軸線轉(zhuǎn)角尖銳的轉(zhuǎn)折點(diǎn)的平行線交點(diǎn)隨緩沖
29、距的增大將會(huì)迅速遠(yuǎn)離軸線,這就會(huì)出現(xiàn)尖角和凹陷的失真現(xiàn)象。角平分線法由畫逐個(gè)線段的簡(jiǎn)單平行線,尖角平滑矯正和自相交處理三步構(gòu)成。角平分線的缺點(diǎn)是難以最大限度的保證平行曲線的等寬性。</p><p> 1.2.1凸角圓弧法原理</p><p> 在軸線首末點(diǎn)處,作軸線的垂線并按雙線或緩沖區(qū)半寬E截出左右邊線的起迄點(diǎn);在軸線的其它各個(gè)轉(zhuǎn)折點(diǎn)上,首先判斷該點(diǎn)的凸凹特性,在凸側(cè)用圓弧彌合,而在
30、凹側(cè)用與該點(diǎn)所關(guān)聯(lián)的前后兩鄰邊距軸線的偏移量為E的兩平行線的交點(diǎn)來(lái)生成對(duì)應(yīng)頂點(diǎn)(如下圖)。由于在凸側(cè)用圓弧彌合,使凸側(cè)平行邊線與軸線等寬。而在凹側(cè),平行邊線相交在角分線上。</p><p> 圖1.1 凸角圓弧法</p><p> 1.2.2角分線法原理</p><p> 在軸線首末點(diǎn)處,作軸線的垂線并按雙線或緩沖區(qū)半寬E截出左右邊線的起迄點(diǎn);在軸線的其它
31、各個(gè)轉(zhuǎn)折點(diǎn)上,用與該點(diǎn)所關(guān)聯(lián)的前后兩鄰邊距軸線的偏移量為E的兩平行線的交點(diǎn)來(lái)生成兩平行邊線的對(duì)應(yīng)頂點(diǎn)。如圖1.2</p><p> 圖1.2 角平分線法</p><p> 1.2.3柵格法原理</p><p> 柵格方法又叫點(diǎn)陣法,它將點(diǎn)、線、面矢量數(shù)據(jù)轉(zhuǎn)化為柵格數(shù)據(jù),進(jìn)行像元加粗,然后作邊緣提?。辉谠砩媳容^簡(jiǎn)單,容易實(shí)現(xiàn),但受精度的限制;并且內(nèi)存開(kāi)銷大,所
32、能處理的數(shù)據(jù)量受到機(jī)器硬件的限制。</p><p> 1.3論文的主要內(nèi)容</p><p> 本論文對(duì)建立空間對(duì)象的緩沖區(qū)的矢量算法和柵格算法進(jìn)行分析,探討了這兩種建立空間對(duì)象緩沖區(qū)算法的異同和應(yīng)用范圍。</p><p><b> 論文結(jié)構(gòu)如下:</b></p><p> ?。?)空間對(duì)象緩沖區(qū)的實(shí)現(xiàn)</p&
33、gt;<p> ?。?)建立點(diǎn)、線、面空間對(duì)象緩沖區(qū)的矢量方法</p><p> ?。?)建立點(diǎn)、線、面空間對(duì)象緩沖區(qū)的柵格方法</p><p> ?。?)建立點(diǎn)、線、面空間對(duì)象緩沖區(qū)矢量、柵格方法的比較分析</p><p> 第二章 建立空間對(duì)象緩沖區(qū)方法 </p><p> 2.1 空間對(duì)象的數(shù)據(jù)表示 </p>
34、;<p> 2.1.1 空間數(shù)據(jù)的柵格模型和矢量模型 </p><p> 在柵格模型中,地理空間被劃分為規(guī)則的小單元(像元),空間位置由像元</p><p> 的行、列號(hào)表示。例如:一條道路由其值為道路編碼值的一系列相聯(lián)的像元表</p><p> 示,要從數(shù)據(jù)庫(kù)中刪除這條道路,則必須將所有有關(guān)像元的值變成該道路領(lǐng)域</p><
35、;p> 的背景值。柵格數(shù)據(jù)模型的設(shè)計(jì)思想是將地理空間看成一個(gè)連續(xù)的整體,在這</p><p> 個(gè)空間中處處有定義。在本畢業(yè)設(shè)計(jì)中柵格法緩沖區(qū)分析針對(duì)的是二值化后的</p><p> 影像數(shù)據(jù)。其格式為*.bmp。 </p><p> 矢量模型將地理空間看成是一個(gè)空間區(qū)域,地理要素存在其間。在矢量模</p><p> 型中,各
36、類地理要素根據(jù)其空間形態(tài)特征分為點(diǎn)、線、面三類。點(diǎn)狀要素用坐</p><p> 標(biāo)點(diǎn)對(duì)表示其位置;線狀要素用其中心軸線上的抽樣點(diǎn)坐標(biāo)串表示其位置和形</p><p> 狀;面狀要素用范圍輪廓線上的抽樣點(diǎn)坐標(biāo)串表示其位置和范圍。在本畢業(yè)設(shè)</p><p> 計(jì)中矢量法緩沖區(qū)分析對(duì)象是利用計(jì)算機(jī)屏幕數(shù)據(jù)的點(diǎn)、線、面圖形對(duì)象。 </p><p&g
37、t; 2.1.2 柵格數(shù)據(jù)——BMP 格式文件說(shuō)明 </p><p> 一個(gè) BMP 文件大體上分成如下 4 個(gè)部分:BITMAPFILEHEADER(位圖文件頭)、BITMAPINFOHEADER(位圖信息頭)、Palette(調(diào)色版)、DIB Pixels(DIB 圖像</p><p><b> 數(shù)據(jù))。 </b></p><p>
38、 1)位圖文件頭 BITMAPFILEHEADER </p><p><b> 它的結(jié)構(gòu)如下: </b></p><p> typedef struct tagBITMAPFILEHEADER{ </p><p> WORD bfType; </p><p> DWORD bfSize; </p>
39、<p> WORD bfReserved1; </p><p> WORD bfReserved2; </p><p> DWORD bfOffBits; </p><p> }BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER; </p><p> 該結(jié)構(gòu)的長(zhǎng)度是固定的,為 14 個(gè)字節(jié),
40、各參數(shù)說(shuō)明如下:</p><p> bfType:指定文件類型,必須是 0x424D,即字符串“BM”。也就是說(shuō)所有</p><p> 的“.bmp”文件的頭兩個(gè)字節(jié)都是“BM”bfSize:指定文件大?。?</p><p> bfReserved1、bfReserved2:為保留字,不用考慮;</p><p> bfOffBits:
41、為文件頭到實(shí)際的位圖數(shù)據(jù)的偏移字節(jié)數(shù),也就是前三部分長(zhǎng)</p><p><b> 度之和。 </b></p><p> 2)位圖信息頭 BITMAPINFOHEADER </p><p><b> 其結(jié)構(gòu)如下: </b></p><p> typedef struct tagBITMAPIN
42、FOHEADER{ </p><p> DWORD bfSize;</p><p> LONG biWidth; </p><p> LONG biHeight; </p><p> WORD biPlanes; </p><p> WORD biBitCount; <
43、/p><p> DWORD biCompression; </p><p> DWORD biSizeImage; </p><p> LONG biXPelsPerMeter; </p><p> LONG biYPersPerMeter; </p><p> DWORD
44、biClrUsed; </p><p> DWORD biClrImportant; </p><p> }BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER; </p><p> 該結(jié)構(gòu)的長(zhǎng)度為 40 個(gè)節(jié),各參數(shù)的意義說(shuō)明如下: </p><p> biSize:指定這個(gè)結(jié)構(gòu)的大小,為 4
45、0 個(gè)字節(jié); </p><p> biWidth:指定圖像的寬度,單位是像素; </p><p> biHeight:指定圖像的高度,單位是像素; </p><p> biPlanes:必須是 1; </p><p> biBitCount:指定表示顏色要用到的位數(shù),常用的值 1(黑白)8(256 色)、</p><
46、;p><b> 24(真彩色); </b></p><p> biCompression:指定位圖是否壓縮,有效值為 BI_RGB、BI_RLE4、BI_RLE8。</p><p> 其中 BI_RGB 為不壓縮的情況。 </p><p> biSize Im age = biWidth × biHeight′</
47、p><p> biSizeImage;指定實(shí)際的位圖數(shù)據(jù)占用的字節(jié)數(shù)??梢杂孟旅娴墓接?jì)算: </p><p> 需要注意的是:上述公式中的 biWidth 不一定總等于 biWidth,biWidth 必</p><p> 須是 4 的整數(shù)倍,表示大于或等于 biWidth 的離 4 最近的整倍數(shù)。 </p><p> biXPels
48、PerMeter:指定目標(biāo)設(shè)備的水平分辨率,單位是每米的像素個(gè)數(shù); </p><p> biYPelsPerMeter;指定目標(biāo)設(shè)備的垂直分辨率,單位是每米的像素個(gè)數(shù); </p><p> biClrUsed:指定本圖像實(shí)際用到的顏色數(shù),如果該值為 0 則用到的顏色數(shù)</p><p> 為 2 的 biBitCount 次冪; </p><
49、p> biClrImportant:指定本圖像中重要的顏色數(shù),如果該值為零,則認(rèn)為所</p><p> 用的顏色都是重要的。 </p><p> 3)alette(調(diào)色板) </p><p> 調(diào)色板實(shí)際上是一個(gè)數(shù)組,共有 biClrUsed 個(gè)元素(如果該值為 0,則為 2</p><p> 的 biBitCount 次冪)
50、。數(shù)組中每個(gè)元素的類型為一個(gè) RGBQUAD 結(jié)構(gòu),占 4 個(gè)字節(jié)。結(jié)構(gòu)定義如下: </p><p> typedef struct tagRGBQUAD{ </p><p> BYTE rgbBlue; </p><p> BYTE rgbGreen; </p><p> BYTE rgbRed; &
51、lt;/p><p> BYTE rgbReserved; </p><p> }RGBQUAD; </p><p> 注意:有些位圖,比如真彩色圖,沒(méi)有調(diào)色板。他們的位圖信息頭BITMAPINFOHEADER 后直接是 DIB 數(shù)據(jù)。 </p><p><b> DIB 圖像數(shù)據(jù) </b></p&g
52、t;<p> 它分兩種情況:對(duì)于用到調(diào)色板的位圖,圖像數(shù)據(jù)就是該像素顏色在調(diào)色</p><p> 板中的索引值;對(duì)于真彩色圖,圖像數(shù)據(jù)就是實(shí)際的 R、G、B 值。 </p><p> 對(duì)于 2 色位圖,用 1 位就可以表示該像素的顏色,因此一個(gè)字節(jié)可以表示 8</p><p><b> 個(gè)像素; </b></p>
53、;<p> 對(duì)于 16 色位圖,用 4 位可以表示一個(gè)像素的顏色,所以 1 個(gè)字節(jié)可以表示</p><p><b> 2 個(gè)像素; </b></p><p> 對(duì)于 256 色位圖,一個(gè)字節(jié)剛好表示一個(gè)像素; </p><p> 對(duì)于真彩色圖,3 個(gè)字節(jié)才能表示 1 個(gè)像素 </p><p> 注
54、意:1. 每一行的字節(jié)數(shù)必須是 4 的整倍數(shù),如果不是,則需要補(bǔ)齊; </p><p> 2. 圖像數(shù)據(jù)是按照從上到下、從左到右的順序存儲(chǔ);我們最先讀到的是圖</p><p> 像最下面一行的左邊第一個(gè)像素,然后是左邊第二個(gè)像素接下來(lái)是倒數(shù)第二行左邊第一個(gè)像素,左第二個(gè)像素依此類推,最后得到的是最上面一行的最后一個(gè)像素。 在 dibapi.h 和 dibapi.cpp 中有處理
55、*.bmp 格式文件的常用的函數(shù) </p><p> 如:HDIB ReadDIBFile(CFile& file)函數(shù)的參數(shù) Cfile &file 為文件名;該函數(shù)的返回值是文件中的圖像數(shù)據(jù)的句柄。 函數(shù)原型 BOOL WINAPI SaveDIB(HDIB hDib, CFile& file)的第一個(gè)參數(shù) hDIB表示保存圖像數(shù)據(jù)的內(nèi)存區(qū)域的句柄,第二個(gè)參數(shù) CFile&
56、; file 為保存圖像的文件名。另外,還有查找位圖像素的函數(shù) LPSTR WINAPI FindDIBBits(LPSTR lpbi),用于計(jì)算 DIB 位圖圖像數(shù)據(jù)的地址,返回一個(gè)指向位圖圖像數(shù)據(jù)起始位置的指針。 </p><p> 2.2 建立空間對(duì)象緩沖區(qū)的原理 </p><p> 2.2.1 空間對(duì)象緩沖區(qū)實(shí)現(xiàn)的矢量法原理 </p><p> ?。?)
57、點(diǎn)目標(biāo) P 的緩沖區(qū):以 P 為圓心,以緩沖距 E 為半徑作圓。</p><p> 圖2.1點(diǎn)目標(biāo)的矢量法緩沖區(qū)分析</p><p> (2)線目標(biāo) L 的緩沖區(qū):以 L 為軸線,以緩沖距 E 為平移量向兩側(cè)作平行曲(折)線。在軸線兩端構(gòu)造兩個(gè)半圓弧,最后形成圓頭(蠶形)緩沖區(qū)。</p><p> 圖 2.2 線目標(biāo)的矢量法緩沖區(qū)分析 </p>
58、<p> ?。?)面目標(biāo) A 的緩沖區(qū):以 A 的邊界線 LA 為軸線,以緩沖距 E 為平移量向邊界線的外側(cè)作平行曲(折)線。</p><p> 圖 2.3 面目標(biāo)的矢量法緩沖區(qū)分析 </p><p> 2.2.2 空間對(duì)象緩沖區(qū)實(shí)現(xiàn)的柵格法原理 </p><p> 本畢業(yè)設(shè)計(jì)是基于膨脹算法的緩沖區(qū)分析。從數(shù)學(xué)的角度看,緩沖區(qū)分析</p
59、><p> 的基本思想是給定一個(gè)空間對(duì)象或集合,確定它們的領(lǐng)域。 </p><p> 數(shù)學(xué)形態(tài)學(xué)是一門新興的圖像分析學(xué)科,其基本思想是:利用一個(gè)結(jié)構(gòu)元</p><p> 素去探測(cè)一個(gè)圖像,看是否能夠?qū)⑦@個(gè)結(jié)構(gòu)元素很好地填放在圖像的內(nèi)部,同</p><p> 時(shí)驗(yàn)證填放結(jié)構(gòu)元素的方法是否有效。 </p><p>
60、圖學(xué)形態(tài)學(xué)中的基本運(yùn)算有膨脹算法,其定義為: </p><p> A⊕B={a: (-B+a)∩ A≠Φ} </p><p> 上式表示把結(jié)構(gòu)元素B平移a后得到Ba,若Ba擊中A(即Ba與A的交集不為</p><p> 空),記下這個(gè)a點(diǎn)。所有滿足上述條件的a點(diǎn)組成的集合稱做A被B膨脹的結(jié)果。 </p><p> 圖2.4中A表示的大
61、長(zhǎng)方形是被處理的對(duì)象,B所示的小正方形是結(jié)構(gòu)元素,</p><p> 原點(diǎn)指定為B的中心。不難知道,對(duì)于任意一個(gè)在陰影部分的點(diǎn)a,Ba擊中A,</p><p> 所以A被B膨脹的結(jié)果就是那個(gè)陰影部分。陰影部分包括A的所有范圍,就像A</p><p> 膨脹了一圈似的,這就是將這種算法稱為膨脹的原因。</p><p> 圖 2.4
62、膨脹法原理圖 </p><p> 空間對(duì)象緩沖區(qū)的膨脹生成算法原理: </p><p> ?。?)點(diǎn)目標(biāo) P 的緩沖區(qū):以 P 為點(diǎn)生成元,借緩沖距 E 規(guī)定像元加粗的結(jié)構(gòu)元</p><p> 素,然后進(jìn)行像元的膨脹。 </p><p> ?。?)線目標(biāo) L 的緩沖區(qū):以 L 為線生成元,借緩沖距 E 規(guī)定像元加粗的結(jié)構(gòu)元</p&g
63、t;<p> 素,然后進(jìn)行像元膨脹。</p><p> 面目標(biāo) A 的緩沖區(qū):以 A 的邊界線 LA 為軸線,借助緩沖距 E 規(guī)定像元加粗的結(jié)構(gòu)元素,并進(jìn)行像元膨脹。</p><p> 2.3 基于矢量的空間對(duì)象緩沖區(qū)生成算法的引理和概念 </p><p> 空間信息系統(tǒng)中,空間目標(biāo)分為點(diǎn)目標(biāo)、線目標(biāo)、面目標(biāo),以及點(diǎn)、線、面目標(biāo)任意組合而成的復(fù)
64、雜目標(biāo)??臻g目標(biāo)的緩沖區(qū)包括點(diǎn)目標(biāo)緩沖區(qū)、線目標(biāo)緩沖區(qū)、面目標(biāo)緩沖區(qū)。點(diǎn)目標(biāo)的緩沖區(qū),是圍繞該目標(biāo)的半徑為緩沖距的圓周所包圍的區(qū)域;線目標(biāo)的緩沖區(qū),是沿線目標(biāo)的兩側(cè)距離不超過(guò)緩沖距的點(diǎn)組成的區(qū)域;面目標(biāo)的緩沖區(qū),是沿該目標(biāo)邊界內(nèi)側(cè)或外側(cè)距離不超過(guò)緩沖距的點(diǎn)組成的區(qū)域。 </p><p> 為討論方便,首先引入下面幾個(gè)引理和概念: </p><p> 引理一 當(dāng)沿著簡(jiǎn)單多邊形的頂點(diǎn)串方向
65、走過(guò)所有有向邊時(shí),如果多邊形的頂點(diǎn)以逆時(shí)針?lè)较虼B起來(lái),則我們的左側(cè)始終在多邊形的內(nèi)部;反之,如果多邊形的頂點(diǎn)以順時(shí)針?lè)较虼B起來(lái),則我們的右側(cè)始終在多邊形的內(nèi)部。 </p><p> 引理二 當(dāng)沿著簡(jiǎn)單多邊形的任一條有向邊從起點(diǎn)走向終點(diǎn)時(shí),如果我們的左側(cè)始終在多邊形的內(nèi)部,則多邊形的頂點(diǎn)以逆時(shí)針?lè)较虼B起來(lái);反之,如果我們的右側(cè)始終在多邊形的內(nèi)部,則多邊形的頂點(diǎn)以順時(shí)針?lè)较虼B起來(lái)。 </p>
66、<p> 定義一 如果多邊形的頂點(diǎn)以逆時(shí)針?lè)较虼B起來(lái),則稱此多邊形的方向?yàn)檎?;如果多邊形的頂點(diǎn)以順時(shí)針?lè)较虼B起來(lái),則稱此多邊形的方向?yàn)樨?fù)向。 </p><p> 正多邊形 負(fù)多邊 形</p><p> 圖2.5正負(fù)多邊形的定義</p><p> 定義二 在簡(jiǎn)單多邊形任意頂
67、點(diǎn)前后兩個(gè)矢量形成的兩個(gè)角度中,位于多邊</p><p> 形內(nèi)的角度稱為該頂點(diǎn)的內(nèi)角,位于多邊形外的角度稱為該頂點(diǎn)的外角</p><p> 2.4線狀目標(biāo)緩沖區(qū)的生成方法 </p><p> 線狀目標(biāo)緩沖區(qū)的生成是點(diǎn)、線、面三種基本空間矢量要素緩沖區(qū)生成的關(guān)鍵和基礎(chǔ)。在此節(jié)介紹了本次畢業(yè)設(shè)計(jì)實(shí)現(xiàn)線狀目標(biāo)緩沖區(qū)自動(dòng)生成的矢量算法。 </p>&l
68、t;p> 線狀目標(biāo)緩沖區(qū)總的生成分兩個(gè)階段,即單個(gè)線狀緩沖區(qū)多邊形的獨(dú)立生成過(guò)程和多個(gè)線狀目標(biāo)緩沖區(qū)多邊形間的重疊合并過(guò)程。</p><p> 1、獨(dú)立線狀目標(biāo)緩沖區(qū)的自動(dòng)生成 </p><p> 在基于矢量數(shù)據(jù)格式的地理信息系統(tǒng)中,任何線狀目標(biāo)的空間形態(tài)主要是通過(guò)“折線”的方式來(lái)表示的,因此,所謂的線狀目標(biāo)緩沖區(qū)的生成實(shí)際上等價(jià)于“折線”緩沖區(qū)的生成問(wèn)題。通過(guò)分析折線的形態(tài)特
69、征會(huì)發(fā)現(xiàn)任何形狀的折線都是由折線端點(diǎn)、折線上的線段和線段間的拐點(diǎn)三個(gè)基本要素所構(gòu)成。顯然,要分析折線緩沖區(qū)的生成算法,必需從構(gòu)成折線的三要素著眼。下面分別介紹折線端點(diǎn)、折線上的線段和線段間的拐點(diǎn)的緩沖區(qū)生成算法,然后在將它們組合在一起形成任意折線等距緩沖區(qū)的自動(dòng)生成算法。 </p><p> (1)線段緩沖區(qū)的生成 </p><p> 任意方向線段(原線段)的緩沖區(qū)線段應(yīng)與原線段構(gòu)成一
70、個(gè)矩形。圖 3.2中 CD 和 EF 兩條線段代表元線段 AB 前進(jìn)方向(起始點(diǎn)到結(jié)束點(diǎn))的左右兩條緩緩沖區(qū)線段</p><p><b> F</b></p><p> C A E </p><p> 圖 2.6 線段緩沖區(qū)的生成</p><p> 設(shè)原線段的起始點(diǎn) A 和結(jié)束點(diǎn) B 的坐標(biāo)分別為
71、(Xa,Ya)和(Xb,Yb),緩沖區(qū)距離為 d,則線段 AB 的左緩沖區(qū)線段 CD 的端點(diǎn)坐標(biāo)(Xc,Yc)(Xd,Yd)和右緩沖區(qū)線段 EF 的端點(diǎn)坐標(biāo)(Xe,Ye)(Xf,Yf)的計(jì)算公式應(yīng)分別為</p><p> 1)當(dāng)Ya ? Yb > 0時(shí):</p><p> Xc = Xa + d ×k ÷ 1+ k Xd = 2 × X
72、a ? Xc </p><p> Yc = Xd ? d ÷ 1 + k Yd = 2 × Ya ? Yc </p><p> Xe = Xb + d × k ÷ 1+ k Xf = 2× Xb ? Xc</p><p> Ye = Xb ? d ÷ 1 +
73、 k Yf = 2 × Yb ? Yc</p><p> 2)當(dāng)Ya ? Yb < 0時(shí): </p><p> Xc = Xa ? d × k ÷ 1+ k Xd = 2 ×Xa ? Xc </p><p> Ye = Xd + d ÷ 1 + k
74、 Yd = 2 × Ya ? Yc </p><p> Xe = Xb ? d × k ÷ 1+ k Xf = 2× Xb ? Xe</p><p> Ye = Xb ? d × k ÷ 1 + k Yf = 2× Yb ? Ye </p><p> 其
75、中:k為線段AB直線的斜率,k=(Yb ? Ya ) ÷ (Xb ? Xa </p><p> (2) 折線端點(diǎn)緩沖區(qū)的生成 </p><p> 理論上講,折線端點(diǎn)的緩沖區(qū)應(yīng)該是一個(gè)半圓弧。其原心在折線的端點(diǎn)上,連接半圓弧兩個(gè)端點(diǎn)的直徑應(yīng)垂直于折線的端點(diǎn)線段,如圖 3.3 所示。但是由于整條折線的緩沖區(qū)應(yīng)該是一個(gè)閉合多邊形,所以折線端點(diǎn)出的緩沖區(qū)實(shí)際上只能是一個(gè)對(duì)上述半圓弧具
76、有一定擬和精度的正 n 邊形。</p><p> 圖 2.7 折線端點(diǎn)的緩沖區(qū)生成</p><p> 在圖 2.7 中,設(shè)待生成緩沖區(qū)的折線端點(diǎn) A(Xa,Ya)其右側(cè)緩沖區(qū)線段端點(diǎn)E(Xe,Ye),以 A 為圓心,d 為半徑順時(shí)針轉(zhuǎn) 180 得半圓弧 EC。 </p><p> ?。?)折線拐點(diǎn)緩沖區(qū)的生成 </p><p> 所謂折
77、線上的拐點(diǎn)是指折線上兩條相鄰線段的連接處。顯然,構(gòu)成拐點(diǎn)的兩條相鄰線段或者在同一條直線上或者不在同一條直線上。 </p><p> 當(dāng)兩條直線在同一條直線上時(shí),根據(jù)兩條線段生成的同側(cè)緩沖區(qū)也必然在同一條直線上(這里假設(shè)構(gòu)成拐點(diǎn)的兩條線段的緩沖區(qū)距離相等)。此時(shí)沒(méi)有必要再生成拐點(diǎn)處的緩沖區(qū)。 </p><p> 當(dāng)構(gòu)成拐點(diǎn)的兩條線段不再同一條直線上時(shí),在折線的拐點(diǎn)處就形成兩個(gè)角,其中一個(gè)
78、角必然大于 180 而另一個(gè)角則小于 180 。把大于 180 的角稱為外角,而小于 180 的角稱為內(nèi)角。在內(nèi)角側(cè)不必生成拐點(diǎn)緩沖區(qū),與此相反,在</p><p> 外角側(cè),構(gòu)成拐點(diǎn)的兩條線段外角側(cè)緩沖區(qū)線段不相交。而是形成一個(gè)扇形區(qū)圓?。▓A弧圓心在拐點(diǎn)上,圓弧半徑等于緩沖區(qū)的距離)。折線的端點(diǎn)為構(gòu)成拐點(diǎn)的兩條線段外角側(cè)緩沖區(qū)線段靠近拐點(diǎn)處的兩個(gè)端點(diǎn),圖 2.8 中的 D、D’兩點(diǎn)。 </p>
79、<p> 圖 2.8 折線拐點(diǎn)緩沖區(qū)的生成</p><p> (4)任意折線等距緩沖區(qū)的自動(dòng)生成算法 </p><p> 任意不自相交折線等距緩沖區(qū)的自動(dòng)生成算法 </p><p> 步驟 1:按照折線的數(shù)字化方向,從折線的第一條線段開(kāi)始,先生成折線起始端點(diǎn)的半圓弧緩沖區(qū),然后再第一條線段的左側(cè)生成該線段的緩沖區(qū)線段。設(shè)第一條線段為 i 線段。
80、 </p><p> 步驟 2:判斷 i+1 線段相對(duì)當(dāng)前 i 線段的走向(左拐、右拐或在當(dāng)前 i 線段的延長(zhǎng)線上三種情況)。如果 i+1 線段的走向?yàn)樽蠊栈蛟诋?dāng)前 i 線段的延長(zhǎng)線上,則在當(dāng)前 i 線段的左側(cè)只生成其相應(yīng)的平行緩沖區(qū)線段。否則,除了要生成 當(dāng)前線段 i 的平行緩沖區(qū)線段外,還要生成拐點(diǎn)的弧形緩沖區(qū)折線。 </p><p> 步驟 3:將新生成的緩沖區(qū)邊界線與已經(jīng)生成的
81、緩沖區(qū)邊界線進(jìn)行相交計(jì)算。如果新生成的緩沖區(qū)邊界線與已生成的緩沖區(qū)邊界線間沒(méi)有或只有一個(gè)交點(diǎn),則轉(zhuǎn)入步驟 5;否則,說(shuō)明緩沖區(qū)邊界線出現(xiàn)了自相交現(xiàn)象,應(yīng)該進(jìn)行自相交處理,轉(zhuǎn)入步驟 4。 </p><p> 步驟 4:確定新舊緩沖區(qū)邊界線間的每個(gè)交點(diǎn)的特性。最靠近就緩沖區(qū)邊界線上最后線段的交點(diǎn)為新舊緩沖區(qū)邊界線間的正常交點(diǎn),其他交點(diǎn)為緩沖區(qū)自相交的交點(diǎn)。當(dāng)新舊緩沖區(qū)邊界線間有兩個(gè)交點(diǎn)時(shí),應(yīng)該設(shè)置一個(gè)標(biāo)志變量用語(yǔ)標(biāo)
82、志新緩沖區(qū)邊界線是進(jìn)入已有緩沖區(qū)域的點(diǎn)稱為“交疊開(kāi)始點(diǎn)”,而新緩沖區(qū)邊界線走出已有緩沖區(qū)域的點(diǎn)稱為“交疊結(jié)束點(diǎn)”。在交疊開(kāi)始點(diǎn)和交疊結(jié)束點(diǎn)之間必然存在的兩條緩沖區(qū)邊界線就是自相交處理中應(yīng)該刪掉的線。此外,應(yīng)對(duì)閉合于交疊開(kāi)始點(diǎn)的閉合緩沖區(qū)進(jìn)行特殊的標(biāo)記,因?yàn)榇碎]合緩沖區(qū)圍成的區(qū)域并不是所要的緩沖區(qū)域,而恰恰是非緩沖區(qū)區(qū)域。本文將緩沖區(qū)在閉合曲線內(nèi)部的緩沖區(qū)多邊形稱為正多邊形,而緩沖區(qū)在閉合曲線外側(cè)的緩沖區(qū)多邊形被稱為負(fù)多邊形。 </
83、p><p> 步驟 5:判斷當(dāng)前線段是否為折線的最后一條線段。如果當(dāng)前線段不是折線的最后線段,則將 i 加 1 后返回到步驟 2,如果當(dāng)前線段是折線的最后線段,則結(jié)束緩沖區(qū)生成計(jì)算。</p><p> 第三章 研究方法和技術(shù)路線</p><p> 本章主要介紹,基于ArcEngine緩沖區(qū)分析用到的軟件,其中Microsoft Visual Basic是一款使用面
84、非常廣的編程語(yǔ)言,比較適合編程的初學(xué)者使用。ArcEngine是Arcgis9的系列產(chǎn)品,是基于核心組件庫(kù)ArcObject搭建的。</p><p><b> 3.1研究方法</b></p><p> ?。?)文獻(xiàn)搜集法:搜集空間分析的方案設(shè)計(jì)、需求預(yù)測(cè)等相關(guān)期刊專著以及網(wǎng)絡(luò)文獻(xiàn),對(duì)資料進(jìn)行歸納、整理、分類、分析,得出相關(guān)的研究成果,為本論文的研究奠定理論基礎(chǔ)。&l
85、t;/p><p> ?。?)系統(tǒng)分析法:在整個(gè)項(xiàng)目研究過(guò)程中,始終貫徹以理論知識(shí)為基礎(chǔ),以社會(huì)實(shí)踐為根本,進(jìn)行市場(chǎng)調(diào)研分析,以此對(duì)本論文進(jìn)行布局、設(shè)計(jì),保證本論文體系結(jié)構(gòu)的邏輯性、科學(xué)性、可行性。</p><p> ?。?)模擬法(模型方法):模擬法是先依照原型的主要特征,創(chuàng)設(shè)一個(gè)相似的模型,然后通過(guò)模型來(lái)間接研究原型的一種形容方法。根據(jù)模型和原型之間的相似關(guān)系,模擬法可分為物理模擬和數(shù)學(xué)模擬
86、兩種</p><p> ?。?)信息研究方法 :信息研究方法是利用信息來(lái)研究系統(tǒng)功能的一種科學(xué)研究方法。美國(guó)數(shù)學(xué)、通訊工程師、生理學(xué)家維納認(rèn)為,客觀世界有一種普遍的聯(lián)系,即信息聯(lián)系。當(dāng)前,正處在“信息革命”的新時(shí)代,有大量的信息資源,可以開(kāi)發(fā)利用。信息方法就是根據(jù)信息論、系統(tǒng)論、控制論的原理,通過(guò)對(duì)信息的收集、傳遞、加工和整理獲得知識(shí),并應(yīng)用于實(shí)踐,以實(shí)現(xiàn)新的目標(biāo)。信息方法是一種新的科研方法,它以信息來(lái)研究系統(tǒng)功
87、能,揭示事物的更深一層次的規(guī)律,幫助人們提高和掌握運(yùn)用規(guī)律的能力。供基本的面向?qū)ο笾С?。因?yàn)樵絹?lái)越多組建的出現(xiàn),程序員可以選用自己需要的擴(kuò)展庫(kù)。和有些語(yǔ)言不一樣,VB對(duì)大小寫不敏感,但是能自動(dòng)轉(zhuǎn)換關(guān)鍵詞到標(biāo)準(zhǔn)的大小寫狀態(tài),以及強(qiáng)制使得符號(hào)表入口的實(shí)體的變量名稱遵循書寫規(guī)則。默認(rèn)情況下字符串的比較是對(duì)大小寫敏感的,但是可以關(guān)閉這個(gè)功能。VB使得大量的外界控件有了自己的生存空間。大量的第三方控件針對(duì)VB提供。VB也提供了建立、使用和重用這些
88、控件的方法,但是由于語(yǔ)言問(wèn)題,從一個(gè)應(yīng)用程序創(chuàng)建另外一個(gè)并不簡(jiǎn)單。</p><p><b> 3.2 技術(shù)路線</b></p><p> 本文的主要研究技術(shù)路線見(jiàn)圖</p><p><b> 圖3.1設(shè)計(jì)流程圖</b></p><p><b> 本文程序流程圖</b>&
89、lt;/p><p> 圖3.2程序?qū)崿F(xiàn)流程圖 </p><p><b> 緩沖區(qū)分析的實(shí)現(xiàn)</b></p><p> 本章是文章的核心部分,將介紹利用湖北省交通路網(wǎng)的網(wǎng)絡(luò)數(shù)據(jù)集,以ArcEngine為平臺(tái)并通過(guò)VB6.0編寫程序來(lái)實(shí)現(xiàn)緩沖區(qū)分析。文中將給出主要的代碼及相關(guān)說(shuō)明,并在最后貼出運(yùn)行效果圖。 </p><p>
90、;<b> 4.1打開(kāi)工作空間</b></p><p> ' 新建一個(gè)ShapefileWorkspaceFactory對(duì)象,不同類型的數(shù)據(jù)庫(kù)使用不同的工作空間對(duì)象</p><p> Dim pWorkspaceFactory As IWorkspaceFactory </p><p> Set pWorkspaceFact
91、ory = New ShapefileWorkspaceFactory </p><p> Set OpenWorkspace = pWorkspaceFactory.OpenFromFile(strGDBName, 0)</p><p> ' 使用shapefile的空間對(duì)象連接到shapefile數(shù)據(jù)庫(kù)</p><p> 4.2.自定義緩沖區(qū)<
92、;/p><p> 要實(shí)現(xiàn)在地圖面上拉框、拉多邊形、拉多義線等,只需要使用MapControl的Track系列方法(TrackLine,TrackPolygon等)就很容易獲得要做緩沖區(qū)運(yùn)算的圖形,這點(diǎn)已經(jīng)在空間查詢部分進(jìn)行了描述。本例使用了派生自IDisplayFeedback接口的系列對(duì)象,即ArcEngine中的FeedBack對(duì)象,目的是讓讀者能夠接觸到更多的ArcEngine對(duì)象,體會(huì)ArcEngine開(kāi)發(fā)
93、的靈活性。在ArcEngine中所有的FeedBack對(duì)象(近30個(gè))都實(shí)現(xiàn)了IDisplayFeedBack接口,在本例中要使用NewLineFeedBack、NewEnvelopeFeedBack和NewPolygonFeedback三個(gè)對(duì)象來(lái)創(chuàng)建多義線、矩形和任意多邊形。創(chuàng)建用來(lái)做緩沖區(qū)的圖形的過(guò)程是:用戶在MapControl上點(diǎn)下鼠標(biāo)(MouseDown),標(biāo)志圖形創(chuàng)建的開(kāi)始,對(duì)于點(diǎn)、拉框和選擇要素這三種方式,當(dāng)發(fā)生Mouse
94、Up的時(shí)候,標(biāo)志動(dòng)作的結(jié)束或圖形創(chuàng)建完畢,對(duì)于多義線和多邊形則由于要放生多個(gè)MouseDown事件,其以DoubleClick標(biāo)志圖形的創(chuàng)建結(jié)束,在Double</p><p> ’Class Name:clsDrawGeometry</p><p> ’Implements</p><p> Implements esriSystemUI.ITool<
95、/p><p> Implements esriSystemUI.ICommand</p><p><b> ’Event</b></p><p> Public Event EndDraw(ByVal EndDraw As Boolean)</p><p> EndDraw事件在圖形被繪制完畢時(shí)觸發(fā),其作用是留給調(diào)用
96、的它的對(duì)象進(jìn)行空間分析。</p><p> 下面給出MouseDown、MouseMove、MouseUp和DoubleClick四個(gè)事件的所有代碼。</p><p> Private Sub ITool_OnMouseDown(ByVal button As Long, ByVal shift As Long, ByVal X _ As Long, ByVal Y As Long)&
97、lt;/p><p> '根據(jù)類型來(lái)啟動(dòng)不同的繪制對(duì)象</p><p> Setm_pPoint=m_pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y)Select Case m_DrawType</p><p> '是點(diǎn)的時(shí)候直接獲得該點(diǎn)</p><p
98、> Case esriGeometryType.esriGeometryPoint</p><p> Set m_pGeometry = m_pPoint</p><p> RaiseEvent EndDraw(True)</p><p> Case esriGeometryType.esriGeometryEnvelope '
99、;矩形拉框</p><p> If m_pNewEnvelopeFeedback Is Nothing Then</p><p> '定義一個(gè)矩形feedback,模擬拉框</p><p> Set m_pNewEnvelopeFeedback = New NewEnvelopeFeedback</p><p> Set m_
100、pNewEnvelopeFeedback.Display = m_pScreenDisplay</p><p> m_pNewEnvelopeFeedback.Start m_pPoint</p><p><b> End If</b></p><p> Case esriGeometryType.esriGeometryPolyline
101、 '線</p><p> If m_pNewLineFeedback Is Nothing Then</p><p> Set m_pNewLineFeedback = New NewLineFeedback</p><p> Set m_pNewLineFeedback.Display = m_pScreenDisplay</p
102、><p> m_pNewLineFeedback.Start m_pPoint</p><p><b> Else</b></p><p> '在用戶沒(méi)有雙擊前,繼續(xù)畫</p><p> m_pNewLineFeedback.AddPoint m_pPoint</p><p><
103、b> End If</b></p><p> Case esriGeometryType.esriGeometryPolygon</p><p> If m_pNewPolygonFeedback Is Nothing Then</p><p> Set m_pNewPolygonFeedback = New NewPolygonFeedb
104、ack</p><p> Set m_pNewPolygonFeedback.Display = m_pScreenDisplay</p><p> m_pNewPolygonFeedback.Start m_pPoint</p><p><b> Else</b></p><p> '在用戶沒(méi)有雙擊前,
105、繼續(xù)畫</p><p> m_pNewPolygonFeedback.AddPoint m_pPoint</p><p><b> End If</b></p><p> Case 1111 '要素緩沖</p><p> Dim pPt As IPoint</p><p> D
106、im pGeo As IGeometry</p><p> Dim pMapCtrl As MapControl</p><p> Dim pFeatLyr As IFeatureLayer</p><p> Dim pFSelection As IFeatureSelection</p><p> Dim pFilter As IS
107、patialFilter</p><p> Dim pTopo As ITopologicalOperator</p><p> Dim i As Integer, Count As Integer</p><p> Set pMapCtrl = m_pHook.hook</p><p> Set pPt = pMapCtrl.ToM
108、apPoint(X, Y)</p><p> Set pTopo = pPt</p><p> Count = pMapCtrl.LayerCount</p><p> Set pFilter = New SpatialFilter</p><p> With pFilter</p><p> Set .Ge
109、ometry = pTopo.Buffer(0.05)</p><p> .SpatialRel = esriSpatialRelIntersects</p><p><b> End With</b></p><p> For i = 0 To Count - 1</p><p> Set pFSelectio
110、n = pMapCtrl.Layer(i)</p><p> pFSelection.SelectFeatures pFilter, esriSelectionResultNew, False</p><p><b> Next</b></p><p> pMapCtrl.Refresh esriViewGeoSelection</
111、p><p> End Select</p><p><b> Exit Sub</b></p><p><b> End Sub</b></p><p> Private Sub ITool_OnMouseMove(ByVal button As Long, ByVal shift As Lon
112、g, ByVal X _As Long, ByVal Y As Long)</p><p> Dim pPoint As esriGeometry.IPoint</p><p> Select Case m_DrawType</p><p> Case esriGeometryType.esriGeometryEnvelope '
113、矩形拉框</p><p> If Not m_pNewEnvelopeFeedback Is Nothing Then</p><p> Set pPoint = m_pScreenDisplay.DisplayTransformation.ToMapPoint(X, Y)</p><p> m_pNewEnvelopeFeedback.MoveTo pPoi
114、nt</p><p><b> End If</b></p><p> Case esriGeometryType.esriGeometryPolyline '線</p><p> If Not m_pNewLineFeedback Is Nothing Then</p><p>
115、Set pPoint = m_pScreenDisplay.DisplayTransformation.ToMapPoint(X, Y)</p><p> m_pNewLineFeedback.MoveTo pPoint</p><p><b> End If</b></p><p> Case esriGeometryType.esri
116、GeometryPolygon '多邊形</p><p> If Not m_pNewPolygonFeedback Is Nothing Then</p><p> SetpPoint=m_pScreenDisplay.DisplayTransformation.ToMapPoint(X, Y)</p><p> m_pNew
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《緩沖區(qū)分析》實(shí)驗(yàn)報(bào)告
- arcgis空間疊加分析與緩沖區(qū)分析
- arcgis空間疊加分析與緩沖區(qū)分析
- arcgis緩沖區(qū)分析、疊加分析綜合案例練習(xí)
- 三維體數(shù)據(jù)生成及三維緩沖區(qū)分析.pdf
- 緩沖區(qū)機(jī)制與政黨治理
- 32662.gs模式下空間數(shù)據(jù)緩沖區(qū)分析關(guān)鍵技術(shù)研究
- 12屏蔽緩沖區(qū)
- 關(guān)于車鉤緩沖裝置畢業(yè)論文
- 氣候緩沖區(qū)的妙用
- 數(shù)組緩沖區(qū)溢出分析和檢測(cè).pdf
- PBS緩沖區(qū)車身路由調(diào)度策略的研究與應(yīng)用.pdf
- 緩沖區(qū)溢出攻擊原理
- 回收件質(zhì)量不確定條件下的緩沖區(qū)分配問(wèn)題研究.pdf
- 32706.空間分析中緩沖區(qū)生成算法研究及應(yīng)用
- 實(shí)體三維緩沖區(qū)生成與分析方法研究.pdf
- 24基于緩沖區(qū)溢出問(wèn)題的攻防實(shí)例與分析
- 35871.gis緩沖區(qū)和疊加分析
- 緩沖區(qū)溢出漏洞利用與防御研究.pdf
- 緩沖區(qū)溢出檢測(cè)與防護(hù)技術(shù)改進(jìn)研究
評(píng)論
0/150
提交評(píng)論