본문 바로가기
  • "You can't manage what you can't measure" Peter Drucker
데이터 분석 (with Rstudio)

[Rstudio] 대한민국 지도 그리기 (전국 지도)

by Vitaminymc 2024. 4. 16.
반응형

[ 대한민국 지도 그리기 🌏 ]

[ 글로벌 행정 지역 데이터베이스 GADM 활용]

getData를 실행하면 "곧 제거된다"고 경고 메세지를 보여줌

아래 사이트에 방문하여 SHP 파일 (Shapefile)을 다운로드 받을 수 있음

https://gadm.org/download_country.html

 

GADM

 

gadm.org

[ level = 1 : 시도]

korea_1 <- getData('GADM', country='kor', level=1)
Warning message:
In getData("GADM", country = "kor", level = 1) :
  getData will be removed in a future version of raster
. Please use the geodata package instead
ggplot()+geom_polygon(data=korea_1,
                      aes(x=long, y=lat, group=group),
                      fill='white',
                      color='black') +
    theme(panel.background = element_rect(fill = '#d8e4ec', colour = 'lightgray'))

 

[ level = 2 : 시군구 ]

korea_2 <- getData('GADM', country='kor', level=2)
> korea_2 <- getData('GADM', country='kor', level=2) 
trying URL 'https://biogeo.ucdavis.edu/data/gadm3.6/Rsp/gadm36_KOR_2_sp.rds'
Content type 'text/html; charset=iso-8859-1' length 1103004 bytes (1.1 MB)
downloaded 1.1 MB

Warning message:
In getData("GADM", country = "kor", level = 2) :
  getData will be removed in a future version of raster
. Please use the geodata package instead
summary(korea_2)
> summary(korea_2)
Object of class SpatialPolygonsDataFrame
Coordinates:
        min       max
x 125.08180 130.94041
y  33.11208  38.61215
Is projected: FALSE 
proj4string : [+proj=longlat +datum=WGS84 +no_defs]
Data attributes:
    GID_0              NAME_0             GID_1              NAME_1         
 Length:229         Length:229         Length:229         Length:229        
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
  NL_NAME_1            GID_2              NAME_2           VARNAME_2        
 Length:229         Length:229         Length:229         Length:229        
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
  NL_NAME_2            TYPE_2           ENGTYPE_2             CC_2          
 Length:229         Length:229         Length:229         Length:229        
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
    HASC_2         
 Length:229        
 Class :character  
 Mode  :character  
head(korea_2)​
> head(korea_2)
       GID_0      NAME_0   GID_1 NAME_1               NL_NAME_1     GID_2    NAME_2
184167   KOR South Korea KOR.1_1  Busan 부산광역시 | 釜山廣域市 KOR.1.1_1       Buk
184231   KOR South Korea KOR.1_1  Busan 부산광역시 | 釜山廣域市 KOR.1.2_1  Busanjin
184264   KOR South Korea KOR.1_1  Busan 부산광역시 | 釜山廣域市 KOR.1.3_1      Dong
184196   KOR South Korea KOR.1_1  Busan 부산광역시 | 釜山廣域市 KOR.1.4_1   Dongnae
184310   KOR South Korea KOR.1_1  Busan 부산광역시 | 釜山廣域市 KOR.1.5_1   Gangseo
184128   KOR South Korea KOR.1_1  Busan 부산광역시 | 釜山廣域市 KOR.1.6_1 Geumjeong
       VARNAME_2          NL_NAME_2 TYPE_2 ENGTYPE_2 CC_2 HASC_2
184167      <NA>         북구| 北區     Gu  District <NA>   <NA>
184231      <NA> 부산진구| 釜山鎭區     Gu  District <NA>   <NA>
184264      <NA>         동구| 東區     Gu  District <NA>   <NA>
184196      <NA>     동래구| 東萊區     Gu  District <NA>   <NA>
184310      <NA>     강서구| 江西區     Gu  District <NA>   <NA>
184128      <NA>     금정구| 金井區     Gu  District <NA>   <NA>
#data frame 변환
korea_2_df <- fortify(korea_2)

korea_2_df |>
head (10)​
> korea_2_df |>
+   head (10)
       long      lat order  hole piece     id    group
