전체 목차 열기 · 10부 35장

PART 01 / CHAPTER 03

03 · 좌표계·CRS·EPSG와 단위

CRS를 지정하는 것과 좌표를 변환하는 것을 구별합니다.

이 페이지에서

목표: 도(degree)와 m를 구별하고 좌표계 오류를 피합니다. 선수: 02장. 실습: 30분.

개념

CRS(Coordinate Reference System)는 좌표 숫자를 지구의 위치로 해석하는 규칙입니다. 지구 모양·기준점·축·단위와 투영 등이 관련됩니다. EPSG 코드는 이런 좌표 참조체계의 정의를 식별하는 번호입니다. 파일에 숫자가 있다고 그 번호를 추측해서 붙이면 안 됩니다.

EPSG:4326은 흔히 웹지도 교환에 쓰는 경위도 좌표계이고 각도 단위를 사용합니다. 지역 분석용 투영 CRS는 지표면을 평면으로 나타내며 m 같은 길이 단위를 사용합니다. 투영도 왜곡이 있으므로 지역과 목적에 맞는 것을 골라야 합니다.

set_crs는 숫자의 의미를 지정하고 숫자를 바꾸지 않습니다. to_crs는 이미 알려진 원래 CRS를 사용해 좌표 숫자를 다른 체계로 계산합니다. 원래 위경도인 자료에 m 좌표계를 set_crs로 덮어쓰는 것은 변환이 아닙니다.

그림으로 이해하기

좌표계 지정과 좌표 변환은 다릅니다

set_crs: 의미를 지정

경도 126.978, 위도 37.5665라는 원자료의 좌표계를 확인한 뒤 EPSG 4326을 지정합니다. 숫자는 바뀌지 않습니다.

원자료가 경위도라는 근거를 확인한 경우입니다. 숫자만 보고 좌표계를 추측해서 붙이면 안 됩니다.

그림 크게 보기 ↗

to_crs: 좌표를 계산

같은 점을 EPSG 5179로 변환하면 동쪽 좌표 953,901.2m, 북쪽 좌표 1,952,032.1m가 됩니다.

GeoPandas의 x·y 순서에 맞춰 경도·위도를 입력했습니다. 출력은 소수 첫째 자리로 반올림했습니다.

그림 크게 보기 ↗
좌표계 정보를 붙이는 일과 좌표값을 변환하는 일을 구별하세요.

03장의 점을 pyproj로 변환해 수치를 만들었습니다. 양쪽은 별도의 단계 설명이며 set_crs로 숫자를 바꾸는 과정을 뜻하지 않습니다.

직접 제작한 교육용 개념도 · 설명 근거: GeoPandas 좌표계

왜 필요한가

위경도에서 buffer(30)을 호출하면 30m가 아니라 30도 좌표 단위의 영역을 계산하게 됩니다. 면적·길이·버퍼는 분석 CRS를 정한 뒤 계산합니다. 높이도 별도 수직 datum과 단위를 확인합니다.

핵심 API

gdf.crs, set_crs, to_crs, estimate_utm_crs를 구별합니다. UTM 자동 추정은 후보를 주는 도구이며 여러 구역에 걸친 광역 분석이나 공식 성과 좌표계 결정을 대신하지 않습니다.

최소 실행 예제

import geopandas as gpd
from shapely.geometry import Point

original = gpd.GeoSeries([Point(126.978, 37.5665)], crs=4326)
projected = original.to_crs(5179)
restored = projected.to_crs(4326)
print("metres:", projected.iloc[0])
print("degrees:", restored.iloc[0])
assert abs(restored.x.iloc[0] - original.x.iloc[0]) < 1e-7

처음 좌표의 x는 경도, y는 위도입니다. EPSG:5179로 변환하면 m 단위 숫자로 바뀌고 다시 4326으로 돌아오면 원래 좌표와 거의 일치합니다. Folium의 [위도, 경도] 입력 순서와 혼동하지 않습니다.

조경·도시 실무 예제

NGII DEM, VWorld 건물, OSM 도로, IFC 모델을 결합할 때 각각의 CRS·단위·높이 기준을 표로 만듭니다. 한국 자료에도 서로 다른 원점·구형 datum이 있으므로 모두 5179라고 가정하지 않습니다. IFC의 로컬 좌표에는 별도의 지도 변환이 필요할 수 있습니다.

시각화

변환 전후 지도 두 장을 비교하되 좌표축 단위를 표기합니다. 서로 겹치지 않는 레이어를 마우스로 억지 이동해 맞추기 전에 .prj, GeoTIFF 메타데이터와 원자료 설명을 확인합니다.

흔한 오류

CRS가 None인데 좌표 값만 보고 allow_override=True로 덮어쓰면 오류가 숨겨집니다. 실제 원래 CRS를 제공기관 자료로 확인한 경우에만 지정하세요. 4326 파일의 좌표 순서와 라이브러리 함수의 축 순서도 별도로 확인합니다.

연습문제

원래 좌표를 그대로 둔 채 잘못된 CRS를 지정한 결과와 올바른 to_crs 결과를 비교하세요. 4326에서 면적을 계산하면 단위를 어떻게 설명할 수 없는지 적으세요.

다음 단계

04장에서 이 코드를 실행할 환경을 만듭니다.

출처

GeoPandas projections, pyproj CRS. 확인 2026-09-30.