신비한 개발사전

PostgreSQL의 PostGIS 플러그인으로 경위도 값 쿼리하기 본문

Backend

PostgreSQL의 PostGIS 플러그인으로 경위도 값 쿼리하기

jbilee 2025. 7. 17. 21:04

현재 진행하고 있는 팀 프로젝트는 입력 받은 지하철 역들의 중간 지점에 위치한 역을 찾아주는 서비스다.

 

중간 역이라고 하면 각 시작점에서 비슷한 시간이 소요되는 역을 말하는데, 우리는 이동시간을 계산하기 위해 먼저 물리적인 중간 지점을 파악하고, 해당 지점 인근의 역을 찾아야겠다고 판단했다. 일단 도착지가 있어야 이동시간을 계산할 수 있기 때문이다.

 

PostgreSQL DB의 PostGIS 플러그인은 지리 공간 데이터(geospatial data)와 관련된 다양한 기능을 지원하는데, 그 중 하나가 특정 x 좌표의 n 반경 내 모든 위도와 경도를 쿼리해주는 기능이다.

 

우리는 PostGIS를 활용해 중간 지점 경위도의 n 반경 안에 있는 역들을 DB에서 조회하기로 했다.

 

PostGIS 설치하기

PostgreSQL을 설치했다면 Application Stack Builder가 함께 설치됐을 것이다. Application Stack Builder를 실행하고, 시작 단계에서 "PostgreSQL 17 on port 5432" 옵션을 선택한다.

 

 

다음 화면에서 Spatial Extensions 카테고리의 PostGIS를 선택한다.

 

이후에는 PostGIS의 기능이 필요한 테이블에서 아래 extension 설치 쿼리문을 실행하면 플러그인 설치가 완료된다.

CREATE EXTENSION postgis;

 

특정 반경 내 데이터 쿼리하기

명시한 반경 안에 있는 경위도 데이터를 조회하려면 ST_DWithin 함수를 사용한다. 아래 예시에서는 강남역의 좌표를 기준으로 했다.

SELECT id, name, latitude, longitude
FROM station
WHERE ST_DWithin(
    geography(ST_MakePoint(longitude, latitude)),
    geography(ST_MakePoint(127.0276, 37.4979)), -- 기준 좌표 입력 (경도, 위도)
    1200 -- 반경 입력 (미터/m 단위)
);

쿼리 결과

 

실제로 강남역과 그 주변의 역들이 잘 반환되는 것을 확인할 수 있다.

 

 

이외에도 PostGIS가 제공하는 다양한 지리 공간 함수는 공식 문서에서 확인할 수 있다.