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

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

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

经纬度排序


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实现微信公众号授权登录实战

微信公众号授权登录实战框架:laravel依赖:overtrue/wechat首先安装一下easywechat依赖composer require overtrue/wechat:...

利用workerman实现webrtc实时音视频通话

利用workerman实现webrtc实时音视频通话

实现原理利用workerman的websocket实现实时消息传递。webrtc自带p2p功能,利用STUN中继服务器实现webrtc实时音视频看看我们的前端文件,只是一个单页面<html>...

Lumen框架报错Cannot declare class Event, because the name is already in use

Lumen框架报错Cannot declare class Event, because the name is already in use

Lumen框架报错信息Cannot declare class Event, because the name is already in use(1/1) ErrorExceptionCa...

laravel通过模板html生成word文档

laravel通过模板html生成word文档

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

php接拼多多的多多进宝,实现淘客功能

php接拼多多的多多进宝,实现淘客功能

在项目中有一个板块是接拼多多的多多进宝,实现多多客的功能,主要就是拉取商品列表,拉取商品详情,生成推广链接。composer require justmd5/duoduoke-sd...

发表评论

访客

看不清,换一张

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