[R 지리공간 데이터 분석] leaflet 패키지를 이용한 동적 지도 (Interactive Map) 만들기
R 분석과 프로그래밍/R 지리공간데이터 분석 2020. 12. 31. 18:03이번 포스팅에서는 R의 leaflet 패키지와 Open Street Map을 활용하여 RStudio 또는 Jupyter Notebook R kernel IDE 에서 Interactive Map 을 그리는데 있어,
(1) 기본 상호작용하는 지도 생성하기 (create a basic interactive map)
(2) 지도 스타일 추가하기 (add map styles)
(3) 지도 좌표에 표시 풍선 추가하기 (add marker popup at latitude/longitude coordinates)
(4) 상호작용하는 동적 지도를 웹 페이지로 저장하기 (save an interactive map as web page)
하는 방법을 소개하겠습니다.
아래의 포스팅 예시는 RStudio IDE 에서 진행하였습니다. (Jupyter Notebook R kernel 에서도 가능)
(1) 기본 상호작용하는 지도 생성하기 (create a basic interactive map) |
먼저 R의 leaflet 패키지를 설치하고 불러오기를 해보겠습니다.
# install and importing leaflet package |
다음으로 leaflet 패키지의 leaflet() 함수를 사용하여, 기본 OpenStreetMap 타일을 추가하고 (add default OpenStreetMap map tiles), 대한민국의 위도(latitude), 경도(longitude) 위치에 zoom = 6 의 축소/확대 비율로 설정해서 동적인 지도(interactive map)를 그려보겠습니다.
마우스 커서로 좌측 상단의 '+'를 클릭하면 지도가 'zoom in' 확대되어 더 상세하게 볼 수 있으며, 반대로 좌측 상단의 '-' 를 클릭하면 지도가 'zoom out' 축소되어 더 넓은 지역을 볼 수 있게 됩니다. (마우스 휠을 사용해서 zoom in, zoom out 할 수도 있습니다.)
# creat a basic map |
애초에 기본 지도를 생성할 때 지도의 zoom 수준을 setView(zoom = xx) 에서 숫자로 설정해줄 수도 있습니다. 바로 위에서 생성했던 지도가 zoom = 6 이었다면, 아래 지도는 zoom = 8, zoom = 16 으로 기본 지도를 생성하게 해보겠습니다. 아래에 보면, 지도가 좀더 zoom in 으로 확대되어 더 상세하게 볼 수 있습니다.
(물론 interactive map 이기 때문에 마우스를 이용해서 언제든지 자유롭게 지도를 동적으로 zoom in, zoom out 할 수 있습니다.)
# zoom = 8 leaflet() %>%
# zoom = 16 (zoom in) leaflet() %>% |
(2) 지도 스타일 추가하기 (add map styles) |
addProviderTiles("Tile Name Here") 를 이용하여 외부 지도 타일을 추가할 수 있습니다.
아래는 NASA에서 제공하는 우주의 인공위성에서 바라본 2012년 밤의 지도 타일("NASAGIBS.ViirsEarthAtNight2012") 입니다. 별도의 파일을 미리 다운로드 하거나 할 필요는 없구요, 그냥 타일 이름을 addProviderTiles() 메소드 안에 큰 따옴표로 해서 적어주기만 하면 됩니다. (물론, 외부와 통신할 수 있는 인터넷망에 접속해 있어야 합니다.)
한국의 경우 남한은 밤에 환한 반면에, 북한은 평양 빼고는 어둡네요. 38선 경계도 불빛으로 환하게 구분이 되는 모습을 보노라니 약간 서글프네요.
# map style: NASA |
아래는 zoom = 16 으로 zoom in 해서 삼성동 COEX 부근을 확대해본 것인데요, 여기에 addProviderTiles("Esri.WorldImagery") 타일을 추가해 보았습니다. 항공사진 모습의 타일이네요.
# map style: Esri.WorldImagery |
위의 두 예 외에 leaflet() 에 다른 외부 타일 제공자의 타일 지도를 추가하고 싶으면 아래의 url 의 Leaflet-prodivers preview 에 방문해서 원하는 형태의 지도 스타일을 찾았다면 그 이름을 addProviderTiles("Tile Name Here") 메소드 안에 타일 이름을 큰 따옴표 안에 써주기만 하면 됩니다.
https://leaflet-extras.github.io/leaflet-providers/preview/
(3) 지도 좌표에 표시 풍선 추가하기 (add marker popup at latitude/longitude coordinates) |
addMarkers() 메소드를 사용하면 위도(latitude), 경도(longitude) 좌표 위치에 풍선 모양의 표식과 커서를 클릭했을 때 팝업으로 나타나는 설명을 추가할 수 있습니다.
아래 예제에서는 대한민국 삼성동의 COEX Mall (코엑스 몰), GBC (현대자동차 Global Business Center), Samsil-Stadium (올림픽 주 경기장) 의 3개 주요 POI (Point Of Interest) 지점에 말풍선 표식을 추가해보았습니다. 마우스 커서를 말풍선 표식에 가져가서 클릭을 해보면 popup 설명이 튀어나옵니다.
(아래 예제는 스크린 캡쳐를 한 이미지 파일이어서 interactive map 기능이 안됩니다. RStudio 나 Jupyter Notebook R kernel 에서 interactive map 기능 사용 가능합니다.)
# adding Popup
|
(4) 상호작용하는 동적 지도를 웹 페이지로 저장하기 (save an interactive map as web page) |
위에서 만든 Interactive Map 을 HTML 웹 페이지로 저장하여 내보내기를 할 수 있습니다.
RStudio의 우측 하단의 Viewer 화면에서
> Export
> Save as Web Page
메뉴를 선택한 후에
아래와 같은 'Save As Web Page' 저장하기 팝업 화면이 나오면 HTML 파일의 이름과 저장할 경로를 지정해주면 됩니다. 나중에 이 HTML 파일을 웹 페이지에 올려서 바로 Interactive Map 을 바로 웹 페이지에 올릴 수 있습니다.
2020년 마지막 포스팅이 되겠네요.
이번 포스팅이 많은 도움이 되었기를 바랍니다.
행복한 데이터 과학자 되세요.
그리고 2020년 한해 마무리 잘하시고, 2021년 새해에는 건강하시고 복 많이 받으세요.