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

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

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

经纬度排序


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

分享给朋友:

相关文章

通过supervisor管理laravel的queue队列

通过supervisor管理laravel的queue队列

配置文件[program:queue]command=php artisan queue:work redis --tries=3 --delay=3directory=/www/wwwroot/sh...

laravel集成极光推送实战

公司项目需要用到app推送消息通知,市面上很多推送渠道商,选来选去最终选定了极光推送,因为项目使用laravel写的,laravel自身又有模型事件,所以研究了一下,在不改动原有代码的情况下,给项目加...

通过代码创建多个同样的mysql表

在分库分表中可能要同时创建多个结构相同但后缀不同的表,通过代码实现for ($i = 3; $i <= 20; $i++) {    DB::connection('...

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

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

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

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

laravel通过模板html生成word文档

laravel通过模板html生成word文档

因为公司项目需要,内部的管理系统有一个php实时查询数据库,根据内容来生成word文档排版没有什么需求,实现原理是查询数据库,然后用laravel自带的模板引擎,生成一个html网页,然后修改网页的r...

发表评论

访客

看不清,换一张

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