geohash基本原理是將地球理解為乙個二維平面,將平面遞迴分解成更小的子塊,每個子塊在一定經緯度範圍內擁有相同的編碼。不好理解,沒關係,我來找個圖。
就像上面這張圖,乙個座標點,可以當做乙個小格仔,而格仔的標註就是該座標點geohash值,當然格仔越小精度越高,這個看實際應用吧。
現在我們來說說為什麼要用geohash,普通的經緯度座標不是挺好的麼?
舉個栗子:我有1w+個經緯度座標點,我現在需要查詢其中乙個點周圍5km範圍內有哪些點,可以怎麼做?
答案一:以該點為圓心,半徑5km做圓,迴圈這1w+個點與圓心的直線距離,判斷是否小於5km。這種做法其實是非常常用也非常高效的。
答案二:採用gis二次開發元件,呼叫gis介面查詢該點周圍5km範圍內點資料,這種做法也沒有問題,雖然我不清楚gis元件具體實現的方案是什麼,但是我覺得效能應該比方案一要差點,原因很簡單gis元件都非常的龐大和複雜(以ae或者arcgis js api為例)。
以上的答案我都沒有測試過,不過設想如果我把資料量擴大到100w+個座標點呢?迴圈計算的計算量可想而知,如果再要求點時效性,那就為難了。這個時候我們來談談geohash,還是舉個栗子,我選4個點,a b c d,每個點之間的距離都約5km,如下表。
序號座標
geohash
geohash長度
a116.280159,39.9138
1110011101001000110110105b
116.316816,39.913551
1110011101001000110110105c
116.404036,39.91405
1110011101001000111100005d
116.46663,39.914354
111001110100100011110010
5看不懂沒關係,我們再來看一張圖。
這張圖說明什麼呢,我們來對應看一下兩張表的「geohash長度」,拿5級別為例,看km誤差,意思是在5級別如果geohash相同,說明兩個點的距離誤差在2.4*2=4.8km左右(+-算左右兩次)。再看看表中a和b的geohash是一樣的,說明a和b距離在5km範圍內,而a與c、d都不在5km範圍內。不信,我們來看看地圖。
由於是手動取點座標有一定誤差,不過不影響結果演示。這時候我們再回來開始那個問題,我有1kw+個點,需要找到某點5km範圍內的資料,我可以把這些座標全部轉為第5級別的geohash值,然後sql查詢等於這個點geohash值的所有資料即可。所以geohash適合於快速查詢且對絕對精度要求不高的業務場景。
具體**麻煩移步個人部落格:
geohash演算法原理
geohash的使用背景 從地理資訊學角度來來分析,在地球中緯度的區間範圍為 90,90 而經度的區間範圍為 180,180 當將指定位置經緯度獲取,轉換為geohash再與相應範圍geohash相匹配,就可以為他推薦相同geohash的相關資訊。甚至可以實現一定程度上地理座標位置的保密性。geoh...
GIS學習探索
由於工作的原因,這幾天在研究gis的控制項,主要看了supermap和mapinfo兩個公司的控制項 主要有以下收穫 1 gis控制項大多有這麼幾個控制項 mapcontrol用來顯示地圖,zoomin,zoomout,漫遊 用來拖拽地圖 向左移,向右移等 2 一些演示的flash和一些例子中發現g...
視覺神經訊號整合機制的新探索
視覺神經訊號整合機制的新探索 英國nature,2009,457 83報道,美國神經科學家卡克林 y.karklin 和列維奇 s.lewicki 設計了乙個神經計算模型,以 中樞視覺神經元如何概括自然景觀中的影象特徵資訊。對觀察者來說,某一景觀片段的網膜映像不是一成不變的,因此承擔視覺整合的神經元...