一種空間數(shù)據(jù)庫(kù)中排序反向輪廓查詢方法
【專利摘要】本發(fā)明公開了一種空間數(shù)據(jù)庫(kù)中排序反向輪廓查詢方法。選用了廣泛使用的R樹對(duì)查詢集建立索引;在此基礎(chǔ)上本發(fā)明首先開發(fā)了排序反向輪廓過濾引擎,得到最終結(jié)果的一個(gè)上限;接著開發(fā)了開發(fā)基于動(dòng)態(tài)輪廓裁剪和全局輪廓裁剪的排序反向輪廓裁剪引擎,來(lái)消除其中錯(cuò)誤的命中;最后開發(fā)了排序引擎對(duì)查詢結(jié)果進(jìn)行合并,并按順序得到最終的查詢結(jié)果。
【專利說明】一種空間數(shù)據(jù)庫(kù)中排序反向輪廓查詢方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)庫(kù)的索引與查詢技術(shù),特別是一種空間數(shù)據(jù)庫(kù)中排序反向輪廓查詢方法。
【背景技術(shù)】
[0002]空間數(shù)據(jù)庫(kù)系統(tǒng)是描述、存儲(chǔ)和處理空間數(shù)據(jù)及其屬性數(shù)據(jù)的數(shù)據(jù)庫(kù)系統(tǒng)??臻g數(shù)據(jù)庫(kù)是隨著地理信息系統(tǒng)的開發(fā)和應(yīng)用而發(fā)展起來(lái)的數(shù)據(jù)庫(kù)新技術(shù)。它并不是獨(dú)立存在的系統(tǒng),而是與應(yīng)用緊密結(jié)合,通常是地理信息系統(tǒng)的核心??臻g數(shù)據(jù)庫(kù)的主要任務(wù)是研究空間物體的數(shù)據(jù)表示方法、數(shù)據(jù)模型以及數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)和建立空間索引的方法,如何以最小代價(jià)高效地存儲(chǔ)和處理空間數(shù)據(jù),正確維護(hù)空間數(shù)據(jù)的現(xiàn)實(shí)性、一致性和完整性,為用戶提供現(xiàn)實(shí)性好、準(zhǔn)確性高、完備、開放和易用的空間數(shù)據(jù)管理。
[0003]為了快速、有效地處理存儲(chǔ)于空間數(shù)據(jù)庫(kù)中的海量空間數(shù)據(jù),專家學(xué)者提出了大量的基于磁盤的空間索引方法。其中在1984年由Guttman提出的R樹是目前最流行的動(dòng)態(tài)空間索引結(jié)構(gòu),廣泛應(yīng)用于學(xué)術(shù)研究和商業(yè)應(yīng)用中。R樹是一種完全動(dòng)態(tài)的空間索引結(jié)構(gòu)。插入、刪除和查詢可以同時(shí)進(jìn)行,并且不需要周期性的索引重組。R樹由中間結(jié)點(diǎn)和葉結(jié)點(diǎn)組成。葉結(jié)點(diǎn)存儲(chǔ)的是實(shí)際空間對(duì)象的最小邊界矩形(MBR)而不是實(shí)際的空間對(duì)象。
[0004]空間數(shù)據(jù)庫(kù)中,輪廓查詢及其變體已經(jīng)被許多專家學(xué)者們廣泛研究,譬如度量空間下的輪廓查詢、數(shù)據(jù)流上的輪廓查詢、不完整數(shù)據(jù)上的輪廓查詢等。反向輪廓查詢是一種重要的輪廓查詢變體。一些學(xué)者也在不同的環(huán)境中對(duì)它進(jìn)行了研究,如不確定數(shù)據(jù)集上的反向輪廓查詢,無(wú)線傳感器網(wǎng)絡(luò)中的反向輪廓查詢等。
[0005]傳統(tǒng)的反向輪廓查詢返回的是所有的結(jié)果,并且默認(rèn)用戶對(duì)所有屬性的喜愛程度都是一樣的。但在現(xiàn)實(shí)情況中,用戶可能對(duì)不同的屬性有不同的喜愛程度。因此,在做選擇的過程中可能會(huì)更注重某些屬性。此外,當(dāng)反向輪廓查詢返回的結(jié)果很大時(shí),他們可能只需要那些排名靠前的k個(gè)反向輪廓點(diǎn),而不是全部。然而,傳統(tǒng)的反向輪廓查詢都不能滿足用戶的這些真實(shí)需求。
【發(fā)明內(nèi)容】
[0006]本發(fā)明的目的在于提供一種空間數(shù)據(jù)庫(kù)中排序反向輪廓查詢方法。
[0007]本發(fā)明解決其技術(shù)問題采用技術(shù)方案的步驟如下:
[0008]步驟(I):選擇數(shù)據(jù)庫(kù)管理系統(tǒng),并開發(fā)一個(gè)空間數(shù)據(jù)庫(kù)引擎,選用空間數(shù)據(jù)庫(kù)索引技術(shù);
[0009]步驟(2):開發(fā)排序反向輪廓查詢過濾引擎;
[0010]步驟(3):開發(fā)基于動(dòng)態(tài)輪廓裁剪和全局輪廓裁剪的排序反向輪廓查詢裁剪引擎,消除步驟(3)中得到的一些不是最終結(jié)果的對(duì)象;
[0011]步驟(4):開發(fā)排序引擎對(duì)查詢結(jié)果進(jìn)行合并,并按順序得到最終的查詢結(jié)果。
[0012]所述的步驟(I)中選用的數(shù)據(jù)庫(kù)管理系統(tǒng)平臺(tái)支持基本的SQL查詢;空間數(shù)據(jù)庫(kù)引擎是構(gòu)建在應(yīng)用層和數(shù)據(jù)庫(kù)層之間的一種中間件,它必須與選用的數(shù)據(jù)庫(kù)管理系統(tǒng)相互配合;空間數(shù)據(jù)庫(kù)索引選用R樹。
[0013]所述的步驟(2)中的排序反向輪廓查詢過濾引擎,主要是得到排序反向輪廓的一個(gè)候選集,即第一層全局輪廓;此外,該步驟還需求得第二層全局輪廓,以便在步驟(3)中用來(lái)裁剪,計(jì)算第一層全局輪廓和第二層全局輪廓的算法如下:
[0014]2.1)初始化一個(gè)最小堆,并將根結(jié)點(diǎn)放入堆,該最小堆根據(jù)用戶給定的距離計(jì)算方式所計(jì)算的值進(jìn)行排序;初始化兩個(gè)對(duì)象集合,一個(gè)用來(lái)保存第一層全局輪廓,另外一個(gè)用來(lái)保存第二層全局輪廓;
[0015]2.2)如果最小堆為空,則過濾算法結(jié)束,返回兩個(gè)對(duì)象集合,即第一層和第二層全局輪廓;否則取出堆頂元素;
[0016]2.3)判斷取出的堆頂元素被已經(jīng)找到的第一層和第二層全局輪廓點(diǎn)所全局控制的次數(shù)。對(duì)于R樹索引結(jié)點(diǎn)被全局控制的次數(shù),需分兩種情況考慮:
[0017]a)該結(jié)點(diǎn)是中間索引結(jié)點(diǎn),這種狀況下根據(jù)其被全局控制的次數(shù)分為兩種:
[0018]i)該中間結(jié)點(diǎn)最多只被一個(gè)第一層全局輪廓點(diǎn)所全局控制,那么對(duì)于其下的索引孩子結(jié)點(diǎn)都加入到最小堆中,并跳到2.2)。
[0019]ii)該中間結(jié)點(diǎn)被第一層全局輪廓點(diǎn)所全局控制的次數(shù)大于1,那么對(duì)于其下的索引孩子結(jié)點(diǎn)不做任何操作,并跳到2.2)。
[0020]b)該結(jié)點(diǎn)是數(shù)據(jù)索引結(jié)點(diǎn),這種狀況下根據(jù)其被全局控制的次數(shù)分為三種情況:
[0021]i)該數(shù)據(jù)結(jié)點(diǎn)沒有被任何一個(gè)已找到的全局輪廓點(diǎn)所全局控制,那么將該數(shù)據(jù)索引結(jié)點(diǎn)加入到第一層全局輪廓結(jié)果列表中并跳到2.2)。
[0022]ii)該數(shù)據(jù)結(jié)點(diǎn)被一個(gè)已找到的第一層和第二層全局輪廓點(diǎn)所全局控制,那么將該數(shù)據(jù)索引結(jié)點(diǎn)加入到第二層全局輪廓結(jié)果列表中并跳到2.2)。
[0023]iii)該數(shù)據(jù)結(jié)點(diǎn)被已找到的第一層和第二層全局輪廓點(diǎn)所全局控制的次數(shù)大于1,那么對(duì)于該數(shù)據(jù)索引結(jié)點(diǎn)不做任何操作,并跳到2.2)。
[0024]所述的步驟(3)中的基于動(dòng)態(tài)輪廓裁剪和全局輪廓裁剪的排序反向輪廓查詢裁剪引擎,首先利用預(yù)處理保存的動(dòng)態(tài)輪廓進(jìn)行裁剪,再利用全局輪廓進(jìn)行進(jìn)一步裁剪;基于動(dòng)態(tài)輪廓精煉的算法如下:
[0025]i)初始化兩個(gè)對(duì)象集合,一個(gè)用來(lái)保存最終結(jié)果,另一個(gè)用來(lái)保存的是無(wú)法判斷的對(duì)象;
[0026]ii)取出一個(gè)第一層全局輪廓點(diǎn),計(jì)算出該點(diǎn)的窗口,進(jìn)行下一步精煉;全局輪廓點(diǎn)的窗口中心點(diǎn)是全局輪廓點(diǎn),查詢點(diǎn)q則是該窗口的一個(gè)頂點(diǎn)。如果所有第一層全局輪廓都已經(jīng)精煉完,則算法結(jié)束;如果找到的反向輪廓的個(gè)數(shù)已經(jīng)達(dá)到用戶指定的要求,則算法也結(jié)束;否則,算法繼續(xù)操作;
[0027]iii)從預(yù)處理結(jié)果中找到該全局輪廓點(diǎn)對(duì)應(yīng)的動(dòng)態(tài)輪廓,如果查詢點(diǎn)落在動(dòng)態(tài)輪廓的動(dòng)態(tài)控制區(qū)域中,那么該全局輪廓點(diǎn)不是最終結(jié)果,并跳到ii);如果查詢點(diǎn)落在動(dòng)態(tài)非控制區(qū)域中,那么該全局輪廓點(diǎn)是最終結(jié)果,把該點(diǎn)加到最終結(jié)果的集合中并跳到ii);查詢點(diǎn)既不在動(dòng)態(tài)控制區(qū)域中,也不在動(dòng)態(tài)非控制區(qū)域中,那么該步驟無(wú)法判斷該全局輪廓點(diǎn)是否為最終結(jié)果,加入到無(wú)法判斷的對(duì)象集合中并跳到ii)。
[0028]基于全局輪廓裁剪的算法如下:[0029]a)初始化一個(gè)對(duì)象集合,用來(lái)保存最終結(jié)果;
[0030]b)取出無(wú)法用動(dòng)態(tài)輪廓判斷的一個(gè)全局輪廓點(diǎn),計(jì)算出該點(diǎn)的窗口,進(jìn)行下一步精煉;窗口的計(jì)算方法同上面一樣。如果所有的對(duì)象都已經(jīng)精煉完,則算法結(jié)束;如果找到的反向輪廓的個(gè)數(shù)已經(jīng)達(dá)到用戶指定的要求,則算法也結(jié)束;否則,繼續(xù)操作;
[0031]c)遍歷第一層全局輪廓點(diǎn),如果該窗口包含其它第一層全局輪廓點(diǎn),那么該點(diǎn)不是最終結(jié)果并且跳轉(zhuǎn)到b);
[0032]d)遍歷第二層全局輪廓點(diǎn),如果該窗口包含其它第二層全局輪廓點(diǎn),那么該點(diǎn)不是最終結(jié)果;否則該點(diǎn)是最終結(jié)果,加入到最終結(jié)果對(duì)象集合;跳轉(zhuǎn)到b)。
[0033]所述的步驟(4)的排序引擎是將步驟(3)中得到的結(jié)果進(jìn)行合并,并根據(jù)每個(gè)點(diǎn)的值進(jìn)行排序得到最終的查詢結(jié)果。
[0034]本發(fā)明具有的有益效果是:
[0035]本發(fā)明充分利用了空間數(shù)據(jù)庫(kù)中現(xiàn)有索引技術(shù)、輪廓查詢技術(shù)和反向輪廓查詢技術(shù),能根據(jù)用戶對(duì)查詢對(duì)象屬性偏好,返回用戶指定個(gè)數(shù)的最好的反向輪廓對(duì)象,并且提供了最佳I/o性能和CPU性能。
【專利附圖】
【附圖說明】
[0036]圖1是本發(fā)明的實(shí)施步驟流程圖。
[0037]圖2為排序反向輪廓查詢系統(tǒng)的工作原理示意圖。
【具體實(shí)施方式】
[0038]現(xiàn)結(jié)合附圖和具體實(shí)施對(duì)本發(fā)明的技術(shù)方案作進(jìn)一步說明:
[0039]如圖1,圖2所示,本發(fā)明具體實(shí)施過程和工作原理步驟如下:
[0040]步驟(I):選擇數(shù)據(jù)庫(kù)管理系統(tǒng),并開發(fā)一個(gè)空間數(shù)據(jù)庫(kù)引擎,選用空間數(shù)據(jù)庫(kù)索引技術(shù);
[0041]步驟(2):開發(fā)排序反向輪廓查詢過濾引擎;
[0042]步驟(3):開發(fā)基于動(dòng)態(tài)輪廓裁剪和全局輪廓裁剪的排序反向輪廓查詢裁剪引擎,消除步驟(3)中得到的一些不是最終結(jié)果的對(duì)象;
[0043]步驟(4):開發(fā)排序引擎對(duì)查詢結(jié)果進(jìn)行合并,并按順序得到最終的查詢結(jié)果。
[0044]步驟(I)中選用的數(shù)據(jù)庫(kù)管理系統(tǒng)平臺(tái)支持基本的SQL查詢;空間數(shù)據(jù)庫(kù)引擎是構(gòu)建在應(yīng)用層和數(shù)據(jù)庫(kù)層之間的一種中間件,它必須與選用的數(shù)據(jù)庫(kù)管理系統(tǒng)相互配合,對(duì)應(yīng)圖2中的排序反向輪廓查詢引擎;空間數(shù)據(jù)庫(kù)索引選用R樹,對(duì)應(yīng)圖2中的空間數(shù)據(jù)庫(kù)索引。
[0045]步驟(2)中的排序反向輪廓查詢過濾引擎,主要是得到排序反向輪廓的一個(gè)候選集,即第一層全局輪廓;此外,該步驟還需求得第二層全局輪廓,以便在步驟(3)中用來(lái)裁剪;在圖2中對(duì)應(yīng)排序反向輪廓過濾引擎;計(jì)算第一層全局輪廓和第二層全局輪廓的算法如下:
[0046]2.1)初始化一個(gè)最小堆,并將根結(jié)點(diǎn)放入堆,該最小堆根據(jù)用戶給定的距離計(jì)算方式所計(jì)算的值進(jìn)行排序;初始化兩個(gè)對(duì)象集合,一個(gè)用來(lái)保存第一層全局輪廓,另外一個(gè)用來(lái)保存第二層全局輪廓;[0047]2.2)如果最小堆為空,則過濾算法結(jié)束,返回兩個(gè)對(duì)象集合,即第一層和第二層全局輪廓;否則取出堆頂元素;
[0048]2.3)判斷取出的堆頂元素被已經(jīng)找到的第一層和第二層全局輪廓點(diǎn)所全局控制的次數(shù)。對(duì)于R樹索引結(jié)點(diǎn)被全局控制的次數(shù),需分兩種情況考慮:
[0049]a)該結(jié)點(diǎn)是中間索引結(jié)點(diǎn),這種狀況下根據(jù)其被全局控制的次數(shù)分為兩種:
[0050]i)該中間結(jié)點(diǎn)最多只被一個(gè)第一層全局輪廓點(diǎn)所全局控制,那么對(duì)于其下的索引孩子結(jié)點(diǎn)都加入到最小堆中,并跳到2.2)。
[0051]ii)該中間結(jié)點(diǎn)被第一層全局輪廓點(diǎn)所全局控制的次數(shù)大于1,那么對(duì)于其下的索引孩子結(jié)點(diǎn)不做任何操作,并跳到2.2)。
[0052]b)該結(jié)點(diǎn)是數(shù)據(jù)索引結(jié)點(diǎn),這種狀況下根據(jù)其被全局控制的次數(shù)分為三種情況:
[0053]i)該數(shù)據(jù)結(jié)點(diǎn)沒有被任何一個(gè)已找到的全局輪廓點(diǎn)所全局控制,那么將該數(shù)據(jù)索引結(jié)點(diǎn)加入到第一層全局輪廓結(jié)果列表中并跳到2.2)。
[0054]ii)該數(shù)據(jù)結(jié)點(diǎn)被一個(gè)已找到的第一層和第二層全局輪廓點(diǎn)所全局控制,那么將該數(shù)據(jù)索引結(jié)點(diǎn)加入到第二層全局輪廓結(jié)果列表中并跳到2.2)。
[0055]iii)該數(shù)據(jù)結(jié)點(diǎn)被已找到的第一層和第二層全局輪廓點(diǎn)所全局控制的次數(shù)大于1,那么對(duì)于該數(shù)據(jù)索引結(jié)點(diǎn)不做任何操作,并跳到2.2)。
[0056]步驟(3)中的基于動(dòng)態(tài)輪廓裁剪和全局輪廓裁剪的排序反向輪廓查詢裁剪引擎,首先利用預(yù)處理保存的動(dòng)態(tài)輪廓進(jìn)行裁剪,再利用全局輪廓進(jìn)行進(jìn)一步裁剪;其中基于動(dòng)態(tài)輪廓精煉部分對(duì)應(yīng)于圖2中的動(dòng)態(tài)輪廓裁剪引擎,其算法如下:
[0057]i)初始化兩個(gè)對(duì)象集合,一個(gè)用來(lái)保存最終結(jié)果,另一個(gè)用來(lái)保存的是無(wú)法判斷的對(duì)象;
[0058]ii)取出一個(gè)第一層全局輪廓點(diǎn),計(jì)算出該點(diǎn)的窗口,進(jìn)行下一步精煉;全局輪廓點(diǎn)的窗口中心點(diǎn)是全局輪廓點(diǎn),查詢點(diǎn)q則是該窗口的一個(gè)頂點(diǎn)。如果所有第一層全局輪廓都已經(jīng)精煉完,則算法結(jié)束;如果找到的反向輪廓的個(gè)數(shù)已經(jīng)達(dá)到用戶指定的要求,則算法也結(jié)束;否則,算法繼續(xù)操作;
[0059]iii)從預(yù)處理結(jié)果中找到該全局輪廓點(diǎn)對(duì)應(yīng)的動(dòng)態(tài)輪廓,如果查詢點(diǎn)落在動(dòng)態(tài)輪廓的動(dòng)態(tài)控制區(qū)域中,那么該全局輪廓點(diǎn)不是最終結(jié)果,并跳到ii);如果查詢點(diǎn)落在動(dòng)態(tài)非控制區(qū)域中,那么該全局輪廓點(diǎn)是最終結(jié)果,把該點(diǎn)加到最終結(jié)果的集合中并跳到ii);查詢點(diǎn)既不在動(dòng)態(tài)控制區(qū)域中,也不在動(dòng)態(tài)非控制區(qū)域中,那么該步驟無(wú)法判斷該全局輪廓點(diǎn)是否為最終結(jié)果,加入到無(wú)法判斷的對(duì)象集合中并跳到ii)。
[0060]另外,基于全局輪廓裁剪部分對(duì)應(yīng)于圖2中的全局輪廓裁剪引擎,其算法如下:
[0061]a)初始化一個(gè)對(duì)象集合,用來(lái)保存最終結(jié)果;
[0062]b)取出無(wú)法用動(dòng)態(tài)輪廓判斷的一個(gè)全局輪廓點(diǎn),計(jì)算出該點(diǎn)的窗口,進(jìn)行下一步精煉;窗口的計(jì)算方法同上面一樣。如果所有的對(duì)象都已經(jīng)精煉完,則算法結(jié)束;如果找到的反向輪廓的個(gè)數(shù)已經(jīng)達(dá)到用戶指定的要求,則算法也結(jié)束;否則,繼續(xù)操作;
[0063]c)遍歷第一層全局輪廓點(diǎn),如果該窗口包含其它第一層全局輪廓點(diǎn),那么該點(diǎn)不是最終結(jié)果并且跳轉(zhuǎn)到b);
[0064]d)遍歷第二層全局輪廓點(diǎn),如果該窗口包含其它第二層全局輪廓點(diǎn),那么該點(diǎn)不是最終結(jié)果;否則該點(diǎn)是最終結(jié)果,加入到最終結(jié)果對(duì)象集合;跳轉(zhuǎn)到b)。[0065] 步驟(4)的排序引擎是將步驟(3)中得到的結(jié)果進(jìn)行合并,并根據(jù)每個(gè)點(diǎn)的值進(jìn)行排序得到最終的查詢結(jié)果,對(duì)應(yīng)于圖2中的排序引擎。
【權(quán)利要求】
1.一種空間數(shù)據(jù)庫(kù)中排序反向輪廓查詢方法:其特征在于該方法的步驟如下: 步驟(1):選擇數(shù)據(jù)庫(kù)管理系統(tǒng),并開發(fā)一個(gè)空間數(shù)據(jù)庫(kù)引擎,選用空間數(shù)據(jù)庫(kù)索引技術(shù); 步驟(2):開發(fā)排序反向輪廓查詢過濾引擎; 步驟(3):開發(fā)基于動(dòng)態(tài)輪廓裁剪和全局輪廓裁剪的排序反向輪廓查詢裁剪引擎,消除步驟(3)中得到的一些不是最終結(jié)果的對(duì)象; 步驟(4):開發(fā)排序引擎對(duì)查詢結(jié)果進(jìn)行合并,并按順序得到最終的查詢結(jié)果。
2.根據(jù)權(quán)利要求1所述的一種空間數(shù)據(jù)庫(kù)中排序反向輪廓查詢方法,其特征在于:所述的步驟(1)中選用的數(shù)據(jù)庫(kù)管理系統(tǒng)平臺(tái)支持基本的SQL查詢;空間數(shù)據(jù)庫(kù)引擎是構(gòu)建在應(yīng)用層和數(shù)據(jù)庫(kù)層之間的中間件,所述的中間件與選用的數(shù)據(jù)庫(kù)管理系統(tǒng)相互配合;空間數(shù)據(jù)庫(kù)索引選用R樹。
3.根據(jù)權(quán)利要求1所述的一種空間數(shù)據(jù)庫(kù)中排序反向輪廓查詢方法,其特征在于:所述的步驟(2)中的排序反向輪廓查詢過濾引擎,主要是得到排序反向輪廓的一個(gè)候選集,SP第一層全局輪廓;此外,該步驟還需求得第二層全局輪廓,以便在步驟(3)中用來(lái)裁剪,計(jì)算第一層全局輪廓和第二層全局輪廓的算法如下: 2.1)初始化一個(gè)最小堆,并將根結(jié)點(diǎn)放入堆,該最小堆根據(jù)用戶給定的距離計(jì)算方式所計(jì)算的值進(jìn)行排序;初始化兩個(gè)對(duì)象集合,一個(gè)用來(lái)保存第一層全局輪廓,另外一個(gè)用來(lái)保存第二層全局輪廓; 2.2)如果最小堆為空,則過濾算法結(jié)束,返回兩個(gè)對(duì)象集合,即第一層和第二層全局輪廓;否則取出堆頂元素; 2.3)判斷取出的堆頂元素被已經(jīng)找到的第一層和第二層全局輪廓點(diǎn)所全局控制的次數(shù);對(duì)于R樹索引結(jié)點(diǎn)被全局控制的次數(shù),需分兩種情況考慮: a)該結(jié)點(diǎn)是中間索引結(jié)點(diǎn),這種狀況下根據(jù)其被全局控制的次數(shù)分為兩種: i)該中間結(jié)點(diǎn)最多只被一個(gè)第一層全局輪廓點(diǎn)所全局控制,那么對(duì)于其下的索引孩子結(jié)點(diǎn)都加入到最小堆中,并跳到2.2); ii)該中間結(jié)點(diǎn)被第一層全局輪廓點(diǎn)所全局控制的次數(shù)大于1,那么對(duì)于其下的索引孩子結(jié)點(diǎn)不做任何操作,并跳到2.2); b)該結(jié)點(diǎn)是數(shù)據(jù)索引結(jié)點(diǎn),這種狀況下根據(jù)其被全局控制的次數(shù)分為三種情況: i)該數(shù)據(jù)結(jié)點(diǎn)沒有被任何一個(gè)已找到的全局輪廓點(diǎn)所全局控制,那么將該數(shù)據(jù)索引結(jié)點(diǎn)加入到第一層全局輪廓結(jié)果列表中并跳到2.2); ii)該數(shù)據(jù)結(jié)點(diǎn)被一個(gè)已找到的第一層和第二層全局輪廓點(diǎn)所全局控制,那么將該數(shù)據(jù)索引結(jié)點(diǎn)加入到第二層全局輪廓結(jié)果列表中并跳到2.2); iii)該數(shù)據(jù)結(jié)點(diǎn)被已找到的第一層和第二層全局輪廓點(diǎn)所全局控制的次數(shù)大于1,那么對(duì)于該數(shù)據(jù)索引結(jié)點(diǎn)不做任何操作,并跳到2.2)。
4.根據(jù)權(quán)利要求1所述的一種空間數(shù)據(jù)庫(kù)中排序反向輪廓查詢方法,其特征在于:所述的步驟(3)中的基于動(dòng)態(tài)輪廓裁剪和全局輪廓裁剪的排序反向輪廓查詢裁剪引擎,首先利用預(yù)處理保存的動(dòng)態(tài)輪廓進(jìn)行裁剪,再利用全局輪廓進(jìn)行進(jìn)一步裁剪;基于動(dòng)態(tài)輪廓精煉的算法如下: i)初始化兩個(gè)對(duì)象集合,一個(gè)用來(lái)保存最終結(jié)果,另一個(gè)用來(lái)保存的是無(wú)法判斷的對(duì)象; ii)取出一個(gè)第一層全局輪廓點(diǎn),計(jì)算出該點(diǎn)的窗口,進(jìn)行下一步精煉;全局輪廓點(diǎn)的窗口中心點(diǎn)是全局輪廓點(diǎn),查詢點(diǎn)q則是該窗口的一個(gè)頂點(diǎn);如果所有第一層全局輪廓都已經(jīng)精煉完,則算法結(jié)束;如果找到的反向輪廓的個(gè)數(shù)已經(jīng)達(dá)到用戶指定的要求,則算法也結(jié)束;否則,算法繼續(xù)操作; iii)從預(yù)處理結(jié)果中找到該全局輪廓點(diǎn)對(duì)應(yīng)的動(dòng)態(tài)輪廓,如果查詢點(diǎn)落在動(dòng)態(tài)輪廓的動(dòng)態(tài)控制區(qū)域中,那么該全局輪廓點(diǎn)不是最終結(jié)果,并跳到ii);如果查詢點(diǎn)落在動(dòng)態(tài)非控制區(qū)域中,那么該全局輪廓點(diǎn)是最終結(jié)果,把該點(diǎn)加到最終結(jié)果的集合中并跳到ii);查詢點(diǎn)既不在動(dòng)態(tài)控制區(qū)域中,也不在動(dòng)態(tài)非控制區(qū)域中,那么該步驟無(wú)法判斷該全局輪廓點(diǎn)是否為最終結(jié)果,加入到無(wú)法判斷的對(duì)象集合中并跳到ii); 基于全局輪廓裁剪的算法如下: a)初始化一個(gè)對(duì)象集合,用來(lái)保存最終結(jié)果; b)取出無(wú)法用動(dòng)態(tài)輪廓判斷的一個(gè)全局輪廓點(diǎn),計(jì)算出該點(diǎn)的窗口,進(jìn)行下一步精煉;窗口的計(jì)算方法同上面一樣。如果所有的對(duì)象都已經(jīng)精煉完,則算法結(jié)束;如果找到的反向輪廓的個(gè)數(shù)已經(jīng)達(dá)到用戶指定的要求,則算法也結(jié)束;否則,繼續(xù)操作; c)遍歷第一層全局輪廓點(diǎn),如果該窗口包含其它第一層全局輪廓點(diǎn),那么該點(diǎn)不是最終結(jié)果并且跳轉(zhuǎn)到b); d)遍歷第二層全局輪廓點(diǎn),如果該窗口包含其它第二層全局輪廓點(diǎn),那么該點(diǎn)不是最終結(jié)果;否則該點(diǎn)是最 終結(jié)果,加入到最終結(jié)果對(duì)象集合;跳轉(zhuǎn)到b)。
5.根據(jù)權(quán)利要求1所述的一種空間數(shù)據(jù)庫(kù)中排序反向輪廓查詢方法,其特征在于:所述的步驟(4)的排序引擎是將步驟(3)中得到的結(jié)果進(jìn)行合并,并根據(jù)每個(gè)點(diǎn)的值進(jìn)行排序得到最終的查詢結(jié)果。
【文檔編號(hào)】G06F17/30GK103778195SQ201410007280
【公開日】2014年5月7日 申請(qǐng)日期:2014年1月7日 優(yōu)先權(quán)日:2014年1月7日
【發(fā)明者】高云君, 柳晴, 陳璐, 苗曉曄, 趙靖文, 李信晗 申請(qǐng)人:浙江大學(xué)