计算MySQL中的经纬度距离(mysql经纬度距离)

计算MySQL中的经纬度距离是很常见的任务。有很多用于计算两点之间距离的MySQL函数,但是它们可能存在不精确,或者大多数只能计算欧氏距离。 因此,最好的办法就是自己编写sql语句,使用Haversine公式计算经纬度距离。

Haversine公式表示为:

a=sin²(Δφ/2)+cos Φ1 * cos Φ2*sin²(Δλ/2)

b=2 * asin(√a)

c=R*b

其中,R是地球平均半径,单位是公里,Φ1和Φ2是纬度,ΔΦ和Δλ是两点经度和维度之间的差。

下面是一个计算两点之间经纬度距离的MySQL函数:

CREATE FUNCTION km_between(lat1 FLOAT, lon1 FLOAT, lat2 FLOAT, lon2 FLOAT) RETURNS FLOAT

BEGIN

DECLARE R INTEGER DEFAULT 6371;

DECLARE dLat FLOAT;

DECLARE dLon FLOAT;

DECLARE a FLOAT;

DECLARE c FLOAT;

SET

dLat = radians(lat2 – lat1);

SET

dLon = radians(lon2 – lon1);

SET

a = sin(dLat/2) * sin(dLat/2) + cos(radians(lat1)) * cos(radians(lat2)) * sin(dLon/2) * sin(dLon/2);

SET

c = 2 * atan2(sqrt(a), sqrt(1-a));

RETURN R * c;

END;

运行下面的命令,可以得到一个经纬度距离:

mysql> SELECT km_between(30.4578, 76.4419, 30.5678, 76.4419);

+—————————-+

| km_between(30.4578,76.4419,30.5678,76.4419) |

+—————————-+

| 10.0102 |

+—————————-+

通过使用上述函数,我们可以准确地计算经纬度距离,而无需担心所得结果不够准确。 同时,我们也可以根据不同的需求,调整该函数并使用Haversine公式来计算距离。

MySQL也提供了计算乘积的函数,可以用于计算距离。 例如,下面的命令可以计算北京到上海之间的距离:

mysql> SELECT 111.1 * DEGREES(ACOS( COS(RADIANS(39.913818)) *

> COS(RADIANS(116.363625)) * COS(RADIANS(31.222204) –

> RADIANS(121.456632)) + SIN(RADIANS(39.913818)) *

> SIN(RADIANS(116.363625)))) AS distance ;

+————–+

| distance |

+————–+

| 1183.6430381 |

+————–+

从上面的例子可以看出,MySQL中计算经纬度距离并不复杂,我们可以通过使用函数或公式来计算任意两点之间的距离,而且结果会比较精确。


数据运维技术 » 计算MySQL中的经纬度距离(mysql经纬度距离)