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