跟據經緯度實現附近搜尋Java實現

2021-08-19 22:58:12 字數 942 閱讀 9380

mysql空間資料庫、矩形演算法、geohash

geo演算法

參考文件:

一直在琢磨lbs,期待可以發現更好的方案。現在糾結了。

簡單列舉一下已經了解到的方案:

1.sphinx geo索引

2.mongodb geo索引

3.mysql sql查詢

4.mysql+geohash

5.redis+geohash

然後列舉一下需求:

1.實時性要高,有頻繁的更新和讀取

2.可按距離排序支援分頁

3.支援多條件篩選(乙個經緯度資料還包含其他屬性,比如社交系統的性別、年齡)

方案簡單介紹:

1.sphinx geo索引

支援按照距離排序,並支援分頁。但是嘗試mva+geo失敗,還在找原因。

無法滿足高實時性需求。(可能是不了解實時增量索引配置有誤)

資源占用小,速度快

2.mongodb geo索引

支援按照距離排序,並支援分頁。支援多條件篩選。

可滿足實時性需求。

資源占用大,資料量達到百萬級請流量在10w左右查詢速度明顯下降。

3.mysql+geohash/ mysql sql查詢

不支援按照距離排序(代價太大)。支援分頁。支援多條件篩選。

可滿足實時性需求。

資源占用中等,查詢速度不及mongodb。

且geohash按照區塊將球面轉化平面並切割。暫時沒有找到跨區塊查詢方法(不太了解)。

4.redis+geohash

geohash缺點不再贅述

不支援距離排序。支援分頁查詢。不支援多條件篩選。

可滿足實時性需求。

資源占用最小。查詢速度很快。

------update

補充一下測試機配置:

1tb sata硬碟。8gb ram。i3 2350 雙核四執行緒

mysql 根據當前經緯度查詢附近門店

根據當前經緯度查詢附近門店距離 latitude 緯度 longitude 經度 為資料表欄位名 latitude 當前緯度 替換為傳入的引數即可 longitude 當前經度 替換為傳入的引數即可 計算出的 distance 距離單位為km select id,name,address,latit...

java經緯度格式轉換

在數學中,表示角度的度 分 秒分別使用 符號進行表示。1 60 1 60 1 3600 由上述可知度分秒轉換度的計算公式為 dd mm ss dd mm 60 ss 3600 如 113 30 10.25 113 30 60 10.25 3600 113.502847 經緯度轉換 度分秒轉度 par...

按經緯度搜尋附近的人,並按距離排序的簡單實現。

這是一種簡單的實現,資料量不大的情況下還是能滿足需求的,寫在這裡做乙份記錄。當然也希望有其他更好的方案。主要思路就是 先以自己的經緯度為中心,計算一定半徑內的方形經緯度邊界,然後用此方形經緯度邊界過濾使用者,並使用乙個計算兩點經緯度之間距離的自定義資料庫函式計算距離,然後按計算得到的距離倒序 lon...