「MySQL資料庫」如何根據兩點經緯度計算距離

「MySQL數據庫」如何根據兩點經緯度計算距離

我們經常在一些應用中看到類似這樣的功能,即根據用戶定位顯示距離用戶由近及遠的商品或商家。如下圖所示:

「MySQL數據庫」如何根據兩點經緯度計算距離

在上圖中,我們可以看到平臺顯示了一些商家,同時標註了它們離我所在位置的距離。這樣的設計對於用戶或者商家來說體驗都是比較好的,一方面有助於用戶篩選商家,另一方面也幫助了商家進行精確營銷。

那這是如何做到的呢?

在一開始入手這個功能的時候,我曾考慮先從MySQL數據庫裡拿出數據,然後在頁面渲染的時候,再利用第三方地圖庫(如騰訊地圖,高德地圖等),計算出位置,渲染到頁面。如果你單論是否可以實現這樣的功能,那這樣的方案是沒有問題的;但你若問這樣的方案實現起來是否麻煩,那我就不能亂下定論了,因為畢竟距離的計算在前端處理。

那可不可以直接在MySQL數據庫裡計算距離呢?

最近在重新研究此功能的時候,我發現是可以直接在MySQL數據庫裡直接計算距離的。

首先,獲取計算公式,如下:

「MySQL數據庫」如何根據兩點經緯度計算距離

然後,根據公式,在MySQL數據庫裡創建一個函數DISTANCE,如下:

「MySQL數據庫」如何根據兩點經緯度計算距離

第三,調用DISTANCE函數,並傳入兩點的經緯度,如下:

「MySQL數據庫」如何根據兩點經緯度計算距離

以上SQL語句只是計算兩點之間的距離,如果你想在計算距離的同時,再作篩選和排序,你可以如下操作:

「MySQL數據庫」如何根據兩點經緯度計算距離

這樣,你也可以實現根據用戶定位由遠及近的顯示商品或商家。

對比,在前端計算距離和在MySQL數據庫計算距離,發現在MySQL數據庫上操作有很大優勢,它不僅可以輕鬆的計算距離,而且還可以輕鬆的按照距離進行排序、篩選等。

根據個人經驗,推薦大家使用MySQL數據庫計算兩點距離。



分享到:


相關文章: