计算两个地理坐标之间的距离

计算两个地理坐标之间的距离

下面这个函数(PHP实现)用于计算两个地理坐标之间的距离,主要用于处理源自Google地图的坐标数据。

验证数据:[48.856667, 2.350987], [38.895113, -77.036366]
验证结果:6172.4281776242KM

01 /**
02   * Calculate the distance between two coordinates.
03   * @param array $s, array(float:latitude, float: longitude)
04   * @param array $e, array(float:latitude, float: longitude)
05   * @return float, the distance
06   */
07 function geo_distance( $s , $e ) {
08  
09      //earth's mean radius in KM
10      $r = 6378.137;
11  
12      $s [0] = deg2rad ( $s [0]);
13      $s [1] = deg2rad ( $s [1]);
14  
15      $e [0] = deg2rad ( $e [0]);
16      $e [1] = deg2rad ( $e [1]);
17  
18      $d0 = abs ( $s [0] - $e [0]);
19      $d1 = abs ( $s [1] - $e [1]);
20  
21      $p = pow(sin( $d0 /2), 2) + cos ( $s [0]) * cos ( $e [0]) * pow(sin( $d1 /2), 2);
22  
23      $ds = $r * 2 * asin(sqrt( $p ));
24  
25      return $ds ;
26 }

MySQL Function

01 DELIMITER //
02 CREATE FUNCTION geo_distance(lat1 FLOAT , lng1 FLOAT , lat2 FLOAT , lng2 FLOAT ) RETURNS FLOAT
03 BEGIN
04  
05      DECLARE r INT DEFAULT 6378137;
06      DECLARE s0 FLOAT ;
07      DECLARE s1 FLOAT ;
08      DECLARE e0 FLOAT ;
09      DECLARE e1 FLOAT ;
10  
11      DECLARE d0 FLOAT ;
12      DECLARE d1 FLOAT ;
13  
14      SET s0 = RADIANS(lat1);
15      SET s1 = RADIANS(lng1);
16      SET e0 = RADIANS(lat2);
17      SET e1 = RADIANS(lng2);
18  
19      SET d0 = ABS (s0 - e0);
20      SET d1 = ABS (s1 - e1);
21  
22      RETURN r * 2 * ASIN(SQRT(POW(SIN(d0/2),2) + COS(s0)*COS(e0)*POW(SIN(d1/2),2)));
23  
24 END //
25  
26 DELIMITER ;

About James Tang

Web Developer, focusing on large-scale web application and server architecture and implementation.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值