[PostGIS] 좌표계 기본개념
PostGIS를 기반으로 좌표계 기반 작업을 할 일이 있다면, 좌표 단위와 개념에 대해서도 얼마간 이해를 해야 한다.
기본적인 부분들만 추려서 정리해본다.
좌표계의 종류
좌표계는 크게 2가지로 구분된다.
실제 지리적-물리적 공간을 표현하는 지리 좌표 참조 시스템(Geographic Coordinate Reference System, GCS),
그리고 평면 공간에서 직선거리를 계산하기 위해 만들어진 투영 좌표 참조 시스템(Projected Coordinate Reference System, PCS)이 그것이다.
GCS
GCS는 지구가 구체라는 것을 고려해서 만들어진 단위라서, 실제 물리적 통신과도 잘 호환된다.
GPS 기반의 좌표 처리에도 항상 GCS를 사용한다.
다만 이게 평면 좌표가 아니다보니, 단순한 거리나 공간을 계산하는데는 그다지 잘 맞지 않는다는 단점이 있다. 안되는건 아닌데, 각도값을 뽑아낸 다음에 그걸 또 지구 곡률을 고려해서 계산하는 과정을 거쳐야 한다.
같은 각도라도 위도에 따라서 실제 거리가 달라지고 그러기 때문에, 생각보다 까다롭다.
PCS
반면 PCS는 지구가 평평하다는 가정 아래에서 만들어진 단순화된 좌표 체계다.
그래서 거리를 미터 단위로 뽑거나 할때는 그 어떤 방식보다 효율적이다.
단점은 어떤 식으로든 손실과 부정확성이 발생한다는 것이다.
결론적으로 말하자면, GIS 시스템을 사용할때는 이 중 하나만 사용하거나 하지는 않는다.
보통 위치 저장 자체는 GCS로 한 다음에, 시각화나 거리/면적 계산이 필요할 때는 PCS로 변환한다거나 하는 하이브리드 접근법을 많이 사용한다.
GCS - WGS84 (EPSG:4326)
가장 널리 쓰이는 GCS의 표준형 좌표체계다.
(127.0276, 37.4979)와 같은 위도:경도 기반의 좌표다. GPS를 비롯한 많은 지리 기반 시스템들이 이걸 기본값으로 사용한다.
특정 위치를 저장할 때는 보통 이걸 기본값으로 사용하는 경우가 많다.
PostGIS에서는 다음과 같이 4326을 인자로 넘겨서 해당 좌표 포맷임을 명시할 수 있다.
타입도 geometry(Point, 4326) 같은 식으로 표현된다.
PCS - EPSG:3857
이건 가장 널리 쓰이는 PCS의 좌표체계다.
쉽게 말해서, 그냥 세계지도를 평평한 종이에 그려놓고 미터 단위로 x/y 좌표를 관리하는 시스템이라고 보면 된다.
그래서 종이지도처럼 왜곡이 심하다는게 단점이고, 평면 UI에서의 계산이나 렌더링이 쉽고 빠르다는 것이 최대 장점이다.
구글맵같은 웹지도 구현체들은 PCS를 많이 사용한다.
PostGIS에서의 표현법은 EPSG:4326와 그닥 다르진 않다.
그냥 x/y 축에 미터가 들어가고, SRID에 다른 숫자가 들어갈 뿐이다.
다른 체계들도 엇비슷하다.
혼돈
위에서 대표적인 좌표체계 2가지를 예로 들었지만, 사실.. 이거 말고도 많다.
국가마다 환경마다 전부 다 다르다. 국제표준을 쓸 때도 있지만, 아닐 때도 있다.
인간들이 심심해서 그런건 아니고, 본인 국가에 한해서만 더 정확하게 만들거나, 본인 국가를 중심 축으로 삼아서 GPS 표준이 바뀌어도 유지되게 하거나 하는 목적들이 있다.
대표적으로 한국에서는 EPSG:5179(PCS), EPSG:5181(PCS)라는 독자 체계를 사용한다.
EPSG:5181는 레거시 공공데이터고, EPSG:5179는 공간 분석에서 사용한다.
EPSG:5179는 EPSG:3857과 거의 동일한데, 한국 내에서는 정확도가 훨씬 높다는 것이 유일한 차이다.
EPSG:5181도 비슷한데, 한국의 수도권 지역에서만 정확도가 높아서 버려졌다.
미국에서는 NAD83(GCS)와 UTM(PCS)라는걸 쓴다.
NAD83는 미국 정부 GIS 시스템에서만 쓴다. GCS고 위/경도 기반 시스템인데, 미국에 한해서는 거리계산 등이 더 정확한 편이다. 그리고 미국을 중심축으로 고정해놔서 바뀌지 않는다.
UTM은 실제 국가마다 Zone(일종의 파티션)을 나눠서 Zone 내부에서 계산을 하도록 하는데, 그래서 표준 PCS인 EPSG:3857보다 정확도가 훨씬 높은 편이다. 그 대신 Cross-Zone 연산에는 취약하다.
유럽에서는 ETRS89(GCS)라는걸 쓴다. 미국의 NAD83라고 보면 된다. 유럽이 중심축이다.
중국에서는 CGCS2000(GCS)라는걸 표준 GIS로 쓴다.
이것도 미국의 NAD83라고 보면 된다. 중국이 중심축이다.
그나마 다행인 것은, PostGIS 같은 GIS 시스템이 이에 대한 상호 변환을 어느 정도 지원해준다는 것이다.
그 역할을 하는 것이 ST_Transform라는 함수다.
PCS => GCS 변환
PostGIS에서의 기본 좌표 타입
PostGIS는 일단 거의 모든 체계를 아우르는 것을 목표로 하기 때문에, 기본 타입이나 연산들이 제너럴하게 만들어져있다.
모든 단일 좌표는 (x,y) 좌표와 SRID 값으로 이루어진 복합 값이다.
x/y에 단위에 맞는 숫자를 적절히 넣으면 그만이고, SRID는 EPSG:4326에서의 4326 같은 표준 번호다.
예를 들면, 표준 EPSG:4326의 개별 좌표 값은 geometry(Point, 4326) 타입과 geography(4326) 타입으로 표현될 수 있다.
geometry의 리터럴 생성은 다음과 같이 할 수 있다.

