본문 바로가기
정보기술

(10) 번외 - 검색지점 기준 반경거리 계산 (하버사인 공식)

by 엘라트리니티 2022. 12. 14.

2022.12.14 - [정보기술] - (1) 구글 지도 API – 지도 만들기

2022.12.14 - [정보기술] - (2) 구글 지도 API - 단일 마커 표시하기

2022.12.14 - [정보기술] - (3) 구글 지도 API - 다중 마커 표시하기

2022.12.14 - [정보기술] - (4) 구글 지도 API - 정보창 표시하기

2022.12.14 - [정보기술] - (5) 구글 지도 API - 자동완성주소 검색하기

2022.12.14 - [정보기술] - (6) 번외 - 자동완성주소 검색에 관하여

2022.12.14 - [정보기술] - (7) 구글 지도 API - 특정 주소의 좌표 확인하기

2022.12.14 - [정보기술] - (8) 구글 지도 API - 좌표 DB 등록하기

2022.12.14 - [정보기술] - (9) 구글 지도 API - 검색 인터페이스 구현

2022.12.14 - [정보기술] - (10) 번외 - 검색지점 기준 반경거리 계산 (하버사인 공식)

2022.12.14 - [정보기술] - (11) 구글 지도 API - 좌표 DB 불러오기 (xml 이용)

2022.12.14 - [정보기술] - (12) 구글 지도 API - 위치기반 서비스 제공 (끝)

 

앞선 포스팅에서 지구와 같은 구(Sphere)의 직선거리를 구하기 위해서는 하버사인 공식이 필요하다고 말씀드렸습니다.

본 포스팅에서는 하버사인 공식에 대해 알아보겠습니다.

일반적으로 두 지점 Point1 (x1, y1)과 Point2 (x2, y2)가 존재할 때 두 지점 사이의 직선거리는 피타고라스의 정리를 이용하여 x좌표의 차이의 제곱과 y좌표의 차이의 제곱의 합에 대한 제곱근으로 구합니다.

그러나 3차원 지구좌표에서 사용하는 위도(Latitude)와 경도(Longitude)를 피타고라스 정리를 이용해 직선거리를 구하게 된다면 큰 오차가 생기게 됩니다.

근거리면 몰라도 국경을 넘어서 두 지점간의 거리가 길어질수록 결국 구형인 지구 곡률의 영향을 받아 점점 오차가 커지게 됩니다.

 

서울과 미국 해변까지의 거리를 피타고라스 정리로 구하면 지구 곡률을 고려하지 않았기 때문에 오차가 발생하게 된다

 

따라서 이를 해결하기 위하여 하버사인 공식(Harversine Fomula)을 사용하게 되는데 스크립트 코드로 나타내면 다음과 같습니다. 이 때 목표지점은 등록된 세미나의 위치기존 정보를 의미하며 기준지점은 사용자가 검색한 위치를 의미합니다.

 

//하버사인 공식 (검색지점으로부터의 거리 계산)

<script>
   	double distance;
   	double radius = 6371; // 지구 반지름(km)
   	double toRadian = Math.PI / 180;
           		
   	double loclat = Double.parseDouble(rs.getString("목표지점 위도"));
   	double loclng = Double.parseDouble(rs.getString("목표지점 경도"));
           			
   	double deltaLatitude = Math.abs(기준지점 위도 - loclat) * toRadian;
   	double deltaLongitude = Math.abs(기준지점 경도 - loclng) * toRadian;

   	double sinDeltaLat = Math.sin(deltaLatitude / 2);
   	double sinDeltaLng = Math.sin(deltaLongitude / 2);
   	double squareRoot = Math.sqrt(
  	sinDeltaLat * sinDeltaLat +
   	Math.cos(기준지점 위도 * toRadian) * Math.cos(locationlat * toRadian) * sinDeltaLng * sinDeltaLng);

   	distance = 2 * radius * Math.asin(squareRoot);
</script>

 

2022.12.14 - [정보기술] - (11) 구글 지도 API - 좌표 DB 불러오기 (xml 이용)

 

(11) 구글 지도 API - 좌표 DB 불러오기 (xml 이용)

2022.12.14 - [정보기술] - (1) 구글 지도 API – 지도 만들기 2022.12.14 - [정보기술] - (2) 구글 지도 API - 단일 마커 표시하기 2022.12.14 - [정보기술] - (3) 구글 지도 API - 다중 마커 표시하기 2022.12.14 - [정보

iftraveler.tistory.com

 

댓글