출처 : http://blog.naver.com/PostView.nhn?blogId=shcworld&logNo=130098171734
나중에 쓸일이 있을것 같아서......
01.
public
short
bearingP1toP2(
double
P1_latitude,
double
P1_longitude,
double
P2_latitude,
double
P2_longitude)
02.
{
03.
// 현재 위치 : 위도나 경도는 지구 중심을 기반으로 하는 각도이기 때문에 라디안 각도로 변환한다.
04.
double
Cur_Lat_radian = P1_latitude * (
3.141592
/
180
);
05.
double
Cur_Lon_radian = P1_longitude * (
3.141592
/
180
);
06.
07.
08.
// 목표 위치 : 위도나 경도는 지구 중심을 기반으로 하는 각도이기 때문에 라디안 각도로 변환한다.
09.
double
Dest_Lat_radian = P2_latitude * (
3.141592
/
180
);
10.
double
Dest_Lon_radian = P2_longitude * (
3.141592
/
180
);
11.
12.
// radian distance
13.
double
radian_distance =
0
;
14.
radian_distance = Math.acos(Math.sin(Cur_Lat_radian) * Math.sin(Dest_Lat_radian) + Math.cos(Cur_Lat_radian) * Math.cos(Dest_Lat_radian) * Math.cos(Cur_Lon_radian - Dest_Lon_radian));
15.
16.
// 목적지 이동 방향을 구한다.(현재 좌표에서 다음 좌표로 이동하기 위해서는 방향을 설정해야 한다. 라디안값이다.
17.
double
radian_bearing = Math.acos((Math.sin(Dest_Lat_radian) - Math.sin(Cur_Lat_radian) * Math.cos(radian_distance)) / (Math.cos(Cur_Lat_radian) * Math.sin(radian_distance)));
// acos의 인수로 주어지는 x는 360분법의 각도가 아닌 radian(호도)값이다.
18.
19.
double
true_bearing =
0
;
20.
if
(Math.sin(Dest_Lon_radian - Cur_Lon_radian) <
0
)
21.
{
22.
true_bearing = radian_bearing * (
180
/
3.141592
);
23.
true_bearing =
360
- true_bearing;
24.
}
25.
else
26.
{
27.
true_bearing = radian_bearing * (
180
/
3.141592
);
28.
}
29.
30.
return
(
short
)true_bearing;
31.
}