본문 바로가기

안드로이드

두 좌표값을 이용한 방향각 구하기

출처 : http://blog.naver.com/PostView.nhn?blogId=shcworld&logNo=130098171734

나중에 쓸일이 있을것 같아서......

01.public short bearingP1toP2(double P1_latitude, double P1_longitude, double P2_latitude, doubleP2_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.}