1  128.9957 35.17683     1 FALSE     1 184168 184168.1
2  128.9983 35.19250     2 FALSE     1 184168 184168.1
3  129.0003 35.20673     3 FALSE     1 184168 184168.1
4  129.0055 35.21033     4 FALSE     1 184168 184168.1
5  129.0095 35.21527     5 FALSE     1 184168 184168.1
6  129.0125 35.22131     6 FALSE     1 184168 184168.1
7  129.0181 35.23129     7 FALSE     1 184168 184168.1
8  129.0229 35.24030     8 FALSE     1 184168 184168.1
9  129.0237 35.24908     9 FALSE     1 184168 184168.1
10 129.0297 35.25427    10 FALSE     1 184168 184168.1
ggplot()+geom_polygon(data=korea_2_df,
                      aes(x=long, y=lat, fill = id, group=group), 
                      color='black', show.legend =FALSE) +
  theme(panel.background = element_rect(fill = '#d8e4ec', colour = 'lightgray'))


[ 대한민국 지도 그리기 : SHP 파일 사용 🌏 ]

[ 대한민국 행정구역(SHP 파일) 다운로드 ]

다운로드 링크 주소 (2023년 7월 업데이트 종료)

지도 작성 수준 (시도, 시군구, 읍면동)에 따라, 해당 SHP 파일을 다운로드 받아서 사용

http://www.gisdeveloper.co.kr/?p=2332

 

대한민국 최신 행정구역(SHP) 다운로드 – GIS Developer

 

www.gisdeveloper.co.kr

2023년 12월 이후의 최신 행정구역(SHP) 데이터는 지오서비스웹(GEOSERVICE-WEB)의 아카이브를 통해서 다운로드 받을 수 있도록 변경

 

https://www.geoservice.co.kr/

 

GEOSERVICE-WEB

 

www.geoservice.co.kr

지오서비스웹(GEOSERVICE-WEB)
지오서비스웹(GEOSERVICE-WEB)

지오코인 무료 충전 정책이 변경 (2024년 4월 5일)
지오코인이 50,000개 미만일 때 매일 0시에 지오코인이 50,000개로 충전됩니다.

[ 대한민국 지도 그리기 /w SHP 파일 사용 ]

[ rgdal  패키지  설치]

'rgdal' 패키지는 CRAN 저장소에서 제거되어, 패키지의 업데이트 및 관리는 없다.

'rgdal' 패키지를 사용하기 위해서는install.packages('rgdal')이 아닌 아래와 같이 설치해야 한다. install.packages('rgdal', repos = "http://packagemanager.posit.co/cran/2023-10-13")

 

https://cran.r-project.org/web/packages/rgdal/index.html

 

CRAN - Package rgdal

Package ‘rgdal’ was removed from the CRAN repository. Formerly available versions can be obtained from the archive. Archived on 2023-10-16 at the request of the maintainer. Consider using 'sf' or 'terra' instead. A summary of the most recent check resu

cran.r-project.org

Package ‘rgdal’ was removed from the CRAN repository.
Formerly available versions can be obtained from the archive.
Archived on 2023-10-16 at the request of the maintainer. Consider using 'sf' or 'terra' instead.
A summary of the most recent check results can be obtained from the check results archive.
Please use the canonical form https://CRAN.R-project.org/package=rgdal to link to this page.
install.packages('rgdal', repos = "http://packagemanager.posit.co/cran/2023-10-13")

library(rgdal)
> library(rgdal)

Please note that rgdal will be retired during October 2023,
plan transition to sf/stars/terra functions using GDAL and PROJ
at your earliest convenience.
See https://r-spatial.org/r/2023/05/15/evolution4.html and https://github.com/r-spatial/evolution
rgdal: version: 1.6-7, (SVN revision 1203)
Geospatial Data Abstraction Library extensions to R successfully loaded
Loaded GDAL runtime: GDAL 3.6.2, released 2023/01/02
Path to GDAL shared files: C:/Rstudio/R-4.3.1/library/rgdal/gdal
 GDAL does not use iconv for recoding strings.
GDAL binary built with GEOS: TRUE 
Loaded PROJ runtime: Rel. 9.2.0, March 1st, 2023, [PJ_VERSION: 920]
Path to PROJ shared files: C:/Rstudio/R-4.3.1/library/rgdal/proj
PROJ CDN enabled: FALSE
Linking to sp version:2.1-0
To mute warnings of possible GDAL/OSR exportToProj4() degradation,
use options("rgdal_show_exportToProj4_warnings"="none") before loading sp or rgdal.

[ SHP 파일 불러오기 : readOGR ]

library(rgdal)
library(tidyverse)

#SHP 파일 불러오기
map_rgdal <- readOGR('sig.shp')

 

#지도 그리기
plot(map_rgdal, main = "Map_rgdal")

# 데이터프레임으로 변환
map_df <- fortify(map_rgdal)

#지도 그리기 ggplot + geom_polygon
map_df |>
  ggplot()+geom_polygon(aes(x=long, y=lat, fill = id, group=group), 
                        color='black', show.legend =FALSE) +
  theme(panel.background = element_rect(fill = '#d8e4ec', colour = 'lightgray'))

 

