为了账号安全,请及时绑定邮箱和手机立即绑定

在mysql中使用经度和纬度查找两点之间的距离

在mysql中使用经度和纬度查找两点之间的距离

慕容3067478 2019-11-14 09:32:28
嗨,我有下表 -------------------------------------------- |  id  |  city  |  Latitude  |  Longitude  | -------------------------------------------- |  1   |   3    |   34.44444 |   84.3434   | -------------------------------------------- |  2   |   4    | 42.4666667 | 1.4666667   | -------------------------------------------- |  3   |   5    |  32.534167 | 66.078056   | -------------------------------------------- |  4   |   6    |  36.948889 | 66.328611   | -------------------------------------------- |  5   |   7    |  35.088056 | 69.046389   | -------------------------------------------- |  6   |   8    |  36.083056 |   69.0525   | -------------------------------------------- |  7   |   9    |  31.015833 | 61.860278   | --------------------------------------------现在我想获得两点之间的距离。假设一个用户有一个城市3,一个用户有一个城市7。我的情况是一个用户有一个城市和纬度,纬度正在搜索其他用户与城市的距离。例如,拥有城市3的用户正在搜索。他想得到其他城市的用户的距离是7。我已搜索到以下查询SELECT `locations`.`city`, ( 3959 * acos ( cos ( radians(31.589167) ) * cos( radians( Latitude ) ) * cos( radians( Longitude ) - radians(64.363333) ) + sin ( radians(31.589167) ) * sin( radians( Latitude ) ) ) ) AS `distance` FROM `locations` HAVING (distance < 50)据我所知,此查询查找从一个点到所有其他点的距离。现在我想获得一个点到另一点的距离。任何指导方针将不胜感激。
查看完整描述

3 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

这是MySQL查询和函数,用于获取两个纬度和经度之间的距离,距离将以KM返回。


MySQL查询:-


SELECT (6371 * acos( 

                cos( radians(lat2) ) 

              * cos( radians( lat1 ) ) 

              * cos( radians( lng1 ) - radians(lng2) ) 

              + sin( radians(lat2) ) 

              * sin( radians( lat1 ) )

                ) ) as distance from your_table

Mysql功能:-


DELIMITER $$

CREATE FUNCTION `getDistance`(`lat1` VARCHAR(200), `lng1` VARCHAR(200), `lat2` VARCHAR(200), `lng2` VARCHAR(200)) RETURNS varchar(10) CHARSET utf8

begin

declare distance varchar(10);


set distance = (select (6371 * acos( 

                cos( radians(lat2) ) 

              * cos( radians( lat1 ) ) 

              * cos( radians( lng1 ) - radians(lng2) ) 

              + sin( radians(lat2) ) 

              * sin( radians( lat1 ) )

                ) ) as distance); 


if(distance is null)

then

 return '';

else 

return distance;

end if;

end$$

DELIMITER ;

如何在您的PHP代码中使用


SELECT getDistance(lat1,lng1,$lat2,$lng2) as distance 

FROM your_table.


查看完整回答
反对 回复 2019-11-14
  • 3 回答
  • 0 关注
  • 744 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信