«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

올해는 머신러닝이다.

Android 주어진 두 좌표 간의 거리 계산 본문

Android/지도

Android 주어진 두 좌표 간의 거리 계산

행복한 수지아빠 2014. 12. 29. 12:02

출처 : http://bugnote.tistory.com/2


안드로이드 프로그래밍을 하던 중 사용자와 사용자간의 거리를 계산해야 할 일이 생겼다.

각 사용자의 위치는 위도와 경도로 알고 있기 때문에 아래 공식을 이용하여 적용했다.

좌표 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;
    } 

결과 화면은 아래와 같다