전통적으로 지리정보는 .shp
확장자명을 갖는 ESRI Shapefile에 저장을 했다. *.shp
, *.dbf
, *.shx
파일이 나눠서 저장되어 있다. 이로 인해서 ESRI Shapefile 지도정보 파일은 디렉토리에 담겨지게 된다.
*.shp
: geometry
정보(점, 선, 다각형)*.dbf
: 각 geometry
에 대한 속성정보 저장*.shx
: geometry
와 속성(attributes) 정보 연결*.prj
: 좌표계 정보 저장R 에서 ESRI Shapefile 파일을 저장하면 S4 SpatailPolygonsDataFrame
으로 저장된다. 따라서, 점/선/다각형이 담긴 geometry
와 데이터프레임이 연결되어 저장되어 있다.
실제 세상을 지도로 표현함에 있어 두가지 방식을 사용한다. 하나는 벡터(vector)로 표현하는 것이고 OGR
을 사용하고, 또 다른 하나는 격자(Grid), 래스터(raster)로 표현하는 것으로 GDAL
을 아래에 각각 깔고 R로 불러와서 사용하게 된다.
좌표계(CRS, Coordinate Reference System)는 둥근 지구를 2차원 평면에 투영(projection)하는 다양한 방법을 지칭한다. 좌표계를 제작할 때 각기 다른 목적에 맞춰 제작되었기 때문에 지리정보를 활용함에 있어 적절한 좌표계를 채택하여활용하는 것이 중요하다. 많이 사용되는 좌표계는 다음이 있다. WGS84(WGS 1984, EPSG:4326, WGS84)는 세계 지구 좌표 시스템(World Geodetic System, WGS) 1984년에 제정된 범 지구적 측위 시스템으로 지도학, 측지학, 항법에 많이 사용된다.
좌표계를 특정하는 방식은 EPSG 숫자코드를 사용하는 방법과 PROJ4 정형문자열 방식이 있다. EPSG 코드가 항상 특정 좌표시스템과 대응되지는 않지만, 공간 정보를 담고 있는 객체(spatial object)가 특정 좌표계를 갖고 있다면 PROJ4 투영 문자열을 항상 갖게된다.
+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs
+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs
+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +units=m +no_defs
+proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs
+proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=bessel +units=m +no_defs +towgs84=-145.907,505.034,685.756,-1.162,2.347,1.592,6.342
+proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +units=m +no_defs
+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +units=m +no_defs
+proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +units=m +no_defs
+proj=tmerc +lat_0=38 +lon_0=131 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +units=m +no_defs
우리나라에서 사용하는 좌표계의 종류도 너무 많고 설정 수치도 다양한데 조덕연님이 2012년 대한민국 좌표계에 대해서 다음과 같이 잘 정리해 주셨다.
R에서 공간 지리 통계 및 공간 지리 데이터를 다루는 팩키는 rgdal
, sp
, rgeos
가 개발되어 사용되고 있었다.
sp
: R에서 공간 데이터(spatial data)를 표현하는 클래스와 메쏘드 자료구조.rgdal
: R과 GDAL (Geospatial Data Abstraction Library) and PROJ4 라이브러리를 연결시키는 인터페이스 팩키지 - 래스터 / 벡터 지리공간 데이터 형식과 좌표 변환 기능 담당rgeos
: R과 GEOS - Geometry Engine
라이브러리를 연결시키는 인터페이스 팩키지 - 면적, 둘레 길이, 거리, 다양한 지도 연산(dissolve, buffer, overlap, union, contains, …)하지만, 2016년 10월 20일 sf
가 발표되면서 sp
, rgeos
, rgdal
3개 핵심 팩키지가 하나로 통합되었다. sp
팩키지 저자 Edzer Pebesm가 sp
를 주도하고 있으며 tidyverse
와 호환되고 파이프 구문 등 철학을 공유하고 있다.
sp
: sp: Classes and Methods for Spatial Datasf
: sf
stars
: Spatiotemporal tidy arrays for Rggmap
: ggmap: Spatial Visualization with ggplot2cartography
: Create and integrate maps in your R workflow! - Base 그래픽에 기반을 두고 있으며 기본적인 지도 뿐만 아니라 고급 지도 표현도 가능하다.sp
: sf
이전 시절
sp
, rgdal
, rgeos
를 결합하여 사용하던 옛시절이 있었다.
sp
: 벡터 혹은 래스터 공간정보 데이터를 다루기 위한 기본 자료구조.
rgdal
: GDAL
/OGR
을 바탕으로 공간데이터를 불러오고 저장하는 역할을 담당.
rgeos
: 파이썬 shapely
처럼 GEOS
를 바탕으로 다양한 geometry
연산작업을 수행(union
, intersections
, buffer
등).
sf
통일 시대
실세계에서 객체가 어떻게 표현되어야 하는지를 모사하는 ISO 19125-1:2004
표준 Simple Feature
를 충실히 따름.
sf
의 기본은 데이터프레임
sp
, rgdal
, rgeos
팩키지 모든 기능을 sf
하나에 담아냄.
sp
, rgdal
보다 설치하기 쉽고 훨씬 더 빠르고 확장성이 뛰어남.
rspatial
생태계10과거 많이 생산된 ESRI .shp
지도데이터와 표준으로 자리잡고 있는 .gpkg
파일을 read_sf()
함수로 불러 읽어들인다. 그리고 나서 tmap
팩키지의 다양한 지도 생성 동사를 동원하여 빠르게 시각화한다.
Data Carpentry, “Introduction to Geospatial Raster and Vector Data with R”↩
OSGeo(Open Source GeoSpatial) 한국어 지부 - OSGeo Korean Chapter, “한국 주요 좌표계 EPSG코드 및 proj4 인자 정리”"↩
Wolfgang SCHEUCHER (Solitec), “Coordinate Reference System”↩
VISUALIZING STORY - STORY ABOUT TRUTH AND LIFE, “한국 주요 좌표계 EPSG코드 및 PROJ4 인자정리”↩
Sébastien Rochette, Dorris Scott, Jakub Nowosad (2020), “First steps in spatial handling and visualization”↩
Kim A. Etienne C. Timothée G., “Spatial Data and Cartography with R”, SatRday Paris February 2019↩
J. Nowosad, R. Lovelace (2020), “Recent changes in R spatial and how to be ready for them”, Why R↩
데이터 과학자 이광춘 저작
kwangchun.lee.7@gmail.com