您的位置:首页 > 其它

计算两个地理坐标之间的距离

2011-04-20 15:59 295 查看

计算两个地理坐标之间的距离

Postedon
26/09/2010

by
JamesTang

下面这个函数(PHP实现)用于计算两个地理坐标之间的距离,主要用于处理源自Google地图的坐标数据。

验证数据:[48.856667,2.350987],[38.895113,-77.036366]

验证结果:6172.4281776242KM

01

/**

02


*Calculatethedistancebetweentwocoordinates.

03


*@paramarray$s,array(float:latitude,float:longitude)

04


*@paramarray$e,array(float:latitude,float:longitude)

05


*@returnfloat,thedistance

06


*/

07

function

geo_distance(

$s

,

$e

){

08

09


//earth'smeanradiusinKM

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

}

MySQLFunction

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;



AboutJamesTang

WebDeveloper,focusingonlarge-scalewebapplicationandserverarchitectureandimplementation.

ViewallpostsbyJamesTang→

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: