기타

[지리 데이터 시각화] folium을 활용해 여행 루트 시각화하기

baektree 2025. 10. 7. 18:58

Folium이란?

python에서 지도를 생성하고 시각화하기 위한 라이브러리이다. 

파이썬 코드만으로 인터페이스형 지도를 쉽게 만들 수 있는 장점이 있다.

즉 지도 위에 다양한 마커와 레이어를 추가하여 풍부한 정보를 표현할 수 있게 해준다. 

(출처 : 위키독스)

 


Folium을 활용한 여행루트 시각화

다가오는 익산 여행을 위해 여행지와 경로를 시각화 해보고자 한다. 

 

(1) 라이브러리 불러오기

import folium
from folium.plugins import BeautifyIcon
from IPython.display import display
  • folium : 지도 위에 마커, 경로, 영역 등을 표시할 수 있는 라이브러리
  • BeautifyIcon : folium 기본 마커 대신, 숫자나 색상으로 꾸민 마커를 만들 수 있게 해주는 플러그인
    (여행지 루트 순대로 1,2,3의 마커를 지도에 띄우기 위해 사용)
  • display : 주피터 노트북에서 folium.Map 객체를 바로 보여줄 때 사용

 

 

(2) 기본 지도 생성

# 지도 중심 : 익산역
iksan_map = folium.Map(location=[35.94048, 126.94633], zoom_start=13, control_scale=True)
  • location=[35.9475, 126.9572] → 지도 중심 좌표 (익산역 근처)
  • zoom_start=13 → 초기 확대 수준 (숫자가 클수록 확대됨)
  • control_scale=True → 지도 오른쪽 아래에 축척(거리 단위) 표시

 

(3) 주요 위치 리스트 정의

locations = [
    ("익산역", 35.94048, 126.94633, "기차역"),
    ("탑클라우드 호텔", 35.930411, 126.949797, "호텔"),
    ("아가페정원", 36.01969, 126.95785, "정원 산책 및 포토존"),
    ("미륵사지", 36.01078, 127.03062, "세계유산 유적지 + 넓은 들판 + 석탑 풍경"),
    ("왕궁리유적", 35.97281, 127.05486, "넓은 들판 + 유적 터 + 한적한 분위기"),
    ("보석박물관", 35.99059, 127.10257, "알록달록 조명 설치존, 인생샷 스팟")
]
  • (이름, 위도, 경도, 설명) 의 형식으로 리스트로 저장했다. 

 

(4) 각 위치에 마커 표시

# 마커 추가
for i, (name, lat, lon, desc) in enumerate(locations, start=1):
    icon = BeautifyIcon(
        number=i,
        border_color="skyblue",
        text_color="white",
        background_color="blue",
        inner_icon_style="font-size:12px;"
    )
    folium.Marker(
        location=[lat, lon],
        popup=folium.Popup(f"<b>{i}. {name}</b><br>{desc}", max_width=300),
        tooltip=f"{i}. {name}",
        icon=icon
    ).add_to(iksan_map)
  • enumerate(locations, 1): 리스트의 원소와 인덱스를 함께 순회하는데, 인덱스는 1로 시작 
  • BeautifyIcon : 숫자 마커 만들기
    • 마커 안 번호는 인덱스로
    • 테두리 색상은 skyblue
    • 텍스트 색상은 white
    • 배경색은 blue
    • 마커 글씨 크기는 12px
  • folium.Marker : 지도 위에 마커 찍기
    • popup : 클릭시 뜨는 창은 (이름 + 설명)
    • tooltip : 마우스 오버시 표시되는 문구는 (인덱스. 이름)
    • .add_to(iksan_map) : 마커를 지도 객체에 추가

 

(4) 경로(폴리라인) 그리기

# 경로 (선) 그리기
route_coords = [(lat, lon) for _, lat, lon, _ in locations]
folium.PolyLine(
    route_coords,
    color="skyblue",
    weight=4,
    opacity=0.7,
    tooltip="여행 경로"
).add_to(iksan_map)
  • route_coords : locations을 순회하는데 lat, lon만 가져와서 튜플 형태로 담은 리스트 
  • folium.PolyLine : folium의 폴리라인(점을 선으로 연결하는 경로) 생성
    • route_coords: 루트 좌표
    • 색상은 skyblue
    • 선 두께는 4
    • 투명한 정도는 0.7
    • 마우스 오버시 "여행 경로"표시

 

(5) 지도 보여주기 + 파일 저장

# 지도 표시 및 저장
display(iksan_map)
iksan_map.save("iksan_trip_mobile.html")
print("익산 여행 지도 HTML 파일로 저장 완료! 모바일에서도 확인 가능")
  • 주피터 노트북에서 바로 지도 표시
  • 완성된 지도를 html로 저장

 

정리하자면,

1. 익산 중심으로 folium 지도를 생성하고

2. 여행지를 리스트로 정의

3. BeautifyIcon을 활용해 번호형으로 마커를 꾸미고 지도에 추가

4. 여행지 순서대로 경로를 잇는 polyline 추가

5. 지도 표시 및 저장하였다.

 

완성 이미지는 아래와 같다.

사실, 여행 루트 서비스는 구글 지도를 통해 쉽게 활용할 수 있지만, 

내가 직접 가고 싶은 곳을 코드로 구현하고 시각화하는데 의의를 두며 진행해보았다.

무엇보다 신기하고 재미있으니까~