MySQL计算结果中所有地理位置之间的距离

时间:2011-11-09 08:27:49

标签: mysql sql geolocation distance

我想计算结果中所有地理位置之间的距离(表示为纬度和经度)

MySQL表如下所示:

  • 位置1,纬度:x,经度:y
  • 位置2,纬度:a,经度:b
  • 位置3,纬度:c,经度:d
  • ...

输出应该是从位置1到位置2的距离,以及位置2和位置3之间的距离,等等。

我知道如何计算两个位置之间的距离,但我不知道如何总结距离以及如何总是计算两个连续位置/行之间的距离

感谢您的帮助!

编辑:我打算使用以下函数计算两个位置之间的距离

CREATE FUNCTION `GeoDistance`(  
 latitude1  numeric (9,6),  
 longitude1  numeric (9,6),  
 latitude2  numeric (9,6),  
 longitude2  numeric (9,6)  
) RETURNS decimal(10,5)  
    READS SQL DATA  
BEGIN  

DECLARE  x  decimal (20,20);  
DECLARE  pi  decimal (21,20);  
SET  pi = 3.14159265358979323846;  
SET  x = sin( lat1 * pi/180 ) * sin( lat2 * pi/180 ) 
       + cos( lat1 * pi/180 ) * cos( lat2 * pi/180 ) 
       * cos( abs( (lon2 * pi/180) - (lon1 *pi/180)));  
  SET  x = acos( x );  
  RETURN ( 1.852 * 60.0 * ((x/pi)*180) );
END

1 个答案:

答案 0 :(得分:2)

假设该表为LOCATIONS (ID, LAT, LON),为简化起见:

SELECT SUM(SQRT(POW(A.LAT - B.LAT, 2)+POW(A.LON - B.LON, 2)))
FROM LOCATIONS A
JOIN LOCATIONS B ON (A.ID = B.ID - 1)

基本上,我们自己连接位置,位置之间的偏移量为1(我可以自由地假设ID没有间隙),然后对于每对点我们计算距离(公式非常简单,由谷歌详细解释,然后总结所有这些距离。