Folium เป็นไลบรารี Python อันทรงพลัง สร้างแผนที่แบบ Leaflet ได้หลากหลายรูปแบบ แผนที่แบบโต้ตอบ (interactive) เหมาะสำหรับสร้างแดชบอร์ด
การติดตั้ง
$ pip install folium
แผนที่พื้นฐาน
import folium
# location: [latitude, longitude], zoom_start: ระดับซูม (ค่ายิ่งใหญ่ = ใกล้ขึ้น)
# tiles: รูปแบบแผนที่ เช่น 'Stamen Terrain', 'OpenStreetMap', 'CartoDB positron'
mapOBJ = folium.Map(location=[17.3616, 78.4747], zoom_start=4, tiles='Stamen Terrain')
mapOBJ.save('map2.html')
กรณีศึกษา 2: GeoJSON
import folium
import os
from folium import features
import numpy as np
import pandas as pd
N = 1000
lons = +5 - np.random.normal(size=N)
lats = 48 - np.random.normal(size=N)
data = {
'type': 'FeatureCollection',
'features': [{
'type': 'Feature',
'geometry': {
'type': 'MultiPoint',
'coordinates': [[lon, lat] for (lat, lon) in zip(lats, lons)],
},
'properties': {'prop0': 'value0'}
}],
}
m = folium.Map([17.3616, 78.4747], zoom_start=10)
m.add_child(features.GeoJson(data))
m.save('Features.html')
กรณีศึกษา 3: Marker, Icon, Popup
import folium
from folium import features
m = folium.Map([17.3616, 78.4747], zoom_start=15)
mk = features.Marker([17.3616, 78.4747])
pp = folium.Popup('Charminar')
ic = features.Icon(color='red')
mk.add_child(ic)
mk.add_child(pp)
m.add_child(mk)
m.save('Features_1.html')
กรณีศึกษา 4: Vega Visualization ใน Popup (ใช้ vincent)
$ pip install vincent
import folium
from folium import features
import numpy as np
import json
import vincent
N = 100
multi_iter2 = {
'x': np.random.uniform(size=(N,)),
'y': np.random.uniform(size=(N,)),
}
scatter = vincent.Scatter(multi_iter2, iter_idx='x', height=100, width=200)
data = json.loads(scatter.to_json())
m = folium.Map([17.3616, 78.4747], zoom_start=10)
mk = features.Marker([17.3616, 78.4747])
p = folium.Popup('Charminar')
v = features.Vega(data, width='100%', height='100%')
mk.add_child(p)
p.add_child(v)
m.add_child(mk)
m.save('Features_2.html')
คุณสมบัติเด่นของ Folium
- สร้างแผนที่ interactive ได้ง่าย (zoom, pan, click)
- รองรับหลาย Tile layers: OpenStreetMap, Stamen, CartoDB, Mapbox ฯลฯ
- เพิ่ม Marker, Circle, Polygon, GeoJSON, Heatmap, Choropleth ได้
- ฝังกราฟ Vega/Vega-Lite ใน Popup ได้
- บันทึกเป็น HTML ไฟล์เดียว แชร์/ฝังเว็บได้ทันที
- ทำงานร่วมกับ Pandas/NumPy ได้ดี
ประยุกต์ใช้
- Dashboard ติดตามยานพาหนะ/สินค้า
- แสดงข้อมูลสถิติทางภูมิศาสตร์
- แผนที่ท่องเที่ยว/อสังหาริมทรัพย์
- วิเคราะห์ข้อมูลเชิงพื้นที่