Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

พล็อต Google Maps ด้วยแพ็กเกจ Folium ใน Python

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 ติดตามยานพาหนะ/สินค้า
  • แสดงข้อมูลสถิติทางภูมิศาสตร์
  • แผนที่ท่องเที่ยว/อสังหาริมทรัพย์
  • วิเคราะห์ข้อมูลเชิงพื้นที่