-
R과 Leaflet (1)R 이모저모 2020. 11. 14. 22:15
이번 글에서 다뤄볼 주제는 지도 시각화에서 유용하게 쓰이고 있는 leaflet API를 R에서 사용하는 방법입니다. 이전 글에서 소개한 google map에 비해 엑세스도 편리하고, 무엇보다 동적인 시각화를 제공한다는 면에서 무겁긴 해도 훨씬 좋은 지도 시각화 툴이라서 익히신다면 유용하게 쓸 수 있을 것입니다.
1. BASE 지도
leaflet은 지정한 구역 지도를 호출하는 google map api와 다르게 전체 배경 지도를 깔아놓고 시작하게 되는데, 이 배경지도(basemap)은 자신이 직접 제작한 파일을 집어넣거나 제공되는 일정 지도들을 활용하여 쓸 수 있습니다. 이 배경지도는 addTiles()라는 함수로 더하게 되는데, 아무 설정을 안 했을 경우 배경지도는 openstreet map(www.openstreetmap.org/#map=7/35.948/127.736)의 지도를 사용하게 되며, 아래와 같은 그림으로 나오게 됩니다.
만약 다른 지도를 사용하고 싶다면 addTiles()대신 addProviderTiles라는 함수로 제공된 지도들을 적용해 볼 수 있습니다. 총 164개의 지도가 providers라는 리스트에 이름으로 들어가 있으며, 이 이름들을 'provder = 제공자 명'으로 넣어서 사용할 수 있습니다.
2. 시점 고정과 마커 추가
위와 같이 배경 지도만 생성해서 사용할 경우, 사용자가 원하는 지역을 찾기 위해서 일일히 확대해서 찾아봐야하는 수고를 해야만 합니다. 데이터를 추가하면 자연스럽게 시점이 이동하긴 하지만, 보다 정확히 하기 위해서는 setView라는 함수로 시점을 지정해 주는 것이 좋습니다.
다음으로는 마커 추가입니다. 마커는 일반적으로 우리가 지도에 무언가를 표현할 때 가장 생각하기 쉬운 형태인 점 형태로, addMarkers라는 함수로 추가할 수 있습니다. leaflet은 위경도 데이터를 받으므로, lng에 경도를, lat에 위도를 집어넣음으로서 생성해 볼 수 있습니다.
또한 원한다면 setview와 마커를 따로 놓아서 아래와 같이 첫 시야 내에 마커가 안보이게 할 수도 있습니다.
물론 위처럼 하나하나 값을 넣는 방법은 별로 효율적이지가 않기도 하고, 코드가 지저분해지기 쉽습니다. 따라서 실제 사용할때는 데이터프레임을 넣어서 쓰게 되며, 이 경우 직접 값을 넣는 대신 'data = 데이터프레임' 으로 선언하게됩니다.
df의 경우 이름이 lng, lat으로 되어있어 leaflet이 별도의 파라미터 없이 자동으로 lng가 경도, lat이 위도로 인식하게 되나 이 이외의 이름으로 설정되어 있을 경우 오류가 나게 됩니다. 이 경우 ~x, ~y와 같은 방식으로 ~칼럼명을 통해 직접 경도와 위도 칼럼을 인식하도록 해줘야 합니다.
3. 마커의 종류 : Circle과 Awesome Marker
기본 마커는 가장 기본적인 시각 역할은 훌륭히 수행하지만, 일반적으로 ggplot같은 곳에서 점으로 표현하는 것보단 지저분해 보이는 경우가 있으며 집/카페 등 특정 모습을 표현하고 싶을 땐 아쉬운 경우가 있습니다. 이 때 간단한 원으로 표현되는 circle marker나 아이콘을 추가 가능한 awesome marker로 표현하면 보다 나은 모습을 볼 수 있습니다.\
3.1 원형 (addCircleMarkers)
원형 마커는 addCircleMarkers라는 함수로 추가 가능하며, radius라는 파라미터로 그 크기를 조정할 수 있습니다. 활용 방법은 일반 마커와 크게 다르지 않으나, 특히 요긴할 경우는 좁은 지역에 여러 점이 몰려서 마커로 표현 시 제대로 볼 수 없는 경우 사용하면 유용합니다.
3.2 Awesome Marker
awesome marker는 말 그대로 기존보다 멋진 마커를 생성하는 방법으로, leaflet에 저장되어 있는 여러 아이콘들을 활용할 수 있게 해줍니다. addAwesomeMarkers라는 함수로 추가하게 되며, awesomeIcons라는 함수로 icon을 생성해서 이 마커에 아이콘을 할당할 수 있게 됩니다. 아이콘에 관련된 정보는 관련 사이트(github.com/lvoogdt/Leaflet.awesome-markers)에서 더 많은 옵션을 확인할 수 있습니다.
4. 정보 표시 : POPUP과 라벨
만약 leaflet이 할 수 있는 기능이 지도 위에 점찍기가 전부였다면 이렇게 널리 사용되진 않았을 것입니다. leaflet은 popup이랑 라벨이라는 옵션으로 해당 마커(또는 폴리곤)를 클릭할 때 정보를 표출할 수 있으며, 이를 통해 별도의 데이터를 보지 않아도 다른 정보들을 같이 볼 수 있게 해줍니다. popup과 라벨의 차이점은 popup은 그 마커를 클릭했을 때만 정보가 보이게 되며, 라벨은 그곳에 마우스를 올리면 정보를 보여주게 됩니다.
또한 이 POPUP/라벨은 좌표처럼 데이터 내 칼럼값을 받아갈 수 있고 html 문법을 따라가기 때문에, 데이터에 있는 여러 정보들을 하나의 문자로 엮어서 아래와 같이 표출시킬 수도 있습니다.
5. 마치며...
여기까지는 leaflet과 관련된 기초적인 사항들 및 동작방법을 알아보았습니다. 다음 글에서는 지리정보 관리 패키지인 sf패키지와 연결하여 다양한 활용방법과, legend추가, plot 추가 등 leaflet이 가진 조금 더 고급스런 기능들에 대해 써보도록 하겠습니다.
예제 코드 : github.com/JunmoNam/applebox_blog/blob/master/R/20)%20leaflet.R
'R 이모저모' 카테고리의 다른 글
R과 Google Map (0) 2020.06.13 R과 Few shot learning : 샴 네트워크 (0) 2020.02.15 sf : R과 지도(2) (0) 2020.01.03 sf : R과 지도 (1) (0) 2019.12.06 R과 Data Wrangling (0) 2019.08.19