안드로이드 프로그래밍을 하던 중 사용자와 사용자간의 거리를 계산해야 할 일이 생겼다.
각 사용자의 위치는 위도와 경도로 알고 있기 때문에 아래 공식을 이용하여 적용했다.
좌표 1(위도,경도)과 좌표 2(위도,경도) 거리 계산 방법
sLat,sLng 는 좌표1(로그인한 사용자)의 위도, 경도 값이다.
double sLat = Double.valueOf(LoginUser.item.lat);
double sLng = Double.valueOf(LoginUser.item.lng);
eLat, eLng는 대상(target)의 위도,경도 값이다.
double eLat = Double.valueOf(item.lat);
double eLng = Double.valueOf(item.lng);
String distance = SocialUtil.calcDistance(sLat, sLng, eLat, eLng);
distanceStr = “● 나와 ” + distance +” 거리에 있습니다.”;
거리를 구한다음 textview에 표시를 해준다.
socialtxt.setText(distanceStr);
삼각함수를 이용하여 사용자간의 거리를 구하는 핵심 공식은 아래와 같다.
SocialUtil.calcDistance
public static String calcDistance(double lat1, double lon1, double lat2, double lon2){
double EARTH_R, Rad, radLat1, radLat2, radDist;
double distance, ret;
EARTH_R = 6371000.0;
Rad = Math.PI/180;
radLat1 = Rad * lat1;
radLat2 = Rad * lat2;
radDist = Rad * (lon1 – lon2);
distance = Math.sin(radLat1) * Math.sin(radLat2);
distance = distance + Math.cos(radLat1) * Math.cos(radLat2) * Math.cos(radDist);
ret = EARTH_R * Math.acos(distance);
double rslt = Math.round(Math.round(ret) / 1000);
String result = rslt + ” km”;
if(rslt == 0) result = Math.round(ret) +” m”;
return result;
}
결과 화면은 아래와 같다.
화면을 보면 로그인한 사용자와 친구로 등록된 사용자의 거리가 제대로 표시되고 있다.