我们最近在开发一个交友聊天类的app,需要计算用户与用户之间的距离,然后通过距离来排序,距离排序还是比较简单的,因为现在可以直接使用mysql来完成了。
在几年前,我们也遇到过类似的需求,那时候我们是用的百度云的lbs来计算距离,所有的数据、经纬度都要传到百度的lbs云上,读取的时候也需要读取百度的,然后在到字的系统里面来补充剩余的字段信息,相比起来就麻烦多了,下面就看重庆网站建设公司如何直接在mysql里面计算距离。
重庆网站建设mysql计算经纬度距离排序方法
1、数据表字段类型为 point,可以直接存经纬度数据,数据表如下:
2、sql如何写point插入语句:
低于mysql8写法:
INSERT INTO 表名 VALUES ( 其它字段,其它字段,GeomFromText('POINT(123.462202 41.804471)'),其它字段,其它字段)
mysql8版本写法:
INSERT INTO 表名 VALUES ( 其它字段,其它字段,ST_GeomFromText('POINT(123.462202 41.804471)'),其它字段,其它字段)
区别在余函数加了个ST_,因为mysql8这个函数被重命名了
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=我的所在的经纬度,如106.565758,29.539989
B=计算的距离,单位公里,如计算10公里内的数据那么B就等于10
select 其它字段,st_distance(point(A),表中的经纬度字段名)*100 as distance from 表名 where st_distance(point(A),表中的经纬度字段名)*100 < B order by distance asc