ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [PostgreSQL] 특정 위치에서 가까운 거리순 정렬하기 쿼리로만(위도,경도)
    IT/Database 2018. 12. 3. 12:11

    -특정 위치에서 가까운 거리순 정렬하기 쿼리로만(위도,경도)



    이번 포스팅은

    내 자신으로부터 특정 건물들을 가까운거리순으로 정렬하여 보여주기 위함이다


    단, 코딩은 들어가지 않고

    Postgresql을 사용하는 경우 쿼리내에서 위도/경도를 활용하여 처리 하는방법으로!




    1. Postgresql-contrib 설치



    Postgresql을 Ubuntu에서 돌리고 있는데

    먼저 Postgresql-contrib를 설치 해 준다.

    Postgresql의 추가 라이브러리라고 생각하면된다


    1
    sudo apt-get install postgresql-contrib 
    cs



    2. 추가된 라이브러리 중 cube와 earthdistance설치



    이 두개를 사용할 수 있게 하는 방법을 찾는데 시간이 걸렸다..

    postgresql의 버전에 따라 조금 차이가 있지만

    9버전 이상부터는 아래의 쿼리를 sql상에서 돌려주면 된다

    (이 전 버전에서는 .sql파일을 어디 폴더 들어가서 뭐해라 뭐해라..있는데 

    간단하게 아래 2개의 쿼리 돌려주면 된다)


    1
    2
    CREATE 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시간이면 작업할 것을 몇일이 걸렸을지 모른다.


    어떤일을 하는데 있어

    지금 나의 생각만 가지고 진행을 하기보다는

    조금 더 넓게 다른 방법이 있는지 확인해보고

    처음에 조금 시간이 걸리더라도

    넓게 생각하면 좋겠다 라고 다시 한번 느꼈다.


    물론.. 상황에 따라 다르겠지만...........














    댓글