傳入引數 緯度 40.0497810000 經度 116.3424590000/*傳入的引數為 緯度 緯度 經度 asc公升序由近至遠 desc 降序 由遠到近
*/select
*,round
( 6378.138 * 2 * asin
(
sqrt
(
pow(
sin(
(40.0497810000 * pi() / 180 - lat * pi() / 180) / 2),
2) + cos(40.0497810000 * pi() / 180) * cos(lat * pi() / 180) * pow
(
sin(
(116.3424590000 * pi() / 180 - lon * pi() / 180) / 2),2))
) * 1000)
asjuli
from
customer
order by
juli asc
這樣會把資料庫中所有店鋪都計算一遍,而在實際的使用中,不太可能會發生需要計算該使用者與所有其他使用者的距離,然後再排序的情況,當使用者數量達到乙個級別時,就可以在乙個較小的範圍裡進行搜尋,而非在所有使用者中進行搜尋.
所以對於這個例子,我增加了4個where條件,只對於經度和緯度大於或小於該使用者1度(111公里)範圍內的使用者進行距離計算,同時對資料表中的經度和緯度兩個列增加了索引來優化where語句執行時的速度.
最終的sql語句如下
$sql='select * from users_location wherelatitude > '.$lat.'-1 and
latitude < '.$lat.'+1 and
longitude > '.$lon.'-1 and
longitude < '.$lon.'+1
order by acos(sin(('.$lat.' * 3.1415) / 180 ) *sin((latitude * 3.1415) / 180 ) +cos(('.$lat.' * 3.1415) / 180 ) * cos((latitude * 3.1415) / 180 ) *cos(('.$lon.'* 3.1415) / 180 - (longitude * 3.1415) / 180 ) ) * 6380 asc limit 10';
店鋪經緯度計算距離然後分頁排序
根據經緯度計算距離,根據距離排序或者是根據店鋪銷量排序 如下 topapi user.shop.list 店鋪分頁距離排序 介面作用說明 public apidescription 店鋪列表 定義api傳入的應用級引數 desc 用於在呼叫界面前,根據定義的引數,過濾必填引數是否已經參入,並且定義引...
如何計算點到線段的最近距離
在二維 三維圖形學系統當中,線段的拾取是乙個經常使用的功能 如何根據滑鼠點來判斷線段是否被選擇了,最主要的方法之一是通過點到線段的最小距離來判定的 無論二維還是三維情況下,使用點到直線的距離公式似乎是最直接的選擇 但是不要忘記點到直線公式計算的是點和直線之間的關係,而不是點和線段之間的關係 演算法如...
如何計算點到線段的最近距離
在二維 三維圖形學系統當中,線段的拾取是乙個經常使用的功能 如何根據滑鼠點來判斷線段是否被選擇了,最主要的方法之一是通過點到線段的最小距離來判定的 無論二維還是三維情況下,使用點到直線的距離公式似乎是最直接的選擇 但是不要忘記點到直線公式計算的是點和直線之間的關係,而不是點和線段之間的關係 演算法如...