首页 >

mysql求两经纬度距离 |activemq mysql持久化

mysql索引名重复,docker连接不到mysql,mysql修改sql_mode,mysql验证服务器,mysql的降序语句,activemq mysql持久化mysql求两经纬度距离 |activemq mysql持久化
SELECT ROUND(6378.138*2*ASIN(SQRT(POW(SIN((lat1*PI()/180-lat2*PI()/180)/2),2)+COS(lat1*PI()/180)*COS(lat2*PI()/180)*POW(SIN((lng1*PI()/180-lng2*PI()/180)/2),2))),2) AS distance FROM table_name;

以上SQL语句中,round用于将计算结果保留小数点后两位,6378.138为地球半径,lat1和lng1表示第一组经纬度,lat2和lng2表示第二组经纬度。

大家可以通过将这段SQL语句添加到建表SQL语句中来创建一个计算两个经纬度距离的存储过程。

DELIMITER $$
CREATE PROCEDURE `get_distance`(IN lat1 DOUBLE, IN lng1 DOUBLE, IN lat2 DOUBLE, IN lng2 DOUBLE, OUT distance DOUBLE)
BEGIN
SET distance = ROUND(6378.138*2*ASIN(SQRT(POW(SIN((lat1*PI()/180-lat2*PI()/180)/2),2)+COS(lat1*PI()/180)*COS(lat2*PI()/180)*POW(SIN((lng1*PI()/180-lng2*PI()/180)/2),2))),2);
END$$
DELIMITER ;

大家也可以将计算距离的部分抽象成一个自定义函数,方便在SQL语句中使用。

DELIMITER $$
CREATE FUNCTION `get_distance`(lat1 DOUBLE, lng1 DOUBLE, lat2 DOUBLE, lng2 DOUBLE) RETURNS DOUBLE
BEGIN
RETURN ROUND(6378.138*2*ASIN(SQRT(POW(SIN((lat1*PI()/180-lat2*PI()/180)/2),2)+COS(lat1*PI()/180)*COS(lat2*PI()/180)*POW(SIN((lng1*PI()/180-lng2*PI()/180)/2),2))),2);
END$$
DELIMITER ;

在使用存储过程和自定义函数时,大家可以将经纬度作为参数传入,得到计算结果。例如:

SELECT get_distance(39.908722,116.397499,30.658653,104.064952);

这将返回北京和成都之间的距离。


mysql求两经纬度距离 |activemq mysql持久化
  • mysql怎样给字段加自增长 |rmysql 包
  • mysql怎样给字段加自增长 |rmysql 包 | mysql怎样给字段加自增长 |rmysql 包 ...

    mysql求两经纬度距离 |activemq mysql持久化
  • mysql安装后的文件夹 |mysql date 计算
  • mysql安装后的文件夹 |mysql date 计算 | mysql安装后的文件夹 |mysql date 计算 ...

    mysql求两经纬度距离 |activemq mysql持久化
  • mysql自增如何添加新记录? |mysql增加默认约束
  • mysql自增如何添加新记录? |mysql增加默认约束 | mysql自增如何添加新记录? |mysql增加默认约束 ...