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