计算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中计算经纬度距离并不复杂,我们可以通过使用函数或公式来计算任意两点之间的距离,而且结果会比较精确。