GeoHash 地圖算法

之前接手了學長的一個地圖項目,學長說可以把地圖的經緯度用Geohash算法換成字符串,下來了解了一下

 

Geohash算法是將二維的經緯度轉換爲了一維的字符串,這樣相近的點字符串相似的前綴就越多,這樣充分利用了數據庫的B樹索引,速度大大提高

 

GeoHash的算法

字符串位數越長代表精度越高,8位誤差約爲19M

字符串的由來:

1、根據經緯度計算出GeoHash的二進制編碼

將緯度 分成 [ - 90 , 0)  和 (0 , 90] ,如果位於左區間則取 0 ,右區間取 1 ,分的次數越多,代表的精度越高

經度 則 分成 [ - 180 , 0) 和 (0 , 180 ] 同上。

2、我們將計算出的經緯度二進制編碼進行 組碼 ,偶數位放經度,奇數位放緯度。

然後每 5 位一組,轉爲 十進制 ,對照 base32編碼,得出字符串。

GeoHash 的缺點:

我們將二維經緯度轉爲一維字符串,根據經緯度二分 左 0 右 1 的原則繪製如下圖N型曲線,這種曲線被稱爲Peano空間填充曲線

 

這種曲線的缺點就是有突變性,0111與 1000編碼相鄰,但是實際距離卻相差甚遠,因此我們需要根據GeoHash字符串先選出臨近的點,然後進行實際距離的計算。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章