1.認(rèn)識(shí)空間數(shù)據(jù)庫中數(shù)據(jù)的存放方式或存儲(chǔ)結(jié)構(gòu);
2.掌握空間數(shù)據(jù)庫的格網(wǎng)索引、標(biāo)題索引的建立方法;
3.理解空間索引的功能和意義;
4.加強(qiáng)學(xué)生面向?qū)ο蟪绦蛟O(shè)計(jì)的能力。
實(shí)驗(yàn)II:空間數(shù)據(jù)庫的格網(wǎng)索引建立
一、實(shí)驗(yàn)課時(shí)和類型:
學(xué)時(shí):8
實(shí)驗(yàn)類型:綜合性
二、實(shí)驗(yàn)?zāi)康模?br /> 1.認(rèn)識(shí)空間數(shù)據(jù)庫中數(shù)據(jù)的存放方式或存儲(chǔ)結(jié)構(gòu);
2.掌握空間數(shù)據(jù)庫的格網(wǎng)索引、標(biāo)題索引的建立方法;
3.理解空間索引的功能和意義;
4.加強(qiáng)學(xué)生面向?qū)ο蟪绦蛟O(shè)計(jì)的能力。
三、適用專業(yè):
地理信息系統(tǒng)專業(yè)
四、采用教材:
教材:《計(jì)算機(jī)地圖制圖》艾自興,龍毅編著 武漢大學(xué)出版社
參考書:《地圖學(xué)》 祝國瑞 編著 武漢大學(xué)出版社
五、儀器與工具:
P3以上配置計(jì)算機(jī);
VC++工具軟件;
實(shí)驗(yàn)地圖數(shù)據(jù)。
六、實(shí)驗(yàn)原理與內(nèi)容:
本次實(shí)驗(yàn)為綜合性實(shí)驗(yàn),涉及《數(shù)字地圖制圖原理》、《計(jì)算機(jī)地圖制圖原理》、《地圖數(shù)據(jù)庫》等幾門課程中所講的內(nèi)容。
七、實(shí)驗(yàn)數(shù)據(jù)說明
1、 地圖區(qū)域:武漢市
文件名:武漢實(shí)習(xí)數(shù)據(jù).usr
2、分類代碼:
代碼 名稱
30000 控制點(diǎn)
10000 圖廓點(diǎn)
10001 鐵路
10003 汽渡虛線
10004 主要道路
20001 碼頭
20002 鐵路中轉(zhuǎn)站
20003 河流、湖泊
20004 居民地
3、代碼說明:
分類代碼第一個(gè)字符為1,表示線目標(biāo);
分類代碼第二個(gè)字符為2,表示面目標(biāo)。
4、控制點(diǎn)順序:
第一點(diǎn):左上角 第二點(diǎn):右上角
第三點(diǎn):右下角 第四點(diǎn):左下角
控制點(diǎn)的理論值(人為規(guī)定x,y):
第一點(diǎn):12.50 37.40
第二點(diǎn):62.50 37.40
第三點(diǎn):62.50 82.40
采用仿射變換方法。
主要實(shí)驗(yàn)內(nèi)容:
1.讀取數(shù)據(jù)
2.仿射變換
3.繪圖顯示
4.建立定位索引——格網(wǎng)索引
5.建立定性索引——標(biāo)題索引
6.將已建立的格網(wǎng)索引用于目標(biāo)拾取功能的實(shí)現(xiàn)
7.運(yùn)用已建立的標(biāo)題索引實(shí)現(xiàn)對(duì)象的屬性查詢
八、實(shí)驗(yàn)步驟:
第一;建立一個(gè)MapOfWuhan (MFC)工程,參數(shù)缺省。
第二;建立地圖三要素:點(diǎn)、線、面。點(diǎn)類包括對(duì)應(yīng)點(diǎn)的X,Y坐標(biāo);線類包括線號(hào)(Xcode),線分類代碼(Xflcode)以及組成線的點(diǎn)號(hào)數(shù)組(m_array);面類包括面號(hào)(Mcode),面分類代碼(Mflcode)以及組成面的點(diǎn)號(hào)數(shù)組(m_array)。
第三;在讀取數(shù)據(jù)時(shí),要設(shè)計(jì)存儲(chǔ)結(jié)構(gòu)。在Doc中要建立點(diǎn)類數(shù)組Array_dian,線類數(shù)組Array_xian,面類數(shù)組Array_mian,分別存放對(duì)應(yīng)的點(diǎn)線面類目標(biāo)。一共有655組數(shù)據(jù),讀取的時(shí)候每組中的X,Y坐標(biāo)存放到預(yù)先定義的點(diǎn)類對(duì)象中,若每組的分類代碼為線類目標(biāo)的分類代碼,則把相應(yīng)的線的分類代碼存放到事先定義的線類對(duì)象的Xflcode中,把對(duì)應(yīng)的組號(hào)存放到Xcode中,把組成線的一系列點(diǎn)類對(duì)象存放到線類對(duì)象的m_array中,最后把線類對(duì)象存放到對(duì)應(yīng)的線類數(shù)組(Array_xian)中;面類也是如此。這樣,就完成了讀取存儲(chǔ),即將不同類的對(duì)象存放到不同的類數(shù)組中。
第四;對(duì)數(shù)據(jù)進(jìn)行仿射變換。選擇控制點(diǎn)中的1,2,3點(diǎn),根據(jù)這三點(diǎn)的理論值和規(guī)定其在屏幕上的輸出值求出仿射變換的未知系數(shù)a0,a1,a2,b0,b1,b2。然后,順序掃描線類數(shù)組Array_xian和 面類數(shù)組Array_mian,對(duì)不同的線類對(duì)象和面類對(duì)象的坐標(biāo)值進(jìn)行變換(X=a0*x+a1*y+a2;Y=b0*x+b1*y+b2)。
第五;當(dāng)顯示數(shù)據(jù)時(shí),為了保證面狀地物不壓蓋線狀地物,首先要對(duì)面裝地物進(jìn)行顯示,即順序掃描面類數(shù)組Array_mian,根據(jù)數(shù)組中對(duì)象分類代碼(Mflcode)的不同,將不同的對(duì)象進(jìn)行著色填充并顯示在屏幕上;然后再順序掃描線類數(shù)組Array_xian,同樣根據(jù)線分類代碼(Xflcode)的不同,對(duì)不同對(duì)象規(guī)定不同的畫筆并顯示在屏幕上。
第六;建立格網(wǎng)索引首先要建立一個(gè)索引類Csuoyin,其中包括存放經(jīng)過每個(gè)格網(wǎng)的對(duì)象的標(biāo)志號(hào)碼(即線號(hào)(Xcode)和面號(hào)(Mcode))的數(shù)組HLcode,然后再Doc中定義一個(gè)自己已規(guī)定行列號(hào)的格網(wǎng)索引類的數(shù)組HL[行號(hào)][列號(hào)]。然后對(duì)格網(wǎng)進(jìn)行初始化,按行順序掃描每一個(gè)格網(wǎng),在初始化每一個(gè)格網(wǎng)時(shí),要順序掃描線類數(shù)組Array_xian和面類數(shù)組Array_mian,判斷當(dāng)前對(duì)象是否在當(dāng)前格網(wǎng)內(nèi)部,若在當(dāng)前格網(wǎng)內(nèi)部,則將當(dāng)前對(duì)象的標(biāo)志碼(即線號(hào)Xcode或面號(hào)Mcode)存放到當(dāng)前格網(wǎng)對(duì)應(yīng)的HLcode中,依次進(jìn)行,直到掃描完畢,格網(wǎng)初始化完畢。
第七;生成格網(wǎng)索引。首先要判斷當(dāng)前鼠標(biāo)點(diǎn)擊處所對(duì)應(yīng)格網(wǎng)的行列號(hào)(行號(hào)=(當(dāng)前點(diǎn)擊點(diǎn).Y-20)/20;列號(hào)=(當(dāng)前點(diǎn)擊點(diǎn).X-60)/20),然后再順序掃描當(dāng)前格網(wǎng)所存放的對(duì)象,在掃描每一個(gè)對(duì)象時(shí),都要掃描一次線類數(shù)組Array_xian和面類數(shù)組Array_mian,若當(dāng)前格網(wǎng)對(duì)象的號(hào)碼與線類或者面類數(shù)組對(duì)象的Xcode或是Mcode相同,則對(duì)線類或者是面類數(shù)組中的對(duì)象進(jìn)行顯示輸出。至此,格網(wǎng)索引完畢。
第八;建立一個(gè)定性索引的對(duì)話框,在對(duì)話框中加入一個(gè)EditBox,即文字輸入窗口,在窗口中輸入要查詢的地物名稱,點(diǎn)擊確定即可將窗口中的內(nèi)容存放到定性索引下預(yù)先定義的一個(gè)Char類型的數(shù)組Dx_shuzu中。
第九;在Doc中定義一個(gè)定性索引類型的對(duì)象Dx_dialog,然后順序掃描線類數(shù)組Array_xian,若當(dāng)前在對(duì)話框輸入的內(nèi)容與對(duì)應(yīng)的線類地物名稱匹配成功(即Strcmp(“對(duì)話框輸入內(nèi)容”,“線類地物名稱”)==0),則根據(jù)當(dāng)前線狀地物的分類代碼Xflcode,將當(dāng)前地物輸出顯示在屏幕上;順序掃描面類數(shù)組Array_mian,若在對(duì)話框中輸入的內(nèi)容與面狀地物的名稱匹配成功(即Strcmp(“對(duì)話框輸入內(nèi)容”,“面類地物名稱”)==0),則根據(jù)面狀地物的分類代碼Mflcode,將當(dāng)前面狀地物輸出顯示在屏幕上,定性索引建立完畢。
第十;求出當(dāng)前點(diǎn)擊點(diǎn)所對(duì)應(yīng)的格網(wǎng)行列號(hào),然后將當(dāng)前格網(wǎng)存放的對(duì)象一次取出,再求出當(dāng)前點(diǎn)擊點(diǎn)與每個(gè)對(duì)象的距離d,再求出d中的最小值dmin,若dmin<規(guī)定的閥值D,則拾取顯示dmin對(duì)應(yīng)的對(duì)象,否則拾取不成功。
九、注意事項(xiàng)
1.上機(jī)之前應(yīng)先做好設(shè)計(jì),以控制實(shí)驗(yàn)進(jìn)程和方向。
2.實(shí)驗(yàn)中注意總結(jié),聯(lián)系所涉及的理論知識(shí),解決所遇到的問題。
十、問題討論
1.格網(wǎng)索引建立的方法是什么?
格網(wǎng)型空間索引的基本思想是將研究區(qū)域用橫豎線條劃分大小相等和不等的格網(wǎng),記錄每一個(gè)格網(wǎng)所包含的空間實(shí)體。當(dāng)用戶進(jìn)行空間查詢時(shí),首先計(jì)算出用戶查詢對(duì)象所在格網(wǎng),然后再在該網(wǎng)格中快速查詢所選空間實(shí)體,這樣一來就大大地加速了空間索引的查詢速度。
建立格網(wǎng)索引常用的方法包括空間驅(qū)動(dòng)索引和數(shù)據(jù)驅(qū)動(dòng)索引,空間驅(qū)動(dòng)索引包括均勻格網(wǎng)索引,點(diǎn)對(duì)象的網(wǎng)格文件索引,網(wǎng)格文件索引MBB;數(shù)據(jù)驅(qū)動(dòng)索引包括R樹和R+樹索引等。
2.建立空間索引的目的是什么?
空間索引的目的是為了在地理信息系統(tǒng)中快速定位到所選中的地理對(duì)象,從而提高了空間操作的速度和效率。空間技術(shù)的優(yōu)劣直接影響GIS的整體性能,因而它是GIS的一項(xiàng)關(guān)鍵技術(shù)。建立空間索引機(jī)制的主要目的是便于空間目標(biāo)的定位及各種檢索操作。在一體化結(jié)構(gòu)中共有兩種不同類型的索引結(jié)構(gòu):一種是建立面向目標(biāo)數(shù)據(jù)(點(diǎn)和線要素?cái)?shù)據(jù))的索引結(jié)構(gòu),以便直接明確目標(biāo)與空間位置之間的二維關(guān)系;另一種是建立面向空間數(shù)據(jù)(面要素基本格網(wǎng)充填數(shù)據(jù))的索引結(jié)構(gòu),以便使其部分具有面向目標(biāo)的功能。
一、實(shí)驗(yàn)課時(shí)和類型:
學(xué)時(shí):8
實(shí)驗(yàn)類型:綜合性
二、實(shí)驗(yàn)?zāi)康模?br /> 1.認(rèn)識(shí)空間數(shù)據(jù)庫中數(shù)據(jù)的存放方式或存儲(chǔ)結(jié)構(gòu);
2.掌握空間數(shù)據(jù)庫的格網(wǎng)索引、標(biāo)題索引的建立方法;
3.理解空間索引的功能和意義;
4.加強(qiáng)學(xué)生面向?qū)ο蟪绦蛟O(shè)計(jì)的能力。
三、適用專業(yè):
地理信息系統(tǒng)專業(yè)
四、采用教材:
教材:《計(jì)算機(jī)地圖制圖》艾自興,龍毅編著 武漢大學(xué)出版社
參考書:《地圖學(xué)》 祝國瑞 編著 武漢大學(xué)出版社
五、儀器與工具:
P3以上配置計(jì)算機(jī);
VC++工具軟件;
實(shí)驗(yàn)地圖數(shù)據(jù)。
六、實(shí)驗(yàn)原理與內(nèi)容:
本次實(shí)驗(yàn)為綜合性實(shí)驗(yàn),涉及《數(shù)字地圖制圖原理》、《計(jì)算機(jī)地圖制圖原理》、《地圖數(shù)據(jù)庫》等幾門課程中所講的內(nèi)容。
七、實(shí)驗(yàn)數(shù)據(jù)說明
1、 地圖區(qū)域:武漢市
文件名:武漢實(shí)習(xí)數(shù)據(jù).usr
2、分類代碼:
代碼 名稱
30000 控制點(diǎn)
10000 圖廓點(diǎn)
10001 鐵路
10003 汽渡虛線
10004 主要道路
20001 碼頭
20002 鐵路中轉(zhuǎn)站
20003 河流、湖泊
20004 居民地
3、代碼說明:
分類代碼第一個(gè)字符為1,表示線目標(biāo);
分類代碼第二個(gè)字符為2,表示面目標(biāo)。
4、控制點(diǎn)順序:
第一點(diǎn):左上角 第二點(diǎn):右上角
第三點(diǎn):右下角 第四點(diǎn):左下角
控制點(diǎn)的理論值(人為規(guī)定x,y):
第一點(diǎn):12.50 37.40
第二點(diǎn):62.50 37.40
第三點(diǎn):62.50 82.40
采用仿射變換方法。
主要實(shí)驗(yàn)內(nèi)容:
1.讀取數(shù)據(jù)
2.仿射變換
3.繪圖顯示
4.建立定位索引——格網(wǎng)索引
5.建立定性索引——標(biāo)題索引
6.將已建立的格網(wǎng)索引用于目標(biāo)拾取功能的實(shí)現(xiàn)
7.運(yùn)用已建立的標(biāo)題索引實(shí)現(xiàn)對(duì)象的屬性查詢
八、實(shí)驗(yàn)步驟:
第一;建立一個(gè)MapOfWuhan (MFC)工程,參數(shù)缺省。
第二;建立地圖三要素:點(diǎn)、線、面。點(diǎn)類包括對(duì)應(yīng)點(diǎn)的X,Y坐標(biāo);線類包括線號(hào)(Xcode),線分類代碼(Xflcode)以及組成線的點(diǎn)號(hào)數(shù)組(m_array);面類包括面號(hào)(Mcode),面分類代碼(Mflcode)以及組成面的點(diǎn)號(hào)數(shù)組(m_array)。
第三;在讀取數(shù)據(jù)時(shí),要設(shè)計(jì)存儲(chǔ)結(jié)構(gòu)。在Doc中要建立點(diǎn)類數(shù)組Array_dian,線類數(shù)組Array_xian,面類數(shù)組Array_mian,分別存放對(duì)應(yīng)的點(diǎn)線面類目標(biāo)。一共有655組數(shù)據(jù),讀取的時(shí)候每組中的X,Y坐標(biāo)存放到預(yù)先定義的點(diǎn)類對(duì)象中,若每組的分類代碼為線類目標(biāo)的分類代碼,則把相應(yīng)的線的分類代碼存放到事先定義的線類對(duì)象的Xflcode中,把對(duì)應(yīng)的組號(hào)存放到Xcode中,把組成線的一系列點(diǎn)類對(duì)象存放到線類對(duì)象的m_array中,最后把線類對(duì)象存放到對(duì)應(yīng)的線類數(shù)組(Array_xian)中;面類也是如此。這樣,就完成了讀取存儲(chǔ),即將不同類的對(duì)象存放到不同的類數(shù)組中。
第四;對(duì)數(shù)據(jù)進(jìn)行仿射變換。選擇控制點(diǎn)中的1,2,3點(diǎn),根據(jù)這三點(diǎn)的理論值和規(guī)定其在屏幕上的輸出值求出仿射變換的未知系數(shù)a0,a1,a2,b0,b1,b2。然后,順序掃描線類數(shù)組Array_xian和 面類數(shù)組Array_mian,對(duì)不同的線類對(duì)象和面類對(duì)象的坐標(biāo)值進(jìn)行變換(X=a0*x+a1*y+a2;Y=b0*x+b1*y+b2)。
第五;當(dāng)顯示數(shù)據(jù)時(shí),為了保證面狀地物不壓蓋線狀地物,首先要對(duì)面裝地物進(jìn)行顯示,即順序掃描面類數(shù)組Array_mian,根據(jù)數(shù)組中對(duì)象分類代碼(Mflcode)的不同,將不同的對(duì)象進(jìn)行著色填充并顯示在屏幕上;然后再順序掃描線類數(shù)組Array_xian,同樣根據(jù)線分類代碼(Xflcode)的不同,對(duì)不同對(duì)象規(guī)定不同的畫筆并顯示在屏幕上。
第六;建立格網(wǎng)索引首先要建立一個(gè)索引類Csuoyin,其中包括存放經(jīng)過每個(gè)格網(wǎng)的對(duì)象的標(biāo)志號(hào)碼(即線號(hào)(Xcode)和面號(hào)(Mcode))的數(shù)組HLcode,然后再Doc中定義一個(gè)自己已規(guī)定行列號(hào)的格網(wǎng)索引類的數(shù)組HL[行號(hào)][列號(hào)]。然后對(duì)格網(wǎng)進(jìn)行初始化,按行順序掃描每一個(gè)格網(wǎng),在初始化每一個(gè)格網(wǎng)時(shí),要順序掃描線類數(shù)組Array_xian和面類數(shù)組Array_mian,判斷當(dāng)前對(duì)象是否在當(dāng)前格網(wǎng)內(nèi)部,若在當(dāng)前格網(wǎng)內(nèi)部,則將當(dāng)前對(duì)象的標(biāo)志碼(即線號(hào)Xcode或面號(hào)Mcode)存放到當(dāng)前格網(wǎng)對(duì)應(yīng)的HLcode中,依次進(jìn)行,直到掃描完畢,格網(wǎng)初始化完畢。
第七;生成格網(wǎng)索引。首先要判斷當(dāng)前鼠標(biāo)點(diǎn)擊處所對(duì)應(yīng)格網(wǎng)的行列號(hào)(行號(hào)=(當(dāng)前點(diǎn)擊點(diǎn).Y-20)/20;列號(hào)=(當(dāng)前點(diǎn)擊點(diǎn).X-60)/20),然后再順序掃描當(dāng)前格網(wǎng)所存放的對(duì)象,在掃描每一個(gè)對(duì)象時(shí),都要掃描一次線類數(shù)組Array_xian和面類數(shù)組Array_mian,若當(dāng)前格網(wǎng)對(duì)象的號(hào)碼與線類或者面類數(shù)組對(duì)象的Xcode或是Mcode相同,則對(duì)線類或者是面類數(shù)組中的對(duì)象進(jìn)行顯示輸出。至此,格網(wǎng)索引完畢。
第八;建立一個(gè)定性索引的對(duì)話框,在對(duì)話框中加入一個(gè)EditBox,即文字輸入窗口,在窗口中輸入要查詢的地物名稱,點(diǎn)擊確定即可將窗口中的內(nèi)容存放到定性索引下預(yù)先定義的一個(gè)Char類型的數(shù)組Dx_shuzu中。
第九;在Doc中定義一個(gè)定性索引類型的對(duì)象Dx_dialog,然后順序掃描線類數(shù)組Array_xian,若當(dāng)前在對(duì)話框輸入的內(nèi)容與對(duì)應(yīng)的線類地物名稱匹配成功(即Strcmp(“對(duì)話框輸入內(nèi)容”,“線類地物名稱”)==0),則根據(jù)當(dāng)前線狀地物的分類代碼Xflcode,將當(dāng)前地物輸出顯示在屏幕上;順序掃描面類數(shù)組Array_mian,若在對(duì)話框中輸入的內(nèi)容與面狀地物的名稱匹配成功(即Strcmp(“對(duì)話框輸入內(nèi)容”,“面類地物名稱”)==0),則根據(jù)面狀地物的分類代碼Mflcode,將當(dāng)前面狀地物輸出顯示在屏幕上,定性索引建立完畢。
第十;求出當(dāng)前點(diǎn)擊點(diǎn)所對(duì)應(yīng)的格網(wǎng)行列號(hào),然后將當(dāng)前格網(wǎng)存放的對(duì)象一次取出,再求出當(dāng)前點(diǎn)擊點(diǎn)與每個(gè)對(duì)象的距離d,再求出d中的最小值dmin,若dmin<規(guī)定的閥值D,則拾取顯示dmin對(duì)應(yīng)的對(duì)象,否則拾取不成功。
九、注意事項(xiàng)
1.上機(jī)之前應(yīng)先做好設(shè)計(jì),以控制實(shí)驗(yàn)進(jìn)程和方向。
2.實(shí)驗(yàn)中注意總結(jié),聯(lián)系所涉及的理論知識(shí),解決所遇到的問題。
十、問題討論
1.格網(wǎng)索引建立的方法是什么?
格網(wǎng)型空間索引的基本思想是將研究區(qū)域用橫豎線條劃分大小相等和不等的格網(wǎng),記錄每一個(gè)格網(wǎng)所包含的空間實(shí)體。當(dāng)用戶進(jìn)行空間查詢時(shí),首先計(jì)算出用戶查詢對(duì)象所在格網(wǎng),然后再在該網(wǎng)格中快速查詢所選空間實(shí)體,這樣一來就大大地加速了空間索引的查詢速度。
建立格網(wǎng)索引常用的方法包括空間驅(qū)動(dòng)索引和數(shù)據(jù)驅(qū)動(dòng)索引,空間驅(qū)動(dòng)索引包括均勻格網(wǎng)索引,點(diǎn)對(duì)象的網(wǎng)格文件索引,網(wǎng)格文件索引MBB;數(shù)據(jù)驅(qū)動(dòng)索引包括R樹和R+樹索引等。
2.建立空間索引的目的是什么?
空間索引的目的是為了在地理信息系統(tǒng)中快速定位到所選中的地理對(duì)象,從而提高了空間操作的速度和效率。空間技術(shù)的優(yōu)劣直接影響GIS的整體性能,因而它是GIS的一項(xiàng)關(guān)鍵技術(shù)。建立空間索引機(jī)制的主要目的是便于空間目標(biāo)的定位及各種檢索操作。在一體化結(jié)構(gòu)中共有兩種不同類型的索引結(jié)構(gòu):一種是建立面向目標(biāo)數(shù)據(jù)(點(diǎn)和線要素?cái)?shù)據(jù))的索引結(jié)構(gòu),以便直接明確目標(biāo)與空間位置之間的二維關(guān)系;另一種是建立面向空間數(shù)據(jù)(面要素基本格網(wǎng)充填數(shù)據(jù))的索引結(jié)構(gòu),以便使其部分具有面向目標(biāo)的功能。