我們最近在開發(fā)一個交友聊天類的app,需要計算用戶與用戶之間的距離,然后通過距離來排序,距離排序還是比較簡單的,因為現(xiàn)在可以直接使用mysql來完成了。
在幾年前,我們也遇到過類似的需求,那時候我們是用的百度云的lbs來計算距離,所有的數(shù)據(jù)、經(jīng)緯度都要傳到百度的lbs云上,讀取的時候也需要讀取百度的,然后在到字的系統(tǒng)里面來補充剩余的字段信息,相比起來就麻煩多了,下面就看重慶網(wǎng)站建設(shè)公司如何直接在mysql里面計算距離。
重慶網(wǎng)站建設(shè)mysql計算經(jīng)緯度距離排序方法
1、數(shù)據(jù)表字段類型為 point,可以直接存經(jīng)緯度數(shù)據(jù),數(shù)據(jù)表如下:
2、sql如何寫point插入語句:
低于mysql8寫法:
INSERT INTO 表名 VALUES ( 其它字段,其它字段,GeomFromText('POINT(123.462202 41.804471)'),其它字段,其它字段)
mysql8版本寫法:
INSERT INTO 表名 VALUES ( 其它字段,其它字段,ST_GeomFromText('POINT(123.462202 41.804471)'),其它字段,其它字段)
區(qū)別在余函數(shù)加了個ST_,因為mysql8這個函數(shù)被重命名了
3、point字段更新語句
更新語句跟插入語句一樣的,就比較類似了
UPDATE 表名 SET 字段名=GeomFromText('POINT(116.427957 40.047081)') WHERE id = 1
mysql8版本寫法:
UPDATE 表名 SET 字段名=ST_GeomFromText('POINT(116.427957 40.047081)') WHERE id = 1
4、如何通過mysql直接計算距離進行排序
變量如下:
A=我的所在的經(jīng)緯度,如106.565758,29.539989
B=計算的距離,單位公里,如計算10公里內(nèi)的數(shù)據(jù)那么B就等于10
select 其它字段,st_distance(point(A),表中的經(jīng)緯度字段名)*100 as distance from 表名 where st_distance(point(A),表中的經(jīng)緯度字段名)*100 < B order by distance asc