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

    技术2022-05-19  21

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

    Posted on by James Tang

    下面这个函数(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.

    View all posts by James Tang

    最新回复(0)