Python EPSG 좌표계 변환

좌표계 (Coordinates)

파이썬으로 좌표계 데이터를 다루다 보면 lat, lng, 혹은 coordinates 라는 column 을 발견할 수 있다. 하지만 기존에 아는 위경도 좌표가 아닐 가능성이 높기 때문에 범용성이 높은 하나의 좌표계로 통일시키는 것이 중요하다.

한국의 공공기관에서 제공하는 좌표계 데이터는 크게 3개의 좌표계 시스템을 따른다.

첫 좌표계는 EPSG:5181 로, Korea 2000/Central Belt 라고도 불린다.

중심 좌표는 337412.92 105430.25 이다.

두번째 좌표계는 EPSG:2097 로, 중부원점TM 혹은 Korea 1985/Central Belt 라고도 불린다.

중심 좌표는 200000.00 294155.89 이다.

마지막 좌표계는 EPSG:4326 로, World Geodetic System 이라고도 불린다. 다른 이름으론 WGS84로, 우리가 익숙한 위도/경도를 표시해주는 GPS 좌표계다.

한국의 공공기관에서 데이터 구축 사업을 진행 할 때, 가끔은 전세계를 표시하는 GPS 좌표계보단 한국에 특화된 5181이나 2097을 사용하는 것이 더 유리 할 때가 많다. 하지만 파이썬의 geopandas, JS의 deck.gl 같은 라이브러리들은 GPS 좌표계를 사용하기 때문에 다루는 데이터셋이 어떤 좌표계로 작성이 되어있는지 확인하고, GPS 좌표계로 변환하는 것이 중요하다.

데이터셋을 구축한 공공기관에서 사용한 좌표계를 표시하는 것이 일반적이다. 예시로 서울특별시 대규모점포 인허가 정보 데이터셋을 확인해보면 좌표계가 중부원점TM(EPSG:2079) 이라고 명시한다.

서울특별시 대규모점포 인허가 정보

파이썬의 라이브러리들로 시각화를 진행하기에 앞서 좌표계들을 GPS 위치로 변환하는 작업이 필요한데, 이또한 pyproj 라는 라이브러리로 쉽게 진행 할 수 있다.

Pyproj

Pyproj 는 지도와 좌표계를 다루는 파이썬 라이브러리다.

pip install pyproj 로 설치 가능하며, 직접 짠 좌표계 변환 함수는 다음과 같다.

from pyproj import Proj, transform
import pandas as pd

#!pip install pyproj

#Check type of original coordinate data. ex: epsg:2097, epsg:5181
#Check type of target coordinate data. ex: lat/long is epsg:4326

def coordinate_transformer(data, from_type, to_type, original_x_colname, original_y_colname):

    if 'csv' in data:
        data = pd.read_csv(data, encoding='cp949')

    elif 'xlsx' in data:
        data = pd.read_excel(data)

    elif 'pkl' in data:
        data = pd.read_pickle(data)

    proj_1 = Proj(from_type)
    proj_2 = Proj(to_type)

    x_list=[]
    y_list=[]

    for idx, row in data.iterrows():
        x,y= row[original_x_colname], row[original_y_colname]
        x_,y_ = transform(proj_1, proj_2, x, y)
        x_list.append(x_)
        y_list.append(y_)

    data['lat'] = x_list
    data['lng'] = y_list

    print('Saving excel as data_new.pkl..')
    data.to_pickle(f"data_new.pkl")
    print('done!')

사용법은 간단하다. 함수 인자는 전부 str 값이며,

  • data = 기존 데이터셋
  • from_type = 기존 데이터셋의 좌표계 (ex. EPSG:2097)
  • to_type = target 좌표계 (ex. EPSG:4326)
  • original_x_colname = 기존 데이터셋의 x 좌표
  • original_y_colname = 기존 데이터셋의 y 좌표

를 채워서 실행시키면 directory 에 기존 데이터셋에 변환된 좌표계 column 이 추가된 .pkl 을 리턴한다.