Geohash & Haversine 附近功能

前言

最近偶然間看到了 Geohash 算法,才想起來之前自己做過的附近的功能簡直不堪一擊,竟然是計算所有與目標點的距離,再排序。想必有經驗的人早就笑出聲了吧,按照以前的水平,如果不這樣做,那也得找出比較相近的,先不計算球面距離,然后得到一個小一點的集合,再計算距離,這樣計算量大大減小,然而還是要掃描所有點,那有沒有辦法不掃描整張表就能得到附近點的信息,想到這,我們而已給所有點預先做一個標簽,我們每一次想找附近的點就去比較這些標簽,如果我們能夠保證,距離相近的點在一個標簽內,那么我們就可以只取該標簽的點,然后再做距離計算,這樣就不用掃描整張表了,問題到這,基本已經浮出水面,接下來就是最核心的問題,如何將點的信息映射成標簽,這便是 Geohash https://en.wikipedia.org/wiki/Geohash wiki 上有所解釋,但不是那么易懂,可以看看這位仁兄的博客,GeoHash核心原理解析 講解清晰易懂

相似度

Geohash 將經緯度映射成一段字符串,越是相近的點,前綴匹配就越長,每一位都會有一個精度問題,匹配的越長距離就越近,當然也存在誤差


Screenshot from 2018-09-06 09-10-02.png

利用這個來做附近的點選取再合適不過了。

Haversine 計算球面距離

傳統(tǒng)的計算球面距離公式計算量大,當我們沒有要求很高的精度的時候,可以適當通過別的更簡單的計算公式得到近似的結果,這便是 Haversine 發(fā)揮的作用

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容