위도, 경도를 통한 특정 반경 내의 값 구하기 0 3 4,734

by 꼭된다 [SQL Query] 공간인덱싱 [2018.01.10 19:31:02]


안녕하세요.. 위도, 경도 값으로 특정 영역 안에 있는 포인트들을 구하는 쿼리를 사용하고 싶은데요.

검색을 해보니까 이 쿼리를 가장 많이 사용하는 것 같더라구요.

http://pnot.tistory.com/8

근데 제가 또 찾아보니까 공간 인덱싱으로 컬럼 타입을 point로 줘서 특정 폴리곤 안에 그 point 가 있는지 알 수 있는 within 함수가 있더라구요.

해당 사이트에도 좋은 글이 있어서 읽어 봤습니다.

http://www.gurubee.net/lecture/2921

두가지 방법 모두 특정 영역 안에 위치한 정보를 얻어올 수 있는것 같은데(혹시 제가 착각하고 있는 것이 있다면 알려주세요.ㅜㅜ)

보통 어떤 방법을 사용하시고 어떤 방법이 더 효율적인가요? 아 그리고 공간 인덱싱을 사용할 때 point타입에 들어가는 x, y값은 위도, 경도 인가요??

감사합니다.

 

by 마농 [2018.01.11 10:24:15]

1번 방법은 일반 테이블에 죄표를 저장하고 계산식을 적용하여 거리를 구하는 방식이네요.
이 방법은 계산 공식으로 인해 컬럼이 가공되어 인덱스를 사용할 수 없는 방식입니다.
계산 식 조건 외에 인덱스를 사용할 수 있는 추가 조건을 주는 것이 좋습니다.
WHERE 거리계산식(위도, 경도, :위도, :경도) <= 0.3
AND 위도 BETWEEN :위도 - 0.3 * 위도거리환산계수 AND :위도 + 0.3 * 위도거리환산계수
AND 경도 BETWEEN :경도 - 0.3 * 경도거리환산계수 AND :경도 + 0.3 * 경도거리환산계수
추가조건은 검색지점 사방으로 0.3km 정사각형 범위 검색입니다.
인덱스 스캔으로 정사각형을 검색하여 계산식적용하기 전 범위를 줄이고
계산식을 적용하여 원형으로 다시 조회대상을 줄이는 방법입니다.

2번 방법은 공간 데이터 전용 방법이죠.
위와 같은 고민을 안해도 되지 않을까? 생각됩니다.
써보지 않아서 잘 모르지만 2번 방법이 더 좋을 듯.


by 그로밋 [2018.01.11 13:35:13]

간단히 말하면, (x, y)는 지구 타원체상의 세계, 혹은 국가나 지역을 투영한후 얻어진 평면 좌표계의 좌표입니다.


by 꼭된다 [2018.01.15 11:32:27]

답변 감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입