안녕하세요.. 위도, 경도 값으로 특정 영역 안에 있는 포인트들을 구하는 쿼리를 사용하고 싶은데요.
검색을 해보니까 이 쿼리를 가장 많이 사용하는 것 같더라구요.
http://pnot.tistory.com/8
근데 제가 또 찾아보니까 공간 인덱싱으로 컬럼 타입을 point로 줘서 특정 폴리곤 안에 그 point 가 있는지 알 수 있는 within 함수가 있더라구요.
해당 사이트에도 좋은 글이 있어서 읽어 봤습니다.
http://www.gurubee.net/lecture/2921
두가지 방법 모두 특정 영역 안에 위치한 정보를 얻어올 수 있는것 같은데(혹시 제가 착각하고 있는 것이 있다면 알려주세요.ㅜㅜ)
보통 어떤 방법을 사용하시고 어떤 방법이 더 효율적인가요? 아 그리고 공간 인덱싱을 사용할 때 point타입에 들어가는 x, y값은 위도, 경도 인가요??
감사합니다.
1번 방법은 일반 테이블에 죄표를 저장하고 계산식을 적용하여 거리를 구하는 방식이네요.
이 방법은 계산 공식으로 인해 컬럼이 가공되어 인덱스를 사용할 수 없는 방식입니다.
계산 식 조건 외에 인덱스를 사용할 수 있는 추가 조건을 주는 것이 좋습니다.
WHERE 거리계산식(위도, 경도, :위도, :경도) <= 0.3
AND 위도 BETWEEN :위도 - 0.3 * 위도거리환산계수 AND :위도 + 0.3 * 위도거리환산계수
AND 경도 BETWEEN :경도 - 0.3 * 경도거리환산계수 AND :경도 + 0.3 * 경도거리환산계수
추가조건은 검색지점 사방으로 0.3km 정사각형 범위 검색입니다.
인덱스 스캔으로 정사각형을 검색하여 계산식적용하기 전 범위를 줄이고
계산식을 적용하여 원형으로 다시 조회대상을 줄이는 방법입니다.
2번 방법은 공간 데이터 전용 방법이죠.
위와 같은 고민을 안해도 되지 않을까? 생각됩니다.
써보지 않아서 잘 모르지만 2번 방법이 더 좋을 듯.