计算两个地理坐标之间的距离
计算两个地理坐标之间的距离
下面这个函数(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.
posted on 2011-04-20 15:59 GaryGaryGary 阅读(628) 评论(0) 收藏 举报
浙公网安备 33010602011771号