본문 바로가기

Python 이야기

Folium으로 지도 그리기

좌표값으로 지도를 그리기 위해 툴을 찾아보던 도중

파이썬에 folium이라는 패키지를 찾았습니다.

간단하게 깔끔한 지도를 그릴 수 있어 좋은 것 같으므로 포스팅 합니다.

 

패키지 설치를 위해서는

 

pip install folium

 

명령을 이용하면 됩니다.

 

우선 간단하게 지도를 출력해 보겠습니다.

 

1
2
3
4
5
6
import folium
 
= folium.Map(location=[36.833972127.178548],
               zoom_start=12)
 
m
cs

folium.Map() 함수를 이용합니다.

location에 위도와 경도 정보를 입력하고

zoom_start에 줌할 정도를 입력해주면 간단하게 지도를 나타낼 수 있습니다.

zoom_start의 줌 최대치는 18인 것 같습니다.

 

예제코드의 좌표는 천안시 좌표를 입력해 보았습니다.

 

지도에 마커를 추가해 보겠습니다.

이것도 간단합니다.

 

1
2
3
folium.Marker([36.834192127.178588],
              popup="천안 상명대학교 본관 입구",
              tooltip="천안 상명대학교").add_to(m)

folium.Marker() 함수를 이용하여 마커를 추가할 수 있습니다.

첫 번째 인자에 좌표값을 입력하고

popup에는 마커 클릭시 표현될 문구

tooltip에는 마커에 마우스를 올릴시 표현될 문구를 입력할 수 있습니다.

add_to() 함수를 이용해 미리 만들어둔 변수에 내용을 추가합니다.

 

각각의 문구는 html 문서 형식으로 작성할 수 있습니다.

 

천안 상명대학교 위치에 마커를 찍고

간단하게 툴팁과 팝업을 주어 보았습니다.

 

위에서 말한 것과 같이 각각 문구에는 html 문서형식을 적용할 수 있기 때문에

약간 응용을 하면 이미지, 웹페이지 등도 출력하는 것이 가능합니다.

마커 팝업에 이미지를 한 번 추가해 보도록 하겠습니다.

 

이미지를 추가하기 위해선 iframe을 활용해야 합니다.

코드를 보도록 하겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import folium
import base64
 
= folium.Map(location=[36.833972127.178548],
               zoom_start=12)
 
pic = base64.b64encode(open('smu.jpg','rb').read()).decode()
image_tag = '<img src="data:image/jpeg;base64,{}">'.format(pic)
iframe = folium.IFrame(image_tag, width=300, height=300)
popup = folium.Popup(iframe, max_width=650)
 
folium.Marker([36.834192127.178588],
              popup=popup,
              tooltip="천안 상명대학교").add_to(m)
 
m
cs

 

코드가 조금 길어졌습니다.

 

먼저 변수 m에 맵을 만들어서 할당해준 뒤

이미지를 base64 형식으로 만들어 pic변수에 넣어줍니다.

이 pic변수를 html형식으로 만들어 image_tag 변수에 할당해준 뒤,

IFrame으로 만들어 iframe 변수에 할당해 주었습니다.

그리고 마지막으로 popup 변수에 iframe을 팝업으로 만들어 할당해 주었습니다.

 

그 다음에 마커를 추가하며 popup에 이 내용을 추가해주면

아래와 같이 출력 가능합니다.

 

위 코드를 보면 width와 height를 지정하는 부분을 볼 수 있는데

이 부분은 적절하게 설정을 해 주어야 iframe의 크기를 조절할 수 있습니다.

예제에서는 조금 넉넉하게 선언해 주었더니 여백이 생겨 버렸네요.

 

 

1
m.save('filename.html')
cs

마지막으로 save() 함수를 이용해 파일로 저장할 수도 있습니다.

저장은 html 파일 형식으로 저장됩니다.

 

 

이와 같이 간단하게 깔끔한 지도를 출력할 수 있는 folium 패키지에 대해 알아보았습니다.

좀 더 자세한 정보는 공식 documentation에서 찾아볼 수 있습니다.

documentation도 설명이 잘 돼있는 편이라서 참조하기가 수월했습니다.

아래는 documentation 사이트의 주소입니다.

https://python-visualization.github.io/folium/index.html

 

Folium — Folium 0.8.3 documentation

folium builds on the data wrangling strengths of the Python ecosystem and the mapping strengths of the leaflet.js library. Manipulate your data in Python, then visualize it in on a Leaflet map via folium. Concepts folium makes it easy to visualize data tha

python-visualization.github.io

 

참고로 변수를 출력하는 것 만으로 지도를 확인하기 위해서는 ipython notebook을 이용해야 합니다.

예제에서 저는 jupyter notebook을 이용했습니다.

 

.py코드로 만들어 지도를 출력하고 싶을 경우에는 별도로 출력해줄 코드를 작성해야한다는 점을 유의해야 할 것 같습니다.

'Python 이야기' 카테고리의 다른 글

이미지 위에 히트맵(heatmap) 그리기  (6) 2019.06.11