지도 관련 작업을 하다 보면 좌표를 정말 많이 보게 된다.
처음에는 좌표라고 하면 그냥 이런 값만 생각했다.
127.123456
37.123456
경도, 위도.
딱 봐도 익숙하다.
그런데 DB에서 공간정보를 조회하다 보면 갑자기 이런 숫자가 나온다.
953xxx
1952xxx
또 JavaScript에서 지도를 확인하다 보면 이런 값도 보인다.
1415xxxx
45xxxxx
처음에는 좀 헷갈렸다.
똑같은 위치를 나타내는 좌표인데 왜 숫자가 이렇게 다르지?
그러다 옆에 붙어 있는 걸 보면 또 이런 게 있다.
EPSG:4326
EPSG:3857
EPSG:5179
4326은 많이 본 것 같고, 3857도 지도에서 자주 봤는데 5179까지 나오니까 슬슬 헷갈리기 시작했다.
그래서 이번에 지도에서 자주 보게 되는 세 가지 좌표계를 한번 정리해봤다.
일단 EPSG가 뭔데?
사실 처음에는 EPSG:4326을 그냥 좌표계 이름이라고 생각했다.
크게 틀린 건 아니지만, 정확히는 좌표참조체계를 구분하기 위한 코드라고 보면 된다.
지도에서는 같은 위치라도 어떤 좌표계를 사용하느냐에 따라 표현되는 숫자가 달라진다.
예를 들어 우리가 흔히 보는 GPS 좌표는 이런 식이다.
경도: 129.xxxxxx
위도: 35.xxxxxx
그런데 지도 화면이나 공간 DB에서는 같은 위치를 다른 좌표계로 변환해서 사용할 수도 있다.
그러다 보니
이 좌표가 어디인지?
만큼이나
이 좌표가 어떤 좌표계인지?
를 아는 게 중요했다.
좌표 숫자만 덜렁 받아놓고 좌표계를 모르면 생각보다 난감하다.
EPSG:4326은 제일 익숙했다
EPSG:4326은 WGS84 경위도 좌표계다.
GPS나 OpenAPI 데이터를 받아볼 때 흔히 볼 수 있는 형태다.
경도(X): 129.0756
위도(Y): 35.1796
숫자만 봐도 대충 감이 온다.
우리나라라면 보통 경도가 120도대 후반~130도대 초반, 위도가 30도대라는 걸 알고 있으니
129.xxx
35.xxx
정도의 값이 보이면
아, 이건 경위도 좌표인가?
하고 먼저 생각해볼 수 있다.
단위도 m가 아니라 도(degree)다.
이 부분이 뒤에 나오는 3857이나 5179와 가장 눈에 띄는 차이였다.

그런데 지도에서는 3857을 정말 많이 봤다
웹 지도를 보다 보면 EPSG:3857도 정말 자주 나온다.
OpenLayers 같은 지도 라이브러리를 사용할 때 특히 많이 보게 된다.
4326 좌표가 이런 느낌이라면,
129.0756
35.1796
3857로 변환된 값은 숫자부터 확 달라진다.
대략 이런 식으로 큰 숫자가 나온다.
1436xxxx
418xxxx
처음 보면
이게 좌표가 맞나?
싶다.
그런데 정상이다.
4326은 경도와 위도를 도 단위로 표현하지만, 3857은 웹 지도에서 사용하기 편하도록 투영한 좌표계라 값의 형태가 완전히 달라진다.
그래서 OpenLayers 코드를 보다 보면 이런 것도 자주 만난다.
ol.proj.transform(
[lon, lat],
'EPSG:4326',
'EPSG:3857'
);
예전에는 그냥
좌표 변환하는 코드구나.
하고 넘어갔는데, 이제 보면 의미가 좀 더 명확하다.
경도/위도 좌표
EPSG:4326
↓ 변환
웹 지도에서 사용하는 좌표
EPSG:3857
이런 흐름이다.
그래서 좌표는 맞는데 지도에서 이상한 곳에 찍힐 수도 있다
좌표계가 중요한 이유가 여기서 나온다.
예를 들어 데이터가
129.0756, 35.1796
처럼 4326인데 지도에서는 이 값을 3857이라고 생각하고 사용하면 어떻게 될까?
숫자 자체는 좌표처럼 생겼으니까 코드에서 바로 오류가 나는 것도 아니다.
그런데 실제 지도에 찍어보면 전혀 엉뚱한 곳으로 가거나 아예 화면에서 찾을 수 없게 된다.
이런 경우 좌표값만 계속 쳐다보고 있으면
경도랑 위도를 반대로 넣었나?
DB 값이 잘못됐나?
데이터가 이상한가?
하면서 다른 곳부터 찾게 된다.
물론 X/Y 순서가 뒤집힌 경우도 있어서 그것도 확인해야 하지만, 좌표계가 서로 맞는지도 같이 봐야 한다.

