專利名稱:基于凸性的多點(diǎn)遠(yuǎn)鄰查詢方法
技術(shù)領(lǐng)域:
本發(fā)明涉及空間數(shù)據(jù)庫的索引技術(shù)與查詢技術(shù),特別是涉及一種基于凸性的多點(diǎn) 遠(yuǎn)鄰查詢方法。
背景技術(shù):
空間數(shù)據(jù)庫通?;谕ㄓ脭?shù)據(jù)庫管理系統(tǒng)(DBMS)來構(gòu)建。不同的空間數(shù)據(jù)庫 系統(tǒng)實(shí)現(xiàn)時選取的DBMS平臺、操作系統(tǒng)平臺不盡相同??臻g數(shù)據(jù)庫引擎(Spatial Data Engine, SDE)是以屏蔽操作系統(tǒng)和數(shù)據(jù)庫管理系統(tǒng)差異為目的,構(gòu)建在應(yīng)用層和數(shù)據(jù)庫層 之間基于高效空間搜索函數(shù)使用空間數(shù)據(jù)的數(shù)據(jù)訪問中間件,是向應(yīng)用層提供數(shù)據(jù)存儲、 高效檢索、數(shù)據(jù)管理、網(wǎng)絡(luò)通信、事務(wù)處理和簡單數(shù)據(jù)處理功能的程序集合。通過在數(shù)據(jù)庫 層和應(yīng)用層之間增加SDE層,空間數(shù)據(jù)可供不同客戶端高效地共享和互操作,滿足特定領(lǐng) 域空間數(shù)據(jù)管理、訪問及應(yīng)用要求。目前,國內(nèi)外在空間數(shù)據(jù)庫引擎方面進(jìn)行深入研究并形 成軟件產(chǎn)品的有 ESRI 的 ArcSDE,Maplnfo 的 SpatialWare,Oracle 的 Spatial,IBM DB2 的 Spatial Extender 和 IBM Imfonnix 的 Data-Blade,超圖的 SuperMapSDX+ 以及 MySQL 的 Spatial Extensions 等。在所有空間數(shù)據(jù)庫的索引技術(shù)中,R樹索引以及它的變種因?yàn)楹唵我子煤陀行?而應(yīng)用最為廣泛。直觀上而言,R樹索引是Β-tree在高維空間的擴(kuò)展??臻g上位置相近的 數(shù)據(jù)點(diǎn)被聚類到最小包圍盒里,這些最小包圍盒又根據(jù)空間局部性遞歸的進(jìn)行聚類,直到 到達(dá)根節(jié)點(diǎn)。R樹索引上有三個距離經(jīng)常被用到最小距離,最大距離和最小最大距離??臻g數(shù)據(jù)庫上的查詢方法多種多樣,其中最常見的就是近鄰查詢。近鄰查詢通常 依照深度優(yōu)先或最好優(yōu)先的策略對R樹索引進(jìn)行訪問,其中最好優(yōu)先的策略在IO消耗上是 最優(yōu)的。最近在近鄰查詢的基礎(chǔ)上衍生出了多點(diǎn)近鄰查詢,并且應(yīng)用到了道路網(wǎng)絡(luò)上面。雖然空間數(shù)據(jù)庫系統(tǒng)發(fā)展日趨完善,但是現(xiàn)有的空間數(shù)據(jù)庫查詢方法不能處理多 點(diǎn)遠(yuǎn)鄰的查詢需求。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種基于凸性的多點(diǎn)遠(yuǎn)鄰查詢的方法。本發(fā)明解決其技術(shù)問題采用技術(shù)方案的的步驟如下步驟1)根據(jù)用戶對建索引性能、查詢性能和數(shù)據(jù)實(shí)時性的要求選用一個DBMS平 臺;步驟2)開發(fā)一個空間數(shù)據(jù)庫引擎實(shí)現(xiàn)與上述步驟1)中選用的DBMS平臺的交互, 并選用空間數(shù)據(jù)庫索引技術(shù);步驟3)開發(fā)一個適用于多點(diǎn)遠(yuǎn)鄰查詢方法的凸性距離函數(shù)引擎;步驟4)在步驟2)構(gòu)建的空間數(shù)據(jù)庫和步驟3)構(gòu)建的凸性距離函數(shù)引擎上實(shí)現(xiàn) 多點(diǎn)遠(yuǎn)鄰查詢處理引擎,多點(diǎn)遠(yuǎn)鄰查詢包括最小界定的多點(diǎn)遠(yuǎn)鄰查詢方法,最好優(yōu)先的多 點(diǎn)遠(yuǎn)鄰查詢方法和基于凸包的多點(diǎn)遠(yuǎn)鄰查詢方法;
步驟5)開發(fā)一個多點(diǎn)遠(yuǎn)鄰查詢優(yōu)化引擎,根據(jù)查詢特征智能的選擇步驟4)中合 適的多點(diǎn)遠(yuǎn)鄰查詢方法進(jìn)行查詢處理。步驟1)中選用的DBMS平臺應(yīng)支持基本的SQL查詢,現(xiàn)有大多數(shù)DBMS平臺都滿足 這一需求,根據(jù)應(yīng)用需求從中選取,如1)若應(yīng)用要求高的查詢性能,選用Oracle ;2)若應(yīng)用要求簡單易用,選用MySQL。步驟2)中的空間數(shù)據(jù)庫引擎是構(gòu)建在應(yīng)用層和數(shù)據(jù)庫層之間使用空間數(shù)據(jù)的數(shù) 據(jù)訪問中間件,它必須與步驟1)中選用的DBMS平臺相互配合,接受上層查詢引擎的命令并 轉(zhuǎn)化為SQL語句在DBMS中運(yùn)行,空間數(shù)據(jù)庫索引技術(shù)一般選用R樹索引,如1)若選擇的 DBMS 平臺是 Oracle,選用 Oracle 的 Spatial ;2)若選擇的 DBMS 平臺是 MySQL,選用 MySQL 的 Spatial Extensions。步驟3)中的凸性距離函數(shù)引擎提供以下函數(shù)1)最大距離函數(shù)最大距離函數(shù)包括以下兩種情況a)單點(diǎn)到最小包圍盒的最大 距離;b)兩個最小包圍盒之間的最大距離;由到單點(diǎn)距離為定值的曲線的凸性得出,單點(diǎn) 到最小包圍盒的最大距離必定是單點(diǎn)到最小包圍盒各個頂點(diǎn)的距離最大值,由此進(jìn)一步得 出兩個最小包圍盒之間的最大距離是兩個最小包圍盒的各個頂點(diǎn)間的距離最大值;2)多點(diǎn)距離和函數(shù)多點(diǎn)距離和函數(shù)處理單點(diǎn)到多點(diǎn)的距離和;3)多點(diǎn)最大距離和函數(shù)多點(diǎn)最大距離和函數(shù)包括以下兩種情況a)多點(diǎn)到最小 包圍盒的最大距離和;b)多點(diǎn)的最小包圍盒和另一個最小包圍盒之間的最大距離和;這兩 種情況分別是最大距離函數(shù)的多點(diǎn)情況,對于多點(diǎn)進(jìn)行加和即可;4)最大多點(diǎn)距離和函數(shù)最大多點(diǎn)距離和函數(shù)處理多點(diǎn)到最小包圍盒內(nèi)一點(diǎn)的 可能最大距離和;由到多點(diǎn)距離為定值的曲線的凸性得出,多點(diǎn)到最小包圍盒的最大距離 必定為多點(diǎn)到最小包圍盒各個頂點(diǎn)的距離和最大值。步驟4)中的最小界定的多點(diǎn)遠(yuǎn)鄰查詢方法具體步驟是1)初始化一個空的答案集,將R樹索引的根節(jié)點(diǎn)設(shè)置為當(dāng)前節(jié)點(diǎn);2)如果當(dāng)前節(jié)點(diǎn)是葉節(jié)點(diǎn),跳到3);否則為中間節(jié)點(diǎn),跳到4);3)對于所有葉節(jié)點(diǎn)里的數(shù)據(jù)點(diǎn),如果它和查詢點(diǎn)的最小包圍盒的多點(diǎn)最大距離和 比答案集里的第k個答案距離大,并且它和查詢點(diǎn)的多點(diǎn)距離和比答案集里的第k個答案 距離大,那么把這個數(shù)據(jù)點(diǎn)插入到答案集里,并維護(hù)答案集的個數(shù)不多于k個;結(jié)束;4)初始化一個空的節(jié)點(diǎn)列表;對于所有中間節(jié)點(diǎn)里的子節(jié)點(diǎn),如果它的最小包圍 盒和查詢點(diǎn)的最小包圍盒之間的多點(diǎn)最大距離和比答案集里的第k個答案距離大,并且它 的最小包圍盒和查詢點(diǎn)的多點(diǎn)最大距離和比答案集里的第k個答案距離大,那么把這個子 節(jié)點(diǎn)插入到節(jié)點(diǎn)列表里;5)對節(jié)點(diǎn)列表里的節(jié)點(diǎn)按照多點(diǎn)最大距離和的降序排序,對于節(jié)點(diǎn)列表里的每個 節(jié)點(diǎn),如果多點(diǎn)最大距離和比答案集里的第k個答案距離大,把這個節(jié)點(diǎn)設(shè)為當(dāng)前節(jié)點(diǎn),跳 到2)。步驟4)中的最好優(yōu)先的多點(diǎn)遠(yuǎn)鄰查詢方法具體步驟是1)初始化一個優(yōu)先隊(duì)列,里面只有一個R樹索引的根節(jié)點(diǎn);2)初始化一個空的答案集;
3)如果優(yōu)先隊(duì)列不空并且答案集個數(shù)小于k,跳到4);否則,結(jié)束;4)從優(yōu)先隊(duì)列里提出一個節(jié)點(diǎn),如果這個節(jié)點(diǎn)是數(shù)據(jù)點(diǎn),則把數(shù)據(jù)點(diǎn)插入到答案 集里;如果這個是中間節(jié)點(diǎn),對于這個節(jié)點(diǎn)的各個子節(jié)點(diǎn)算最大多點(diǎn)距離和,將所有子節(jié)點(diǎn) 插入到優(yōu)先隊(duì)列里。步驟4)中的基于凸包的多點(diǎn)遠(yuǎn)鄰查詢方法具體步驟是1)初始化一個空的答案集;2)計(jì)算數(shù)據(jù)集的凸包;3)遍歷凸包的頂點(diǎn),對每個頂點(diǎn)計(jì)算多點(diǎn)距離和,找到值最大的頂點(diǎn)插入到答案 集里;如果答案集個數(shù)到達(dá)k,則結(jié)束;否則跳到4);4)在凸包里找到答案頂點(diǎn)的左右鄰居,把答案頂點(diǎn)從凸包里去除;在答案頂點(diǎn)和 左右鄰居組成的三角形里找到一個數(shù)據(jù)點(diǎn)到左右鄰居線的距離最遠(yuǎn);將這個數(shù)據(jù)點(diǎn)插入到 凸包里,并遞歸的在左右兩個三角形中進(jìn)行凸包的重建;跳到3)。步驟5)中的多點(diǎn)遠(yuǎn)鄰查詢優(yōu)化引擎需要考慮以下查詢特征1)查詢的查詢點(diǎn)個數(shù);2)查詢的查詢點(diǎn)分布情況;3)查詢的答案集大??;4)查詢的數(shù)據(jù)集大小。本發(fā)明具有的有益效果是本發(fā)明充分利用了 DBMS平臺、空間數(shù)據(jù)庫引擎和空間數(shù)據(jù)庫索引技術(shù)的現(xiàn)有研 究和實(shí)現(xiàn)成果,基于已有系統(tǒng)非常方便快捷的開發(fā)基于凸性的多點(diǎn)遠(yuǎn)鄰查詢處理引擎,使 用者根據(jù)通過多點(diǎn)遠(yuǎn)鄰查詢優(yōu)化引擎選擇最合適的查詢方法,提供最好的性能。
圖1是本發(fā)明實(shí)施步驟流程圖。圖2是多點(diǎn)遠(yuǎn)鄰查詢系統(tǒng)工作原理示意圖。圖3是最小界定和最好優(yōu)先的多點(diǎn)遠(yuǎn)鄰查詢處理引擎工作原理示意圖。圖4是基于凸包的多點(diǎn)遠(yuǎn)鄰查詢處理引擎工作原理示意圖。
具體實(shí)施例方式現(xiàn)結(jié)合附圖和具體實(shí)施例對本發(fā)明的技術(shù)方案作進(jìn)一步說明。如圖1,圖2所示,本發(fā)明具體實(shí)施過程和工作原理如下步驟1)根據(jù)用戶對建索引性能、查詢性能和數(shù)據(jù)實(shí)時性的要求選擇一個DBMS平 臺;步驟2)開發(fā)一個空間數(shù)據(jù)庫引擎實(shí)現(xiàn)與上述步驟1)中選取的DBMS平臺的交互, 并選擇合適的空間數(shù)據(jù)庫索引技術(shù);步驟3)開發(fā)一個適用于多點(diǎn)遠(yuǎn)鄰查詢方法的凸性距離函數(shù)引擎;步驟4)在步驟2)構(gòu)建的空間數(shù)據(jù)庫和步驟3)構(gòu)建的距離函數(shù)引擎上實(shí)現(xiàn)多點(diǎn) 遠(yuǎn)鄰查詢處理引擎,包括最小界定的多點(diǎn)遠(yuǎn)鄰查詢方法,最好優(yōu)先的多點(diǎn)遠(yuǎn)鄰查詢方法和 基于凸包的多點(diǎn)遠(yuǎn)鄰查詢方法;
6
步驟5)開發(fā)一個多點(diǎn)遠(yuǎn)鄰查詢優(yōu)化引擎,根據(jù)查詢特征智能的選擇步驟4)中合 適的多點(diǎn)遠(yuǎn)鄰查詢方法進(jìn)行查詢處理。步驟1)中選用的DBMS平臺應(yīng)支持基本的SQL查詢;現(xiàn)有大多數(shù)DBMS平臺都滿足 這一需求,可根據(jù)應(yīng)用需求從中選取,如1)若應(yīng)用要求高的查詢性能,選用Oracle ;2)若應(yīng)用要求簡單易用,選用MySQL。步驟2)中的空間數(shù)據(jù)庫引擎是構(gòu)建在應(yīng)用層和數(shù)據(jù)庫層之間使用空間數(shù)據(jù)的數(shù) 據(jù)訪問中間件,它必須與步驟1)中選取的DBMS平臺相互配合,接受上層查詢引擎的命令并 轉(zhuǎn)化為SQL語句在DBMS中運(yùn)行;空間數(shù)據(jù)庫索引技術(shù)一般選用R樹索引;如1)若選擇的 DBMS 平臺是 Oracle,選用 Oracle 的 Spatial ;2)若選擇的 DBMS 平臺是 MySQL,選用 MySQL 的 Spatial Extensions。步驟3)中的凸性距離函數(shù)引擎提供以下函數(shù)1)最大距離函數(shù);最大距離函數(shù)包括以下兩種情況a)單點(diǎn)到最小包圍盒的最大 距離;b)兩個最小包圍盒之間的最大距離。由到單點(diǎn)距離為定值的曲線的凸性可以得出, 單點(diǎn)到最小包圍盒的最大距離必定是單點(diǎn)到最小包圍盒各個頂點(diǎn)的距離最大值。由此可以 進(jìn)一步得出兩個最小包圍盒之間的最大距離是兩個最小包圍盒的各個頂點(diǎn)間的距離最大 值;2)多點(diǎn)距離和函數(shù);多點(diǎn)距離和函數(shù)處理單點(diǎn)到多點(diǎn)的距離和;3)多點(diǎn)最大距離和函數(shù);多點(diǎn)最大距離和函數(shù)包括以下兩種情況a)多點(diǎn)到最小 包圍盒的最大距離和;b)多點(diǎn)的最小包圍盒和另一個最小包圍盒之間的最大距離和。這兩 種情況分別是最大距離函數(shù)的多點(diǎn)情況,對于多點(diǎn)進(jìn)行加和即可;4)最大多點(diǎn)距離和函數(shù);最大多點(diǎn)距離和函數(shù)處理多點(diǎn)到最小包圍盒內(nèi)一點(diǎn)的 可能最大距離和;由到多點(diǎn)距離為定值的曲線的凸性可以得出,多點(diǎn)到最小包圍盒的最大 距離必定為多點(diǎn)到最小包圍盒各個頂點(diǎn)的距離和最大值。步驟4)中的最小界定的多點(diǎn)遠(yuǎn)鄰查詢方法具體步驟是1)初始化一個空的答案集,將R樹索引的根節(jié)點(diǎn)設(shè)置為當(dāng)前節(jié)點(diǎn);2)如果當(dāng)前節(jié)點(diǎn)是葉節(jié)點(diǎn),跳到3);否則為中間節(jié)點(diǎn),跳到4);3)對于所有葉節(jié)點(diǎn)里的數(shù)據(jù)點(diǎn),如果它和查詢點(diǎn)的最小包圍盒的多點(diǎn)最大距離和 比答案集里的第k個答案距離大,并且它和查詢點(diǎn)的多點(diǎn)距離和比答案集里的第k個答案 距離大,那么把這個數(shù)據(jù)點(diǎn)插入到答案集里,并維護(hù)答案集的個數(shù)不多于k個;結(jié)束;4)初始化一個空的節(jié)點(diǎn)列表;對于所有中間節(jié)點(diǎn)里的子節(jié)點(diǎn),如果它的最小包圍 盒和查詢點(diǎn)的最小包圍盒之間的多點(diǎn)最大距離和比答案集里的第k個答案距離大,并且它 的最小包圍盒和查詢點(diǎn)的多點(diǎn)最大距離和比答案集里的第k個答案距離大,那么把這個子 節(jié)點(diǎn)插入到節(jié)點(diǎn)列表里;5)對節(jié)點(diǎn)列表里的節(jié)點(diǎn)按照多點(diǎn)最大距離和的降序排序,對于節(jié)點(diǎn)列表里的每個 節(jié)點(diǎn),如果多點(diǎn)最大距離和比答案集里的第k個答案距離大,把這個節(jié)點(diǎn)設(shè)為當(dāng)前節(jié)點(diǎn),跳 到2)。以圖3找2個遠(yuǎn)鄰為例,步驟4)中的最小界定的多點(diǎn)遠(yuǎn)鄰查詢方法具體實(shí)施方式
如下
1)^和%是查詢點(diǎn);從根節(jié)點(diǎn)開始訪問,答案集為空諷到禮是最小包圍盒諷和 M2被插入到節(jié)點(diǎn)列表里;因?yàn)镸1的多點(diǎn)最大距離和比較大,M1是下一個要訪問的節(jié)點(diǎn);2)和1)類似,M3和M4被插入到節(jié)點(diǎn)列表里,M3是下一個要訪問的節(jié)點(diǎn);3)P1到p1Q是數(shù)據(jù)點(diǎn);Pl和P2是禮里的數(shù)據(jù)點(diǎn),計(jì)算多點(diǎn)距離和被插入到答案集 里,答案集變成了 {Pl,P2};4)查詢方法回到M4,M4不能被剪枝,它里面的數(shù)據(jù)點(diǎn)都要處理,最后答案集變成了
W pj ;5)查詢方法會道M2,M2不能被剪枝,但是它里面的子節(jié)點(diǎn)M5和M6都因?yàn)槎帱c(diǎn)最大 距離和比P1大而被剪枝掉,最終答案集就是{p3,P1I。步驟4)中的最好優(yōu)先的多點(diǎn)遠(yuǎn)鄰查詢方法具體步驟是1)初始化一個優(yōu)先隊(duì)列,里面只有一個R樹索引的根節(jié)點(diǎn);2)初始化一個空的答案集;3)如果優(yōu)先隊(duì)列不空并且答案集個數(shù)小于k,跳到4);否則,結(jié)束;4)從優(yōu)先隊(duì)列里提出一個節(jié)點(diǎn),如果這個節(jié)點(diǎn)是數(shù)據(jù)點(diǎn),則把數(shù)據(jù)點(diǎn)插入到答案 集里;如果這個是中間節(jié)點(diǎn),對于這個節(jié)點(diǎn)的各個子節(jié)點(diǎn)算最大多點(diǎn)距離和,將所有子節(jié)點(diǎn) 插入到優(yōu)先隊(duì)列里。以圖3找2個遠(yuǎn)鄰為例,步驟4)中的最好優(yōu)先的多點(diǎn)遠(yuǎn)鄰查詢方法具體實(shí)施方式
如下1)作為優(yōu)先隊(duì)列里唯一的節(jié)點(diǎn),根節(jié)點(diǎn)被訪問諷和M2最大多點(diǎn)距離和經(jīng)過計(jì)算 并插入到優(yōu)先隊(duì)列里;優(yōu)先隊(duì)列為{M”M2};2)M1的兩個子節(jié)點(diǎn)M3和M4被插入到優(yōu)先隊(duì)列里;優(yōu)先隊(duì)列變成{M3,M4, M2I ;3)作為M3里的數(shù)據(jù)點(diǎn),P1和P2的多點(diǎn)距離和計(jì)算之后插入到優(yōu)先隊(duì)列,M4的子節(jié) 點(diǎn)也類似處理;優(yōu)先隊(duì)列變成{p3,M2, P1, P2, P4, P5I ;4)P3首先被插入到答案集里;然后M2里的數(shù)據(jù)點(diǎn)也被插入到優(yōu)先隊(duì)列;優(yōu)先隊(duì)列 是{p1; M5, P2, M6, P4, P5},答案集是{p3};5)優(yōu)先隊(duì)列頭上的P1被插入到答案集里,得到最終答案集{p3,P1I。步驟4)中的基于凸包的多點(diǎn)遠(yuǎn)鄰查詢方法具體步驟是1)初始化一個空的答案集;2)計(jì)算數(shù)據(jù)集的凸包;3)遍歷凸包的頂點(diǎn),對每個頂點(diǎn)計(jì)算多點(diǎn)距離和,找到值最大的頂點(diǎn)插入到答案 集里;如果答案集個數(shù)到達(dá)k,則結(jié)束;否則跳到4);4)在凸包里找到答案頂點(diǎn)的左右鄰居,把答案頂點(diǎn)從凸包里去除;在答案頂和左 右鄰居組成的三角形里找到一個數(shù)據(jù)點(diǎn)到左右鄰居線的距離最遠(yuǎn);將這個數(shù)據(jù)點(diǎn)插入到凸 包里,并遞歸的在左右兩個三角形中進(jìn)行凸包的重建;跳到3)。以圖4找2個遠(yuǎn)鄰為例,步驟4)中的基于凸包的多點(diǎn)遠(yuǎn)鄰查詢方法具體實(shí)施方式
如下1)凸包是P9P3P1P2P7P8P9,算過所有頂點(diǎn)的多點(diǎn)距離和之后得到P3的值最大,答案 集變成{p3};2)刪除P3后,凸包變成P9P5P4P1P2P7P8P9,P1成為下一個遠(yuǎn)鄰并插入到答案集里,得到最終答案集{p3,P1I。步驟5)中的多點(diǎn)遠(yuǎn)鄰查詢優(yōu)化引擎需要考慮以下查詢特征1)查詢的查詢點(diǎn)個數(shù);2)查詢的查詢點(diǎn)分布情況;3)查詢的答案集大小;4)查詢的數(shù)據(jù)集大小。
9
權(quán)利要求
一種基于凸性的多點(diǎn)遠(yuǎn)鄰查詢方法,其特征在于該方法的步驟如下步驟1)根據(jù)用戶對建索引性能、查詢性能和數(shù)據(jù)實(shí)時性的要求選用一個DBMS平臺;步驟2)開發(fā)一個空間數(shù)據(jù)庫引擎實(shí)現(xiàn)與上述步驟1)中選用的DBMS平臺的交互,并選用空間數(shù)據(jù)庫索引技術(shù);步驟3)開發(fā)一個適用于多點(diǎn)遠(yuǎn)鄰查詢方法的凸性距離函數(shù)引擎;步驟4)在步驟2)構(gòu)建的空間數(shù)據(jù)庫和步驟3)構(gòu)建的凸性距離函數(shù)引擎上實(shí)現(xiàn)多點(diǎn)遠(yuǎn)鄰查詢處理引擎,多點(diǎn)遠(yuǎn)鄰查詢包括最小界定的多點(diǎn)遠(yuǎn)鄰查詢方法,最好優(yōu)先的多點(diǎn)遠(yuǎn)鄰查詢方法和基于凸包的多點(diǎn)遠(yuǎn)鄰查詢方法;步驟5)開發(fā)一個多點(diǎn)遠(yuǎn)鄰查詢優(yōu)化引擎,根據(jù)查詢特征智能的選擇步驟4)中合適的多點(diǎn)遠(yuǎn)鄰查詢方法進(jìn)行查詢處理。
2.根據(jù)權(quán)利要求1所述的一種基于凸性的多點(diǎn)遠(yuǎn)鄰查詢方法,其特征在于步驟1)中 選用的DBMS平臺應(yīng)支持基本的SQL查詢,現(xiàn)有大多數(shù)DBMS平臺都滿足這一需求,根據(jù)應(yīng)用 需求從中選取,如1)若應(yīng)用要求高的查詢性能,選用Oracle;2)若應(yīng)用要求簡單易用,選用MySQL。
3.根據(jù)權(quán)利要求1所述的一種基于凸性的多點(diǎn)遠(yuǎn)鄰查詢方法,其特征在于步驟2)中 的空間數(shù)據(jù)庫引擎是構(gòu)建在應(yīng)用層和數(shù)據(jù)庫層之間使用空間數(shù)據(jù)的數(shù)據(jù)訪問中間件,它必 須與步驟1)中選用的DBMS平臺相互配合,接受上層查詢引擎的命令并轉(zhuǎn)化為SQL語句在 DBMS中運(yùn)行,空間數(shù)據(jù)庫索引技術(shù)一般選用R樹索引,如1)若選擇的DBMS平臺是Oracle,選用Oracle的Spatial;2)若選擇的DBMS 平臺是 MySQL,選用 MySQL 的 Spatial Extensions。
4.根據(jù)權(quán)利要求1所述的一種基于凸性的多點(diǎn)遠(yuǎn)鄰查詢方法,其特征在于步驟3)中 的凸性距離函數(shù)引擎提供以下函數(shù)1)最大距離函數(shù)最大距離函數(shù)包括以下兩種情況a)單點(diǎn)到最小包圍盒的最大距 離;b)兩個最小包圍盒之間的最大距離;由到單點(diǎn)距離為定值的曲線的凸性得出,單點(diǎn)到 最小包圍盒的最大距離必定是單點(diǎn)到最小包圍盒各個頂點(diǎn)的距離最大值,由此進(jìn)一步得出 兩個最小包圍盒之間的最大距離是兩個最小包圍盒的各個頂點(diǎn)間的距離最大值;2)多點(diǎn)距離和函數(shù)多點(diǎn)距離和函數(shù)處理單點(diǎn)到多點(diǎn)的距離和;3)多點(diǎn)最大距離和函數(shù)多點(diǎn)最大距離和函數(shù)包括以下兩種情況a)多點(diǎn)到最小包圍 盒的最大距離和;b)多點(diǎn)的最小包圍盒和另一個最小包圍盒之間的最大距離和;這兩種情 況分別是最大距離函數(shù)的多點(diǎn)情況,對于多點(diǎn)進(jìn)行加和即可;4)最大多點(diǎn)距離和函數(shù)最大多點(diǎn)距離和函數(shù)處理多點(diǎn)到最小包圍盒內(nèi)一點(diǎn)的可能 最大距離和;由到多點(diǎn)距離為定值的曲線的凸性得出,多點(diǎn)到最小包圍盒的最大距離必定 為多點(diǎn)到最小包圍盒各個頂點(diǎn)的距離和最大值。
5.根據(jù)權(quán)利要求1所述的一種基于凸性的多點(diǎn)遠(yuǎn)鄰查詢方法,其特征在于步驟4)中 的最小界定的多點(diǎn)遠(yuǎn)鄰查詢方法具體步驟是1)初始化一個空的答案集,將R樹索引的根節(jié)點(diǎn)設(shè)置為當(dāng)前節(jié)點(diǎn);2)如果當(dāng)前節(jié)點(diǎn)是葉節(jié)點(diǎn),跳到3);否則為中間節(jié)點(diǎn),跳到4);3)k是查詢答案集的大?。粚τ谒腥~節(jié)點(diǎn)里的數(shù)據(jù)點(diǎn),如果它和查詢點(diǎn)的最小包圍盒的多點(diǎn)最大距離和比答案集里的第k個答案距離大,并且它和查詢點(diǎn)的多點(diǎn)距離和比答 案集里的第k個答案距離大,那么把這個數(shù)據(jù)點(diǎn)插入到答案集里,并維護(hù)答案集的個數(shù)不 多于k個;結(jié)束;4)初始化一個空的節(jié)點(diǎn)列表;對于所有中間節(jié)點(diǎn)里的子節(jié)點(diǎn),如果它的最小包圍盒和 查詢點(diǎn)的最小包圍盒之間的多點(diǎn)最大距離和比答案集里的第k個答案距離大,并且它的最 小包圍盒和查詢點(diǎn)的多點(diǎn)最大距離和比答案集里的第k個答案距離大,那么把這個子節(jié)點(diǎn) 插入到節(jié)點(diǎn)列表里;5)對節(jié)點(diǎn)列表里的節(jié)點(diǎn)按照多點(diǎn)最大距離和的降序排序,對于節(jié)點(diǎn)列表里的每個節(jié) 點(diǎn),如果多點(diǎn)最大距離和比答案集里的第k個答案距離大,把這個節(jié)點(diǎn)設(shè)為當(dāng)前節(jié)點(diǎn),跳到 2)。
6.根據(jù)權(quán)利要求1所述的一種基于凸性的多點(diǎn)遠(yuǎn)鄰查詢方法,其特征在于步驟4)中 的最好優(yōu)先的多點(diǎn)遠(yuǎn)鄰查詢方法具體步驟是1)初始化一個優(yōu)先隊(duì)列,里面只有一個R樹索引的根節(jié)點(diǎn);2)初始化一個空的答案集;3)如果優(yōu)先隊(duì)列不空并且答案集個數(shù)小于k,跳到4);否則,結(jié)束;4)從優(yōu)先隊(duì)列里提出一個節(jié)點(diǎn),如果這個節(jié)點(diǎn)是數(shù)據(jù)點(diǎn),則把數(shù)據(jù)點(diǎn)插入到答案集里; 如果這個是中間節(jié)點(diǎn),對于這個節(jié)點(diǎn)的各個子節(jié)點(diǎn)算最大多點(diǎn)距離和,將所有子節(jié)點(diǎn)插入 到優(yōu)先隊(duì)列里。
7.根據(jù)權(quán)利要求1所述的一種基于凸性的多點(diǎn)遠(yuǎn)鄰查詢方法,其特征在于步驟4)中 的基于凸包的多點(diǎn)遠(yuǎn)鄰查詢方法具體步驟是1)初始化一個空的答案集;2)計(jì)算數(shù)據(jù)集的凸包;3)遍歷凸包的頂點(diǎn),對每個頂點(diǎn)計(jì)算多點(diǎn)距離和,找到值最大的頂點(diǎn)插入到答案集里; 如果答案集個數(shù)到達(dá)k,則結(jié)束;否則跳到4);4)在凸包里找到答案頂點(diǎn)的左右鄰居,把答案頂點(diǎn)從凸包里去除;在答案頂點(diǎn)和左右 鄰居組成的三角形里找到一個數(shù)據(jù)點(diǎn)到左右鄰居線的距離最遠(yuǎn);將這個數(shù)據(jù)點(diǎn)插入到凸包 里,并遞歸的在左右兩個三角形中進(jìn)行凸包的重建;跳到3)。
8.根據(jù)權(quán)利要求1所述的一種基于凸性的多點(diǎn)遠(yuǎn)鄰查詢方法,其特征在于步驟5)中 的多點(diǎn)遠(yuǎn)鄰查詢優(yōu)化引擎需要考慮以下查詢特征1)查詢的查詢點(diǎn)個數(shù);2)查詢的查詢點(diǎn)分布情況;3)查詢的答案集大小;4)查詢的數(shù)據(jù)集大小。
全文摘要
本發(fā)明公開了一種基于凸性的多點(diǎn)遠(yuǎn)鄰查詢方法。利用現(xiàn)有DBMS平臺和空間數(shù)據(jù)庫引擎相結(jié)合構(gòu)建空間數(shù)據(jù)庫系統(tǒng),并合理的選用空間數(shù)據(jù)庫索引技術(shù)。在此基礎(chǔ)上開發(fā)凸性距離函數(shù)引擎提供多點(diǎn)遠(yuǎn)鄰查詢方法需要的距離計(jì)算方法。開發(fā)基于凸性的多點(diǎn)遠(yuǎn)鄰查詢處理引擎,包括最小界定的多點(diǎn)遠(yuǎn)鄰查詢方法,最好優(yōu)先的多點(diǎn)遠(yuǎn)鄰查詢方法和基于凸包的多點(diǎn)遠(yuǎn)鄰查詢方法。開發(fā)多點(diǎn)遠(yuǎn)鄰查詢優(yōu)化引擎,根據(jù)查詢特征智能的選擇合適的多點(diǎn)遠(yuǎn)鄰查詢方法進(jìn)行查詢處理。本發(fā)明利用DBMS平臺、空間數(shù)據(jù)庫引擎和空間數(shù)據(jù)庫索引技術(shù)的成果,基于已有系統(tǒng)快捷的開發(fā)基于凸性的多點(diǎn)遠(yuǎn)鄰查詢處理引擎,通過多點(diǎn)遠(yuǎn)鄰查詢優(yōu)化引擎選擇最合適的查詢方法,提供最好的性能。
文檔編號G06F17/30GK101984433SQ201010545438
公開日2011年3月9日 申請日期2010年11月12日 優(yōu)先權(quán)日2010年11月12日
發(fā)明者壽黎但, 胡天磊, 陳剛, 陳珂, 高遠(yuǎn) 申請人:浙江大學(xué)