php数据库经纬度距离,PHP mysql 计算两个经纬度坐标距离

mysql版

SELECT 2 * 6378.137 * ASIN( SQRT( POW( SIN( PI( ) * ( 114.09576416015625 - 114.1798 ) /360 ) , 2 ) + COS( PI( ) * 114.09576416015625 /180 ) * COS( 114.1798 * PI( ) /180 ) * POW( SIN( PI( ) * ( 22.3932534047735 - 114.1798 ) /360 ) , 2 ) ) ) AS a

FROM dual

php版

function rad($d)

{

return $d * 3.1415926535898 / 180.0;

}

function GetDistance($lat1, $lng1, $lat2, $lng2)

{

$EARTH_RADIUS = 6378.137; //公里

$radLat1 = rad($lat1);

$radLat2 = rad($lat2);

$a = $radLat1 – $radLat2;

$b = rad($lng1) – rad($lng2);

$s = 2 * asin(sqrt(pow(sin($a/2),2) +

cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)));

$s = $s *$EARTH_RADIUS;

$s = round($s * 10000) / 10000;

return $

mysql版

CREATE DEFINER=`root`@`localhost` FUNCTION `distance`(lat1 float,lng1 float,lat2 float,lng2 float) RETURNS float

BEGIN

set @num=

2 * 6378.137* ASIN(SQRT(POW(SIN(PI() * (lat1 – lat2) / 360), 2) + COS(PI() * lat1 / 180)

* COS(lat2* PI() / 180) * POW(SIN(PI() * (lng1 – lng2) / 360), 2)));

RETURN @num;

END

google地图提供的方法(PHP版本)

class Distance{

const EARTH_RADIUS = 6378.137; // earth radius (const) kilometer

/**

*

*Example:

*$precision = 49;

*ini_set("precision", $precision);

*echo pi(); //will output 3.141592653589793115997963468544185161590576171875

*

*1 kilometer = 0.621371192 mile

*

*@param double d

*@return double data

*/

private function rad( $d )

{

return $d * M_PI / 180.0;

}

/**

*

*Example : get_distance(44.2112,-88.4175,34.5082,-82.6498)

*Get Distance between two point : longitude,latitude(lat1,lng1 => lat2,lng2 )

*

*@param double d

*@return double data

*

*/

public function get_distance( $lat1, $lng1, $lat2, $lng2, $base = 1000 )

{

$radLat1 = floatval( $this->rad($lat1) );

$radLat2 = floatval( $this->rad($lat2) );

$a = $radLat1 - $radLat2;

$b = $this->rad($lng1) - $this->rad($lng2);

$s = 2 * asin(sqrt(pow(sin($a/2),2) + cos($radLat1) * cos($radLat2) * pow(sin($b/2),2)));

$s = $s * self::EARTH_RADIUS;

$s = round($s * 10000) / 10000;

return $s;

}

}

参看:

http://dev.mysql.com/doc/refman/5.1/zh/spatial-extensions-in-mysql.html

http://blog.csdn.net/aggrelxf/article/details/12054513

http://blog.sina.com.cn/s/blog_7bbfd5fd01017d1e.html

http://lesorb.iteye.com/blog/1945755

http://digdeeply.org/archives/06152067.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值