本發(fā)明涉及空間索引,具體而言,涉及一種基于二維點的空間索引構建查詢方法及系統(tǒng)。
背景技術:
1、空間索引是一種用于高效查詢空間數(shù)據(jù)的數(shù)據(jù)結構,廣泛應用于地理信息系統(tǒng)(gis)、計算機圖形學、計算機輔助設計(cad)等領域??臻g索引解決的問題是如何在海量的點中,快速的找到指定范圍內(nèi)的點。
2、傳統(tǒng)的空間索引技術包括四叉樹、r樹、kd樹等,它們各有優(yōu)勢和局限性。四叉樹是一種將二維空間劃分為四個象限的樹形結構,適用于均勻分布的空間數(shù)據(jù),但在數(shù)據(jù)分布不均勻時性能下降。r樹是一種平衡樹結構,能夠動態(tài)地調(diào)整樹的深度和節(jié)點的分裂,適用于高維空間數(shù)據(jù)的索引,但在處理大規(guī)模數(shù)據(jù)集時可能會遇到性能瓶頸。kd樹(k-dimensional?tree)是一種將空間劃分為k維的樹形結構,適用于快速檢索k維空間中的點,但構建和維護成本較高。
3、目前空間索引的存在方式為基于數(shù)據(jù)庫的索引和基于內(nèi)存的索引。基于數(shù)據(jù)庫的空間索引依托于數(shù)據(jù)庫的能力支撐,這是一把雙刃劍,一方面可以利用數(shù)據(jù)庫的能力和資源配套為應用提供便利和可行性;另一方面,無法獨立運行,一些輕量級的、實時性較高的場景難以滿足要求。而基于內(nèi)存的空間索引雖然具備了快速查詢的能力,但是在數(shù)據(jù)量、內(nèi)存和計算資源優(yōu)化、索引資源復用上存在不足。針對現(xiàn)有的空間索引技術存在的不足,本發(fā)明提出了一種基于二維點的空間索引構建查詢方法及系統(tǒng)。
技術實現(xiàn)思路
1、本發(fā)明提供一種基于二維點的空間索引構建查詢方法及系統(tǒng),用以克服現(xiàn)有技術中存在的至少一個技術問題。
2、一方面,本發(fā)明提供一種基于二維點的空間索引構建查詢方法,包括:
3、構建索引容器,輸入所述索引容器的容量;
4、判斷所述索引容器的容量是否滿足第一預定要求,若不滿足第一預定要求,程序結束;若滿足第一預定要求,根據(jù)所述索引容器的容量初始化消息頭空間、索引空間和坐標空間;
5、依次輸入需要索引的要素信息,所述要素信息包括坐標的id、經(jīng)度和緯度;每次輸入要素信息時,判斷當前狀態(tài)是否滿足第二預定要求,若不滿足第二預定要求,程序結束;若滿足第二預定要求,在所述索引空間記錄坐標的id,并在所述坐標空間記錄坐標的經(jīng)度和緯度;
6、判斷要素數(shù)量是否符合第三預定要求,若不符合,程序結束;若符合,判斷所述索引容器中的要素數(shù)量是否大于閾值,若不大于,排序完成,生成索引樹,并更改狀態(tài);若大于,選擇一個坐標軸作為劃分方向;
7、以當前坐標軸上第k小的要素作為基準數(shù),基于所述基準數(shù)將要素劃分為兩部分,分別為左邊部分和右邊部分;
8、判斷劃分后的要素數(shù)量是否大于閾值,若不大于,劃分完成,生成索引樹,并更改狀態(tài);若大于,選擇另一個坐標軸作為劃分方向,針對左邊部分的要素和右邊部分的要素,分別返回以當前坐標軸上第k小的要素作為基準數(shù)步驟;
9、利用所述索引樹,進行數(shù)據(jù)查詢。
10、可選地,判斷所述索引容器的容量是否滿足第一預定要求,具體為:
11、判斷所述索引容器的容量是否為整數(shù),若不是整數(shù),則表示所述索引容器的容量不滿足第一預定要求;若是整數(shù),判斷所述索引容器的容量是否大于0,若不大于0,則表示所述索引容器的容量不滿足第一預定要求,若大于0,則表示所述索引容器的容量滿足第一預定要求。
12、可選地,判斷當前狀態(tài)是否滿足第二預定要求,具體為:
13、判斷索引容器中當前的要素數(shù)量是否超過所述索引容器的容量,若超過,則表示不滿足第二預定要求;若未超過,則判斷所述索引空間中是否包含當前輸入坐標的id,若包含,則表示不滿足第二預定要求,若不包含,則表示滿足第二預定要求。
14、可選地,所述消息頭空間包括開始位和葉子節(jié)點數(shù)量,將葉子節(jié)點數(shù)量作為所述閾值。
15、可選地,基于所述基準數(shù)將要素劃分為兩部分,分別為左邊部分和右邊部分,具體為:
16、基于當前坐標,使小于所述基準數(shù)的要素位于所述基準數(shù)的左邊,作為左邊部分;大于所述基準數(shù)的要素位于所述基準數(shù)的右邊,作為右邊部分。
17、可選地,采用矩形查詢方法進行數(shù)據(jù)查詢,具體為:
18、輸入矩形框坐標;
19、判斷所述矩形框坐標是否符合矩形規(guī)則,若不符合,程序結束;若符合,根據(jù)更改后的狀態(tài)判斷索引樹是否生成;
20、若索引樹未生成,程序結束;若索引樹生成,從根節(jié)點開始向下遍歷所述索引樹,判斷當前節(jié)點對應的矩形區(qū)域與矩形框是否存在包含關系;
21、如果不存在包含關系,則程序結束;如果存在包含關系,則遞歸查詢當前節(jié)點的左右子樹對應的矩形區(qū)域與矩形框是否存在包含關系;
22、到達葉子節(jié)點后,如果當前葉子節(jié)點位于所述矩形框內(nèi),則將當前葉子節(jié)點加入選擇集合;
23、查找到所有落在矩形框內(nèi)的點后形成的選擇集合,為查詢結果數(shù)據(jù)。
24、可選地,采用周邊查詢方法進行數(shù)據(jù)查詢,具體為:
25、輸入查詢點和查詢范圍;
26、判斷輸入的所述查詢點和查詢范圍是否合法,若不合法,程序結束;若合法,根據(jù)更改后的狀態(tài)判斷索引樹是否生成;
27、若索引樹未生成,程序結束;若索引樹生成,根據(jù)所述查詢點和所述查詢范圍,生成一個圓形;
28、從根節(jié)點開始向下遍歷所述索引樹,判斷當前節(jié)點對應的矩形區(qū)域與所述圓形是否存在包含關系;
29、如果不存在包含關系,則程序結束;如果存在包含關系,則遞歸查詢當前節(jié)點的左右子樹對應的矩形區(qū)域與所述圓形是否存在包含關系;
30、到達葉子節(jié)點后,如果當前葉子節(jié)點位于所述圓形內(nèi),則將當前葉子節(jié)點加入選擇集合;
31、查找到所有落在所述圓形內(nèi)的點后形成的選擇集合,為查詢結果數(shù)據(jù)。
32、可選地,生成索引樹后,還包括:利用所述索引樹生成索引文件。
33、可選地,采用導出索引文件的方法進行數(shù)據(jù)查詢。
34、另一方面,本發(fā)明還提供一種基于二維點的空間索引構建查詢系統(tǒng),包括:
35、構建模塊,用于構建索引容器,輸入所述索引容器的容量;
36、第一判斷模塊,用于判斷所述索引容器的容量是否滿足第一預定要求,若不滿足第一預定要求,程序結束;若滿足第一預定要求,根據(jù)所述索引容器的容量初始化消息頭空間、索引空間和坐標空間;
37、輸入模塊,用于依次輸入需要索引的要素信息,所述要素信息包括坐標的id、經(jīng)度和緯度;每次輸入要素信息后,判斷當前狀態(tài)是否滿足第二預定要求,若不滿足第二預定要求,程序結束;若滿足第二預定要求,在所述索引空間記錄坐標的id,并在所述坐標空間記錄坐標的經(jīng)度和緯度;
38、第二判斷模塊,用于判斷要素數(shù)量是否符合第三預定要求,若不符合,程序結束;若符合,判斷所述索引容器中的要素數(shù)量是否大于閾值,若不大于,排序完成,生成索引樹,并更改狀態(tài);若大于,選擇一個坐標作為劃分方向;
39、劃分模塊,用于以當前坐標軸上第k小的要素作為基準數(shù),基于所述基準數(shù)將要素劃分為兩部分,分別為左邊部分和右邊部分;
40、第三判斷模塊,用于判斷劃分后的要素數(shù)量是否大于閾值,若不大于,劃分完成,生成索引樹,并更改狀態(tài);若大于,選擇另一個坐標軸作為劃分方向,針對左邊部分的要素和右邊部分的要素,分別返回以當前坐標軸上第k小的要素作為基準數(shù)步驟;
41、查詢模塊,用于利用所述索引樹,進行數(shù)據(jù)查詢。
42、本發(fā)明實施例的創(chuàng)新點包括:
43、1、本實施例中,通過構建一種靜態(tài)的快速空間索引索,實現(xiàn)數(shù)據(jù)查詢,能夠在占用更小內(nèi)存資源的基礎上,提供更高的查詢效率,且能夠支持更大的點數(shù)據(jù)規(guī)模,達到百萬千萬,是本發(fā)明實施例的創(chuàng)新點之一。
44、2、本實施例中,通過制定一種能夠復制的索引保存協(xié)議,讓索引能夠快速復制,從而實現(xiàn)快速復用,是本發(fā)明實施例的創(chuàng)新點之一。