当前位置:首页 > PHP > 正文内容

mysql查找附近的人,经纬度查询

陈杰2年前 (2020-11-04)PHP1240

经纬度排序


mysql函数

CREATE DEFINER=`root`@`localhost` FUNCTION `get_distance`(`lon1` float,`lat1` float,`lon2` float,`lat2` float) RETURNS double

begin

declare d double;

declare radius int;

set radius = 6378140; #假设地球为正球形,直径为6378140米

set d = (2*ATAN2(SQRT(SIN((lat1-lat2)*PI()/180/2) 

*SIN((lat1-lat2)*PI()/180/2)+ 

COS(lat2*PI()/180)*COS(lat1*PI()/180) 

*SIN((lon1-lon2)*PI()/180/2) 

*SIN((lon1-lon2)*PI()/180/2)), 

SQRT(1-SIN((lat1-lat2)*PI()/180/2) 

*SIN((lat1-lat2)*PI()/180/2) 

+COS(lat2*PI()/180)*COS(lat1*PI()/180) 

*SIN((lon1-lon2)*PI()/180/2) 

*SIN((lon1-lon2)*PI()/180/2))))*radius;

return d;

END


原生用法

select * from test where get_distance(13.66667,24.61667,longitude,latitude)<500000000;


select get_distance(13.66667,24.61667,longitude,latitude) AS d from test ORDER BY d asc;


严格模式


CREATE DEFINER=`root`@`localhost` FUNCTION `get_distance`(`lon1` float,`lat1` float,`lon2` float,`lat2` float) RETURNS int(11)

READS SQL DATA

begin

declare d INT;

declare radius int;

set radius = 6378140; #假设地球为正球形,直径为6378140米

set d = (2*ATAN2(SQRT(SIN((lat1-lat2)*PI()/180/2) 

*SIN((lat1-lat2)*PI()/180/2)+ 

COS(lat2*PI()/180)*COS(lat1*PI()/180) 

*SIN((lon1-lon2)*PI()/180/2) 

*SIN((lon1-lon2)*PI()/180/2)), 

SQRT(1-SIN((lat1-lat2)*PI()/180/2) 

*SIN((lat1-lat2)*PI()/180/2) 

+COS(lat2*PI()/180)*COS(lat1*PI()/180) 

*SIN((lon1-lon2)*PI()/180/2) 

*SIN((lon1-lon2)*PI()/180/2))))*radius;

return d;

END;


扫描二维码至手机访问

扫描二维码推送至手机访问。

版权声明:本文由何烦过虎溪发布,如需转载请注明出处。

转载请注明出处:http://95shouyou.com/?id=10

分享给朋友:

相关文章

laravel的Observer观察者模式模型事件实战

laravel的orm特别好用,特别是observer观察者模式,可以在不更改原有业务代码的情况下做到切入编程,有点类似于我们之前常用的钩子函数。下面就是我们深入observer观察者模式的实战代码现...

七牛云删除文件和批量删除文件

在项目中因为用到了七牛云的对象存储,价格公道,也降低我们的项目维护成本。但是在实际使用过程中,例如用户换了头像我们就需要删除用户之前的头像,以降低我们的存储成本。所以研究了一下七牛云的删除单个文件和批...

php对接支付宝转账到第三方接口实战

公司项目有一个用户钱包系统,用户创作的内容可以收到游客的打赏,当然就需要提现的接口了。最终选定的是支付宝转账接口,公司代收账户直接打款给用户绑定的支付宝账号,再也不用人工手动打款了。上代码准备好工具,...

laravel跨库多态关联实战

laravel跨库多态关联实战

点赞记录表做了分库分表,位于副库里面表结构该点赞表关联了8个不同的表,因为业务原因,评论回复表有四个板块,所以做了4个评论记录表,4个回复记录表,且结构有细微不同。目标是用户获得被点赞记录,根据不同的...

Laravel带条件查询多个count

Laravel带条件查询多个count

在一个数据表中,我们需要用到聚合函数count来查询符合条件的总数。举例一个场景:我们有一个帖子,这个帖子可以分别被好中差评,好中差评记录用一个单独的记录表来存储。如果用户点击好评,那么该帖子作者的经...

php对接七牛云短信验证码实战

短信验证码登录的用处非常的大,登录,注册,修改密码,安全相关的啥都可以干。选定的七牛云短信是因为存储也是用的七牛云,七牛的sdk都加载进来了,也懒得去换其他的厂家了。下面上代码:Controller层...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。