그러면 5179는 또 뭘까?
내가 제일 헷갈렸던 건 EPSG:5179였다.
DB 테이블을 보다 보면 geometry 컬럼이 이런 식으로 정의된 경우가 있다.
geometry(Geometry, 5179)
4326과 3857은 그래도 웹 지도에서 자주 봤는데, 처음에는 5179가 왜 DB에 들어가 있는지 잘 몰랐다.
EPSG:5179는 Korea 2000 / Unified CS로, 국내 공간정보에서 사용하는 투영좌표계 중 하나다.
좌표도 이런 형태로 나온다.
X: 9xxxxx
Y: 18xxxxx
4326처럼
129.xxx
35.xxx
가 나오는 게 아니다.
이쯤 되니까 숫자만 보고도 어느 정도 구분이 되기 시작했다.
129.xxx / 35.xxx
→ 4326일 가능성이 높음
천만 / 수백만 단위
→ 3857인지 확인
수십만~백만 단위
→ 국내 투영좌표계인지 확인
다만 이건 어디까지나 빠르게 의심해보는 정도다.
숫자 크기만 보고 좌표계를 확정하면 안 된다.
결국 데이터에 지정된 SRID나 메타정보를 확인하는 게 정확하다.
DB에서는 SRID를 같이 봐야 했다
PostGIS를 사용하면 geometry에 SRID가 들어간다.
예를 들어 테이블 정의가
ag_geom geometry(Geometry, 5179)
로 되어 있다면 이 geometry 컬럼은 5179 좌표계를 사용하도록 정의되어 있다는 뜻이다.
실제 데이터의 SRID가 궁금하면 이런 식으로 확인할 수도 있다.
SELECT ST_SRID(ag_geom)
FROM 테이블명
LIMIT 1;
결과가
5179
라면 해당 geometry에 설정된 SRID가 5179라는 걸 확인할 수 있다.
여기서 하나 더 중요한 게 있었다.
SRID를 지정하는 것과 실제 좌표를 변환하는 것은 다르다.
처음에는 이 부분도 조금 헷갈렸다.
예를 들어 PostGIS에는 ST_SetSRID()와 ST_Transform()이 있다.
이름만 보면 둘 다 좌표계와 관련 있어 보인다.
그런데 역할이 다르다.
ST_SetSRID(geom, 4326)
은 쉽게 말하면
이 좌표는 4326이야.
라고 좌표계 정보를 지정하는 쪽에 가깝다.
반면
ST_Transform(geom, 5179)
은 실제 좌표값을 다른 좌표계에 맞게 변환한다.
이 둘을 같은 것으로 생각하면 문제가 생길 수 있다.
예를 들어 4326 데이터를 5179로 바꾸려면
원본 geometry가 실제로 4326 좌표라면 이런 식으로 변환할 수 있다.
ST_Transform(
ST_SetSRID(geom, 4326),
5179
)
흐름으로 보면 이렇다.
현재 좌표가 4326이라는 것을 지정
↓
ST_SetSRID()
4326 좌표
↓
ST_Transform()
5179 좌표
물론 이미 SRID가 정상적으로 들어가 있는 geometry라면 매번 ST_SetSRID()를 할 필요는 없다.
ST_Transform(ag_geom, 5179)
처럼 변환하면 된다.
중요한 건 원본 좌표가 실제로 어떤 좌표계인지 알고 변환해야 한다는 것이다.
숫자는 5179 좌표인데 그냥 ST_SetSRID(geom, 4326)을 해버린다고 그 좌표가 4326으로 변환되는 건 아니다.
이건 그냥 잘못된 이름표를 붙이는 것에 가깝다.

결국 세 개를 이렇게 기억하기로 했다
처음에는 4326, 3857, 5179라는 숫자 자체를 외우려고 했다.
그렇게 하니까 계속 헷갈렸다.
지금은 그냥 어디에서 자주 만나는지를 기준으로 기억하고 있다.
| 4326 | 경도·위도. API나 GPS 데이터에서 많이 봄 |
| 3857 | 웹 지도. OpenLayers 같은 지도 화면에서 자주 봄 |
| 5179 | 국내 공간정보. DB나 GIS 데이터에서 만날 수 있음 |
그리고 좌표값을 봤는데 위치가 이상하면 이제는 데이터부터 의심하지 않는다.
먼저
"이거 좌표계 뭐지?"
부터 확인한다.
지도 작업을 처음 할 때는 좌표 숫자 자체가 맞는지가 제일 중요하다고 생각했는데, 실제로 작업하다 보니 그 숫자가 어떤 기준으로 만들어진 좌표인지가 더 중요할 때가 많았다.
특히
127.xxx, 37.xxx
같은 좌표만 보다가
9xxxxx, 19xxxxx
같은 값을 처음 보면 전혀 다른 데이터처럼 느껴진다.
그런데 좌표계가 다를 뿐 같은 위치를 나타내고 있을 수도 있다.
요즘은 테이블에서 geometry(..., 5179) 같은 걸 봐도 예전처럼 그냥 지나치지는 않는다.
아, 이 좌표를 지도에 올릴 거면 지금 지도가 어떤 좌표계를 쓰는지도 같이 봐야겠구나.
정도는 먼저 생각하게 된 것 같다.
'GIS > Coordinate' 카테고리의 다른 글
| 좌표계만 바꾸면 되는 줄 알았다... ST_SetSRID와 ST_Transform은 완전히 달랐다 (0) | 2026.09.04 |
|---|