본문 바로가기

~2023

[GIS/Folium] Folium을 사용해 지도 그리기

728x90
반응형

국립공원공단 프로젝트를 진행하는 도중에 map을 그려야 될 상황이 되었는데 Python 언어로 map을 그리기 적절한 라이브러리가 무엇이 있을까 고민하다가 멘토께서 Folium을 추천해주셔서 사용을 했다.

우선 다운로드를 하자.

pip install folium

그런 다음에 지도 객체를 만들기 위해 folium.Map()을 호출한다. location, zoom_start, width, height 속성이 있는데 loaction은 처음 지도가 위치한 [위도, 경도]이며 zoom_start는 시작 배율이다. width와 height는 쉽게 알 수 있듯이 가로와 세로 크기를 의미한다. 따라서 코드는 다음과 같다. 

*창 활성화시 대한민국을 창 크기에 맞게 딱 보고 싶다면 loaction으로 [36.684273, 128.068635]와 zoom_start로 6.5을 지정하면 된다.

 m = folium.Map(location=[36.684273, 128.068635], zoom_start=6.5, width="100%", height="100%")  # 기본이 되는 지도 정보 가져오기

그럼 m 변수에 맵 정보가 담기게 되고 folium 메소드들을 m에다가 추가하면 된다.

그래서 마커와 팝업을 m에다가 추가해보자.

마커는 folium.Marker()를 사용하며 매개변수로 넘기는 [위도, 경도] 위치에 마커를 표기한다.

마커를 클릭시 popup이 활성화되고 popup은 html로 이루어져있다. 또한, icon 속성을 사용해 마커의 아이콘을 변경할 수 있는데 folium.Icon()을 사용하자. color 매개변수로 색을 지정하고 prefix가 'glyphicon'을 기본값으로 갖지만, fontawesome을 사용하고 싶다면 'fa'으로 변경하고 해당 웹 사이트로 가서 icon name을 가져오면 된다.

 # 지도에 마커 찍기
 folium.Marker([위도, 경도], popup=popup, icon=folium.Icon(color='green', icon='fa-tree', prefix='fa')).add_to(m)

Popup은 html로 되어 있다고 했는데 팝업창에 html을 띄우기 위해 iframe을 사용한다. 우선 팝업창에 띄우고 싶은 html 태그를 만든 후에 folium.Iframe()을 통해 iframe으로 만들며 folium.Popup()으로 iframe을 popup 값으로 만들어준다.

# iframe 생성
iframe = folium.IFrame({html 태그}, width=220, height=170)
# html 띄울 popup 객체 생성
popup = folium.Popup(iframe)

이렇게 만들어진 m을 최종적으로 html으로 뿌리기 위해 다음 명령어를 사용한다. 또한, html으로 저장도 가능하다.

maps = m._repr_html_()  # 지도를 템플릿에 삽입하기위해 iframe이 있는 문자열로 반환 (folium)

# 지도 html 저장
m.save({경로})

추가로 플로그인의 위치 컨트롤를 추가하기 위해서는 다음 명령어를 사용한다.

folium.plugins.LocateControl().add_to(m)  # 위치 컨트롤러 추가
728x90
반응형