그리고 geometry => geography으로 손쉽게 변환할 수도 있다.
이 둘은 뭐가 다를까?
쉽게 말해서 geometry는 가벼운 연산을 지원하는 타입이고, geography는 무거운 변형 연산을 제공하는 타입이다.
geometry
EPSG:4326를 예로 들어보자.
geometry은 변환을 하지 않고 유클리드 거리로 바로 계산값을 뽑아내는 연산을 지원한다. GCS끼리 연산을 한다면 그냥 각도가 나온다.
이건 간단한 만큼 빠르고, 리소스 소모도 적고, 지원되는 함수 자체가 많다는 장점이 있다. 그래서 보통은 이걸 기본 타입으로 선택하는 것을 권장한다.
geography
geography는 좀 더 특수한 동작을 포괄하는 GCS 전용 타입이다. geography 간의 연산은 자동으로 지구 곡률을 고려한다. 그러니까 GCS 좌표끼리 거리 연산 등을 할 때 곡률을 고려해서 처리를 해준다는 것이다.
그래서 geography로 변환해서 거리 계산을 하면 이렇게 미터값이 나온다.
그대신 처리 속도가 느리고 사용에 제한이 많은 편이다. 인덱스도 태우기 어렵다.
보통 필요할 때만 geometry를 geography로 변환해서 연산하는 것이 권장되는 전략이다.
참조
https://postgis.net/workshops/postgis-intro/geography.html
https://en.wikipedia.org/wiki/Geographic_coordinate_system
https://www.esri.com/arcgis-blog/products/arcgis-pro/mapping/gcs_vs_pcs