-
[PostgreSQL] 특정 위치에서 가까운 거리순 정렬하기 쿼리로만(위도,경도)IT/Database 2018. 12. 3. 12:11
-특정 위치에서 가까운 거리순 정렬하기 쿼리로만(위도,경도)
이번 포스팅은
내 자신으로부터 특정 건물들을 가까운거리순으로 정렬하여 보여주기 위함이다
단, 코딩은 들어가지 않고
Postgresql을 사용하는 경우 쿼리내에서 위도/경도를 활용하여 처리 하는방법으로!
1. Postgresql-contrib 설치
Postgresql을 Ubuntu에서 돌리고 있는데
먼저 Postgresql-contrib를 설치 해 준다.
Postgresql의 추가 라이브러리라고 생각하면된다
1sudo apt-get install postgresql-contribcs 2. 추가된 라이브러리 중 cube와 earthdistance설치
이 두개를 사용할 수 있게 하는 방법을 찾는데 시간이 걸렸다..postgresql의 버전에 따라 조금 차이가 있지만
9버전 이상부터는 아래의 쿼리를 sql상에서 돌려주면 된다
(이 전 버전에서는 .sql파일을 어디 폴더 들어가서 뭐해라 뭐해라..있는데
간단하게 아래 2개의 쿼리 돌려주면 된다)
12CREATE EXTENSION cube;CREATE EXTENSION earthdistance;cs 3. earth_distance, ll_to_earth 함수 활용
아래 쿼리 실행select earth_distance(ll_to_earth(37.4839901,126.9014494), ll_to_earth(37.482325, 126.881754));
출발지(구디)의 위도경도와 도착지(가디)의 위도경도를 입력하고 쿼리를 실행해주면
결과값이 1749.65973028176 나오는데 단위는 M이다.
구디에서 가디까지 약 1.7키로 라는것이다
4. 쿼리
위에 SELECT절까지 사용할 수 있다면거리순 정렬은 문제가 되지 않는다.
사용자로부터 입력받은 위치의 데이터와
디비에 저장되어있는 특정 위치의 데이터를 조회 후
Order by 정렬만 오름차순으로 해주면 되기 때문!
생각해 볼 부분
거리순으로 정렬을 하는 것 까진 문제가 되지 않지만
안드로이드에서 페이징처리까지 생각한다면
조금 더 신경써야할 부분이 많아진다... 이 건 추후에 다루기로 하고,
이번에도 내가 필요한 기능을 사용하는데 있어(거리 구하기)
처음에는 단순 히 자바단에서 코드로 처리를 하려고 했었는데
내가 사용하는 DB에서 'earth_distance' 함수를 제공해 쉽게 처리할 수 있었다.
만약 제공하지 않았더라면...
그리고 'earth_distance'함수가 있는지 몰랐더라면
2시간이면 작업할 것을 몇일이 걸렸을지 모른다.
어떤일을 하는데 있어
지금 나의 생각만 가지고 진행을 하기보다는
조금 더 넓게 다른 방법이 있는지 확인해보고
처음에 조금 시간이 걸리더라도
넓게 생각하면 좋겠다 라고 다시 한번 느꼈다.
물론.. 상황에 따라 다르겠지만...........
'IT > Database' 카테고리의 다른 글
[Oracle] Update Select 방법 및 bypass_ujvc (1) 2019.02.18 [PostgreSQL] 페이징 쿼리 작성하기 (2) 2018.12.16 [PostgreSQL] Windows에서 다운로드 및 설치 (+pgAdmin) (0) 2018.10.18 댓글