高效的多維空間點索引演算法 Geohash

2021-09-22 02:24:25 字數 1008 閱讀 3365

可以利用 geohash 的字串長短來決定要劃分區域的大小。這個對應關係可以參考上面**裡面 cell 的寬和高。一旦選定 cell 的寬和高,那麼 geohash 字串的長度就確定下來了。這樣我們就把地圖分成了乙個個的矩形區域了。

地圖上雖然把區域劃分好了,但是還有乙個問題沒有解決,那就是如何快速的查詢乙個點附近鄰近的點和區域呢?

geohash 有乙個和 z 階曲線相關的性質,那就是乙個點附近的地方(但不絕對) hash 字串總是有公共字首,並且公共字首的長度越長,這兩個點距離越近。

由於這個特性,geohash 就常常被用來作為唯一識別符號。用在資料庫裡面可用 geohash 來表示乙個點。geohash 這個公共字首的特性就可以用來快速的進行鄰近點的搜尋。越接近的點通常和目標點的 geohash 字串公共字首越長(但是這不一定,也有特殊情況,下面舉例會說明)

geohash 也有幾種編碼形式,常見的有2種,base 32 和 base 36。

以經緯度值:(116.389550, 39.928167)進行演算法說明,對緯度39.928167進行逼近編碼 (地球緯度區間是[-90,90])

geohash原理:

geohash的0、1串串行是經度0、1序列和緯度0、1序列中的數字交替進行排列的,偶數字對應的序列為經度序列,奇數字對應的序列為緯度序列,在進行第一次劃分時,geohash0、1序列中的前5個bits(11100),那麼這5bits中有3bits是表示經度,2bits表示緯度,所以第一次劃分時,是將經度劃分成8個區段(2^3 = 8),將緯度劃分為4個區段(2^2 = 4),這樣就形成了32個區域。如下圖:

原文:

星際穿越與電腦程式的多維空間

與星際穿越表達的多維空間模型類似,每個程序生活在一維的位址空間中,偶爾通過如jump指令產生一維空間彎曲,導致指令的遠近跳轉,從而感受到了分段二維空間的存在 程序本身又可以通過虛擬記憶體的機制在外存中換入換出,程序自身對此一無所知,進而產生了程序執行於內外存的三維空間 程序對其何時占有處理器時間又是...

多維空間 對於一維到七維的理解

一維空間 點連續後成線,但這個軌跡只能夠向乙個方向變化 可以觀測到的內容 一些理論上存在的,或長或短的線,靜止的 二維空間 點成為線,可以控制點的連線方向,也就是可以拐彎了,在這個基礎下,可以讓點成為面 可以觀測到的內容 可能是像塗鴉一樣混亂的斷斷續續的線,或者面 三維空間 線可以有三個方向了,這一...

二維空間下的最近點對查詢

include include using namespace std float minu 10000000 int fff,bbb void insertsort float list,float x,int a,int b void insertsort float list,float x,...