현재위치 기준 반경 검색하기

개발개발·2021년 3월 4일
0

위치기반 서비스를 위해서 만들기 위해서 반경 내에 있는 것들을 검색해야 하는 일이 생겼다.

구현하기 위해서 두 점 사이의 거리를 구해볼까 했는데 이미 반경을 구하는 쿼리가 있어서 기존의 것을 사용하기로 했다.

자바 기준

public double distanceByMeter(double lat1, double lng1, double lat2, double lng2) {
       double theta = lng1 - lng2;
       double dist = Math.sin(Math.toRadians(lat1)) * Math.sin(Math.toRadians(lat2)) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.cos(Math.toRadians(theta));

       dist = Math.acos(dist);
       dist = Math.toDegrees(dist);
       dist = dist * 60 * 1.1515;
       dist = dist * 1609.344;

       return Math.round(dist/10)*10;
   }
   

현재 위치의 위도 경도와 측정하고자 하는 대상의 위도 경도를 입력하면 m 단위로 결과값을 알려준다.

SELECT
	*,
	(6371*acos(cos(radians(<사용자의 lat>))*cos(radians(<TABLE.lat(대상 lat)>))*cos(radians(<TABLE.lng(대상 lng)>)
	-radians(사용자의의 lng))+sin(radians(사용자의 lat))*sin(radians(<TABLE.lat(대상 lat)>)))
	AS distance
FROM <TABLE>
HAVING distance <= 1
ORDER BY distance 

sql 에서 query로 구하는 방법이다. 이때 distance대비 거리는 1 : 1km 이다.

추후 공부할 것들
1. 수학에 대한 지식이 있어야 겠다.

profile
청포도루이보스민트티

0개의 댓글