게시글 특정 필드에 주소가 입력되어 있을 경우 현재 내 위치로부터 거리를 체크하려면 어떻게 해야 할까요?

게시글 특정 필드에 주소가 입력되어 있을 경우 현재 내 위치로부터 거리를 체크하려면 어떻게 해야 할까요?

QA

게시글 특정 필드에 주소가 입력되어 있을 경우 현재 내 위치로부터 거리를 체크하려면 어떻게 해야 할까요?

본문

게시글 특정 필드에 주소가 입력되어 있을 경우 현재 내 위치로부터 거리를 체크할 방법이 있나요?

내 위치와 가까운 업체 순으로 정렬하거나, 50키로 이내 업체만 검색하게 한다거나 하고 싶습니다.

어떻게 구현하면 좋을지 자문 구해봅니다.

이 질문에 댓글 쓰기 :

답변 2

select *, ( 6371 * acos( cos( radians(시작위도값) ) * cos( radians( 도착위도값 ) ) * cos( radians( 도착경도값 ) - radians(127.10492849349907) ) + sin( radians(시작위도값) ) * sin( radians( 도착위도값 ) ) ) ) AS distance
from 테이블
 HAVING 500000 > distance
 order by distance

제가 알고있는대로 설명드릴께요.

얄팍한 지식이라 틀릴수도 있으니 구글링 한번 더 해보시길 추천드립니다 ㅠㅠ

 

중학교때 배운 피타고라스의 정리를 이용하면 됩니다.

빗변 = 루트(밑변의 제곱 + 높이의 제곱)

 

즉,

밑변 = 내 위치의 위도 - 업체의 위도 * 111.034

높이 = 내 위치의 경도 - 업체의 경도 * 85.397

 

111.034랑 85.397을 곱한건 km로 변환해주기 위합니다.

우리나라 위도가 40도 언저리 정도 되니까

위도 40도라 치고 1도간 거리(km)를 곱해주는겁니다.
위도1도당 거리:  111.034

경도1도당 거리:  85.397

 

다 구한뒤에 루트를 해주면 끝나네요

거리 = 루트(밑변결과 + 높이결과)

 

이걸 order by 에서 사용하면 됩니다.

 

그래서 쿼리문을 아래처럼 하면 됩니다.

 

위도 필드명이 lat 이고 경도 필드명이 lng 이고

파라미터로 받은 현재위치의 위도가 $p_lat,  경도가 $p_lng 이라 칩시다

 

SELECT *, SQRT(
    POW( ($p_lat - lat) * 111.034, 2 )
    +
    POW( ($p_lng - lng ) * 85.397, 2 )
) as dist

ORDER BY dist

 

이렇게 하면 가까운 순서대로 나옵니다.

 

아참 먼저 주소로 위도 경도데이타를 다 입력해 주셔야 합니다.

다음지도api 를 이용하면 주소에 해당하는 위치의 위,경도 결과를 가져올 수 있습니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 65
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT