Summary
- 공간 데이터를 다루다 보면 가장 흔하게 마주치는 문제가 좌표계(CRS) 불일치이다.
- Python에서 가장 권장되는 방식인
pyproj라이브러리의Transformer클래스를 활용한다.always_xy=True옵션으로 입출력 순서를 항상 (경도, 위도)로 고정하는 것을 권장한다.
들어가며
공공데이터에서 제공하는 좌표계는 일반적으로 WGS84(EPSG:4326)이다. 그러나 이를 국내 지도에 알맞게 투영하기 위해서는 국내 대표적인 투영좌표계인 UTM-K(EPSG:5179)로 변환할 필요가 있다.
Transformer 클래스
출발 좌표계(Source)와 도착 좌표계(Target) 사이의 변환 파이프라인을 생성한다.
좌표 변환 객체
Transformer.from_crs(crs_from, crs_to, always_xy)| 파라미터 | 설명 | 예시 |
|---|---|---|
crs_from | 변환 전 현재 좌표계 | "EPSG:4326" |
crs_to | 변환 후 목표 좌표계 | "EPSG:5179" |
always_xy | 입출력을 항상 (경도, 위도) 순으로 고정 | True 권장 |
always_xy=True를 권장하는 이유좌표계의 공식 정의는 (위도, 경도) 순 (Y, X)이다. 우리에게 익숙한 (경도, 위도) 순 (X, Y)으로 고정시키기 위해
always_xy=True설정을 권장한다.
from pyproj import Transformer
transformer = Transformer.from_crs('EPSG:4326', 'EPSG:5179', always_xy=True)좌표 변환
NumPy 배열로 입력하자
apply메서드보다 NumPy 배열로 변환한 후 입력하는 것이 속도 면에서 우월하다.
x_arr = df['x'].to_numpy()
y_arr = df['y'].to_numpy()
x_5179, y_5179 = transformer.transform(x_arr, y_arr)예시
WGS84 좌표계 값인 x, y를 UTM-K 좌표값으로 변환한 값을 새로운 열로 생성
import numpy as np
import pandas as pd
from pyproj import Transformer
transformer = Transformer.from_crs('EPSG:4326', 'EPSG:5179', always_xy=True)
df['x_5179'], df['y_5179'] = transformer.transform(
df['x'].to_numpy(),
df['y'].to_numpy()
)Reference