/** * calc_map_distance() , 根據地圖上的兩個點各自的x,y坐標,計算出2點之間的直線距離 * @param array $point_1 第1個點的x,y坐標 array( 101 , 202 ) * @param array $point_2 第2個點的x,y坐標 array( 101 , 202 ) * @param bool $calc_as_string 是否計算為字符串公里距離 , 如果未否返回數字 * @return float | false | string */ public static function calc_map_distance( $point_1=array( ) , $point_2=array( ) , $calc_as_string=true ) { if( empty( $point_1 ) || empty( $point_2 ) ){ return false; } // 經緯度不存在,或者經緯度超過最大范圍 +-180 , +-90 ,返回false $p1_x = $point_1[0]; $p1_y = $point_1[1]; $p2_x = $point_2[0]; $p2_y = $point_2[1]; if( $p1_x < -180 || $p1_x > 180 || $p2_x < -180 || $p2_x > 180 || $p1_y < -90 || $p1_y > 90 || $p2_y < -90 || $p2_y > 90 ){ return false; } // 根據2點各自的坐標,計算2點之間直線距離的公式 $distance = round(6378.138*2*asin(sqrt(pow(sin(( $p1_x *pi()/180-$p2_x*pi()/180)/2),2)+cos( $p1_x *pi()/180)*cos($p2_x*pi()/180)* pow(sin(( $p1_y *pi()/180-$p2_y*pi()/180)/2),2)))*1000); // 是否計算為字符串公里距離 if( !$calc_as_string ){ return $distance; } // 如果計算為字符串公里距離 if( $distance / 1000 > 1 ){ $k = (string)round( $distance / 1000 , 1 ); $m = (string)$distance % 1000 ; $distance = "{$k}公里{$m}米"; } else{ $distance = "{$distance}米"; } return $distance; }
結果:"distance": "9799.1公里114米"