올해는 머신러닝이다.
Android 주어진 두 좌표 간의 거리 계산 본문
출처 : 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;
}
결과 화면은 아래와 같다
'Android > 지도' 카테고리의 다른 글
[펌]경도 위도를 이용한 기준 반경 내 업체 구하기 [PHP, MySQL 이용] (0) | 2014.12.26 |
---|---|
주어진 위도,경도로 범위 구하기 (0) | 2014.12.26 |
[펌]주변 배달 업체 위치 구하는 소스 (0) | 2014.12.23 |
Android Google Map 주변 Api 찍는법 (0) | 2014.12.23 |
google maps api v2 현재 위치 마커 찍기 (0) | 2014.12.23 |