두 지점 간 거리 계산하기는
PostgreSQL과 Extension인 PostGIS 가 셋팅되어 있어야 합니다.
셋팅 방법은 이전 포스팅을 참고해주세요
2019/10/31 - [Database/PostgreSQL] - PostgreSQL 확장프로그램 PostGIS 적용하기
기본적으로 거리계산은 ST_Distance를 사용하지만
버전이 올라가면서 더 정확한 계산을 해주는 녀석이 등장했습니다.
ST_DistanceSphere 라는 함수 입니다.
ST_DistanceSphere 함수는
두 개의 Lon, Lat (= 두 포인트) 사이의 최소거리를 반환합니다.
반환 타입은 미터(Meters)입니다.
다음은 ST_DistanceSphere 사용예제에 대해 알아봅니다.
SELECT
ST_DistanceSphere(
ST_GeomFromText('POINT(129.014525 35.13542)', 4326),
ST_GeomFromText('POINT(129.014525 36.24553)', 4326)
);
위 쿼리의 결과는 123438.76996421 Meter (Double Precision) 입니다.
KM가 필요한 경우는 결과 값에 1000을 나누어 주면 되겠죠?
SELECT
ST_DistanceSphere(
ST_GeomFromText('POINT(129.014525 35.13542)', 4326),
ST_GeomFromText('POINT(129.014525 36.24553)', 4326)
) / 1000 AS KM;
궁금점이 생길 타이밍입니다.
ST_DistanceSphere(geom, geom) 함수는 알겠는데
내부의 ST_GeomFromText() 함수로 감싸져 있는 것을 볼 수 있는데요
PostgreSQL에서 제공하는 Geometry 컬럼타입때문입니다.
PostgreSQL에 컬럼 타입에 Geometry 즉, 기하학 타입의 데이터를 담을 수 있는데요
WKT라는 Well Known Text의 약자인 WKT 형식을 기본으로 하고 있습니다.
예를들면
점(Point) - POINT(Lon Lat)
라인(LineString) - LINESTRING(Lon Lat, Lon Lat)
다각형(Polygon) - POLYGON((Lon Lat), (Lon, Lat), …)
이런식으로 표현하는 형식입니다.
이렇게 WKT문자열(String)을 Geometry 타입으로 변환해주는 녀석이
바로 ST_GeomFromText() 함수 입니다.
함수명을 직역해도 같은 뜻입니다. (텍스트를 Geometry로 만들겠다)
좌표는 알겠는데 뒤에 4326 은 무엇인가요?
뒤 숫자의 의미는 좌표체계입니다.
EPSG:4326, EPSG:3857 등 많이 사용하는 좌표체계들이 있습니다.
우리나라는 보통 도분초와 EPSG4326을 많이 사용합니다.
EPSG3857은 OpenLayers나 Leaflet 등 웹 GIS 라이브러리에서 사용하기도 합니다.
Geometry 컬럼은 테이블을 처음 생성할 때 SRID라는 것을 지정합니다.이 Geometry 컬럼에서는 이런 좌표체계를 쓰겠다 명시하는 것이죠
이것으로 두 지점간 거리를 구하는 방법에 대해 알아 보았습니다.
'Database > PostgreSQL' 카테고리의 다른 글
[PostgreSQL] 확장프로그램 PostGIS 적용하기 (0) | 2019.10.31 |
---|
댓글