[ 좌표 변환 : spTransform ]

GBS 좌표계를 익숙한 WBS 좌표계로 변환

  • GBS (Geocentric Cartesian Coordinate System):
    GBS는 지구를 중심으로 하는 직교 좌표계, 지구의 중심을 원점으로 하고, 지구의 세 축 (X, Y, Z)에 따라 좌표를 정의. GBS는 지구의 내부 구조를 연구하거나 위성 궤도 및 우주 정찰에 사용됩니다.
  • WGS (World Geodetic System):
    WGS는 지구의 형태를 근사화하기 위한 좌표계, WGS는 GPS와 같은 글로벌 위치 결정 시스템에서 사용되며, 지구의 전역적인 위치를 정확하게 측정하기 위해 사용, WGS 좌표계는 다양한 버전이 있으며, 주로 WGS 84가 사용
#대한민국 최신 행정구역(SHP) 다운로드:  2021년 1월 29일 버전
map_rgdal2 <- readOGR('TL_SCCO_SIG.shp')

#현 좌표계 보기
map_rgdal2@polygons[[1]]@Polygons[[1]]@coords %>% head(n=10L)
> map_rgdal2@polygons[[1]]@Polygons[[1]]@coords %>% head(n=10L)
         [,1]    [,2]
 [1,] 1007462 2008949
 [2,] 1007512 2008902
 [3,] 1007698 2008919
 [4,] 1007797 2008978
 [5,] 1007921 2008946
 [6,] 1007947 2008939
 [7,] 1008014 2008933
 [8,] 1008200 2008915
 [9,] 1008271 2008905
[10,] 1008358 2008893

 

SP 패키지 활용

library(sp)

#좌표계 변환 
map_rgdal2_wbs <- spTransform(map_rgdal2, CRSobj = CRS ("+proj=longlat +ellps=WGS84 +no_defs"))

#변경된 좌표계 보기
map_rgdal2_wbs@polygons[[1]]@Polygons[[1]]@coords %>% head(n=10L)
> map_rgdal2_wbs@polygons[[1]]@Polygons[[1]]@coords %>% head(n=10L)
          [,1]     [,2]
 [1,] 127.5851 38.08062
 [2,] 127.5857 38.08020
 [3,] 127.5878 38.08035
 [4,] 127.5889 38.08088
 [5,] 127.5903 38.08060
 [6,] 127.5906 38.08053
 [7,] 127.5914 38.08048
 [8,] 127.5935 38.08032
 [9,] 127.5943 38.08023
[10,] 127.5953 38.08011

익숙한 위경도 값을 볼 수 있다.

 

SHP 파일에 따라, 아래와 같은 에러가 발생할 수 있다.

> spTransform(map_rgdal, CRSobj = CRS ("+proj=longlat +ellps=WGS84 +no_defs"))
Error in if (is.projected(obj)) { : missing value where TRUE/FALSE needed
In addition: Warning message:
In spTransform(xSP, CRSobj, ...) :
  NULL source CRS comment, falling back to PROJ string

 

# 데이터프레임으로 변환
map_df2 <- fortify(map_rgdal2_wbs)

#지도 그리기
ggplot() +
  geom_polygon(data = map_df2, aes(x = long, y = lat, fill=id, group = group), color='white', show.legend=FALSE) +
  ggtitle("Map_rgdal_2")

 

 

rgdal 패키지가 더 이상 업데이트가 되지도 않음에 따라, 최근에는 sf 패키지를 더 많이 사용하며, Simple Features를 사용하여 공간 데이터를 다룬다.

sf 패키지는 데이터 처리와 시각화를 더 간단하고 효율적으로 할 수 있다.

 

sf패키지 사용 방법은 다음 글에...

https://logistician.tistory.com/entry/Rstudio-%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD-%EC%A7%80%EB%8F%84-%EA%B7%B8%EB%A6%AC%EA%B8%B0-%EC%A0%84%EA%B5%AD-%EC%A7%80%EB%8F%84-%EC%A7%80%EC%97%AD%EB%B3%84-%EC%A7%80%EB%8F%84

 

[Rstudio] 대한민국 지도 그리기 (전국 지도, 지역별 지도)

[ 대한민국 지도 : 전국 🌏 ] [ 대한민국 행정구역(SHP 파일) 다운로드 ] 다운로드 링크 주소 (2023년 7월 업데이트 종료) 지도 작성 수준 (시도, 시군구, 읍면동)에 따라, 해당 SHP 파일을 다운로드 받

logistician.tistory.com


728x90