GIS

Geopandas(지오판다스) v0.7.0: CRS 저장 방식 변화 둘러보기

유병혁 2020. 2. 22. 11:35

안녕하세요? 2020년 2월 17일, Geopandas(지오판다스) 0.7.0 버전이 배포되었습니다.


Geopandas는 파이썬에서 지리공간 데이터를 보다 쉽게 작업할 수 있는 오픈소스 프로젝트입니다.

Geopandas 공식 홈페이지 | https://geopandas.org/Geopandas 깃허브 | https://github.com/geopandas/geopandas


v0.7.0부터는 파이썬 2.7에 대한 지원이 중단되고, 파이썬 3.5 이상에서 작동된다고 합니다.


이번 배포의 주요 API 변경사항은 CRS(Coordinate Reference System: 좌표참조체계) 저장 방식의 변화입니다.

GeoSeries와 GeoDataFrame의 CRS 정보가 PROJ4 문자열 또는 딕셔너리에서 PROJ6로 대체(pyproj.CRS)됩니다.


Medium(미디엄) 플랫폼의 'Towards Data Science'에 이미 Geopandas v0.7.0에 관한 글이 올라와 있습니다. 빠르죠?!

What is new in Geopandas 0.70 | https://towardsdatascience.com/what-is-new-in-geopandas-0-70-dda0ddc90978


이번 글에서는 Geopandas 최신버전을 업데이트하는 과정에서 CRS 저장 방식이 어떻게 변했는지 확인해 보겠습니다.

정확히는 Geopandas에서 PROJ6가 PROJ4를 대체하면서, 사용자 인터페이스와 제공되는 속성이 개선된 사항입니다.


그렇다면 PROJ는 무엇일까요?! PROJ(이전 PROJ.4)는 좌표계 변환을 수행하는 라이브러리입니다.

PROJ 공식 홈페이지 | https://proj.org/PROJ 깃허브 | https://github.com/OSGeo/PROJ



이전 버전의 CRS 저장 방식을 확인해 보겠습니다. 내 PC의 Geopandas 버전을 확인합니다.

1
2
import geopandas as gpd
gpd.__version__
cs


제 경우는 2019년 7월 12일 배포된 0.5.1 버전을 사용하고 있었습니다. 꽤 지난 버전이죠?!

1
'0.5.1'
cs


실습을 위해 데이터셋을 불러와 보겠습니다. Geopandas가 제공하는 기본 데이터셋은 다음과 같습니다.

1
2
gpd.datasets.available
['naturalearth_cities''naturalearth_lowres''nybb']
cs


여기서는 Natural Earth가 제공하는 세계지도를 불러와 보겠습니다.

1
2
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
world.plot()
cs


해당 레이어의 CRS를 확인해 보니 EPSG:4326입니다.

1
2
world.crs
{'init''epsg:4326'}
cs


CRS 저장 형식은 딕셔너리인 것을 확인할 수 있습니다.

1
2
type(world.crs)
dict
cs


이번에는 Geopandas를 v.0.7.0으로 업그레이드한 후, CRS를 재확인 해보겠습니다.

1
2
3
4
!pip install --upgrade geopandas
import geopandas as gpd
gpd.__version__
'0.7.0'
cs


앞서 열어본 Natural Earth 세계지도 중 우리나라를 선택해 봤습니다.

1
2
3
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
southkorea = world[world.name=='South Korea']
southkorea.plot()
cs



자, 이제 이 데이터셋의 crs를 같은 구문으로 확인해볼까요?!

EPSG:4326에 해당하는 다양한 속성들을 열람해볼 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
southkorea.crs
<Geographic 2D CRS: EPSG:4326>
Name: WGS 84
Axis Info [ellipsoidal]:
- Lat[north]: Geodetic latitude (degree)
- Lon[east]: Geodetic longitude (degree)
Area of Use:
- name: World
- bounds: (-180.0-90.0180.090.0)
Datum: World Geodetic System 1984
- Ellipsoid: WGS 84
- Prime Meridian: Greenwich
cs

아래와 같이 crs의 요소(예: 데이텀)만 선택해 볼 수도 있습니다.
1
2
3
4
5
southkorea.crs.datum
DATUM["World Geodetic System 1984",
    ELLIPSOID["WGS 84",6378137,298.257223563,
        LENGTHUNIT["metre",1]],
    ID["EPSG",6326]]
cs

CRS 저장 형식은 pyproj.CRS로 변경됐음을 확인할 수 있습니다.
1
2
type(southkorea.crs)
pyproj.crs.crs.CRS
cs

이처럼 Geopandas v.0.7.0에서는 더 나은 CRS 저장 방식을 제공합니다. 개발자 입장에서는 기존

코드의 변경이 불가피할 수 있는데요, 관련해서는 다음 마이그레이션 가이드를 참고하시면 되겠습니다.

마이그레이션 가이드 | https://geopandas.readthedocs.io/en/latest/projections.html#upgrading-to-geopandas-0-7-with-pyproj-2-2-and-proj-6