润雪观点

将想法与焦点,与您一起共享

润雪观点

重庆网站建设mysql计算经纬度距离排序方法

2021-03-15 润雪科技:重庆网站建设公司 浏览器:1397

我们最近在开发一个交友聊天类的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 




本文由重庆网站建设公司润雪科技原创,文章地址:/news/id/1830.html