올해는 머신러닝이다.
주어진 위도,경도로 범위 구하기 본문
출처 : http://blog.naver.com/blow1/150106632098
해당 위도와 경도가 주어진 구역반경에 들어오는지 체크 한다.
아래는 위,경도를 통한 도분초를 계산하는 방법이며 마지막에 실제 함수를 작성하였다.
구글 거리계산기와 아래 함수를 비교하여 보니 정확한 계산치를 확인 할 수 있었다.
하지만, 아래 계산법은 우리 나라에 한해서만 적용되어야 할 듯 하다.( 서핑 하다 보니 이러저러한 이유로 지구 전체에 대한 것은 좀더 상세한 계산법이 필요 할 듯 하다)
lat : 위도 , lon: 경도.
ex>35.3036944
도 : 35
분 : 0.3036944 * 60 : int : 18
초 : (0.3036944 * 60 - 18)*60 : 13.3
35도 18분 13.3초
A 지점 : 동경 127도 30분 20초 북위 : 36도 27분 08초
B 지점 : 동경 127도 29분 30초 북위 : 36도 28분 00초
C 지점 : 경도 00도 1분 10초 위도 : 00도 01분 08초
경도간 거리 : 0도*88.8 + 1분 * 1.48 + 10초 * 0.025 = 1.73km
위도간 거리 : 0도*111 + 1분 * 1.85 + 8초 * 0.031 = 2.10km
두지점간 거리 : 루트 (1.73^2 + 2.10^2) = 2.72km
#define DIV_VALUE 10000000
int distanceCmp(unsigned int lat1, // 기준 위도,
unsigned int lon1, // 기준 경도,
unsigned int lat2, // 대상 위도,
unsigned int lon2, // 대상 경도
unsigned int nCmpLat, // 위도간 거리
unsigned int nCmpLon // 경도간 거리
)
{
/*
위도,경도에 대한 절대값 계산
*/
double lon = lon1 > lon2 ? (lon1 - lon2)/(double)DIV_VALUE : (lon2-lon1)/(double)DIV_VALUE;
double lat = lat1 > lat2 ? (lat1 - lat2)/(double)DIV_VALUE : (lat2-lat1)/(double)DIV_VALUE;
/*
경도에 대한 도분초및 거리 계산
*/
int rad = (int)lon;
int min = (lon-rad)*60;
double sec = ((lon-rad)*60 - min)*60;
unsigned int lon_dist, lat_dist;
lon_dist = ((rad * 88.8) + (min*1.48) + (sec*0.025)) * 1000; // m단위
/*
위도에 대한 도분초및 거리 계산
*/
rad = (int)lat;
min = (lat-rad)*60;
sec = ((lat-rad)*60 - min)*60;
lat_dist = ((rad * 111) + (min*1.85) + (sec*0.031)) * 1000; // m단위
if( nCmpLat == 0 ){ // 원 형태의 구역반경
// 직선거리만을 조건으로 한다.
int realDist = sqrt((lon_dist*lon_dist)+(lat_dist*lat_dist));
if( nCmpLon >= realDist ){
return 1;
}
}else if( nCmpLat >= lat_dist && nCmpLon >= lon_dist ){ // 사각 형태의 구역반경
// 종/횡측 거리안에 들어오는지 확인한다.
return 1;
}
return 0;
}
[출처] 위도, 경도로 거리(구역) 구하기|작성자 서비
'Android > 지도' 카테고리의 다른 글
Android 주어진 두 좌표 간의 거리 계산 (0) | 2014.12.29 |
---|---|
[펌]경도 위도를 이용한 기준 반경 내 업체 구하기 [PHP, MySQL 이용] (0) | 2014.12.26 |
[펌]주변 배달 업체 위치 구하는 소스 (0) | 2014.12.23 |
Android Google Map 주변 Api 찍는법 (0) | 2014.12.23 |
google maps api v2 현재 위치 마커 찍기 (0) | 2014.12.23 |