php、mysql两个经纬度之间的距离的方法

php计算两个经纬度之间的距离的方法

/**
* 函数用途描述 计算经纬度 计算弧度
* @date: 2013-8-26
* @author: fanhe
* @return:
*/
function rad($d)
{
return $d * 3.1415926535898 / 180.0;
}

/**
* 函数用途描述 计算经纬度距离
* @date: 2013-8-26
* @author: fanhe
* @return:
*/
function get_distance($lng1, $lat1, $lng2, $lat2)
{
$EARTH_RADIUS = 6378.137;
$radLat1 = rad($lat1);
//echo $radLat1;
$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 $s;
}

mysql计算两个经纬度之间的距离的方法加排序
SELECT * , ( 2 * 6378.137 * ASIN( SQRT( POW( SIN( PI( ) * ( latitude1 - latitude2 ) /360 ) , 2 ) + COS( PI( ) * store_latitude1/180 ) * COS( store_latitude2 * PI( ) /180 ) * POW( SIN( PI( ) * ( longtude 1- longtude 2) /360 ) , 2 ) ) ) ) AS lu
FROM `pt_store`
WHERE 1
LIMIT 0 , 30
mysql效率貌似不是很高 也可以通过使用sphinx的索引以及SetGeoAnchor方法来解决~

发表评论

电子邮件地址不会被公开。 必填项已用*标注