地图可视化库入门:Folium基础、地图创建与保存、添加标记与弹窗、绘制轨迹线

好,咱们正式开始动手了。

这一章,我带你走进 Folium 的世界。说实话,在 Python 的地图可视化库里,Folium 是我用得最顺手的一个。它底层依赖 Leaflet.js,说白了就是帮你用 Python 生成一个漂亮的交互式 HTML 地图。你不需要懂前端,也能做出能缩放、能点击、能展示轨迹的网页地图。

1. 什么是 Folium?

Folium 是一个 Python 库,专门用来生成交互式地图。它的核心思路很简单:你用 Python 写代码,它帮你生成一个 HTML 文件,浏览器打开就能看。

我个人习惯用它来做三件事:

  • 快速查看地理数据分布
  • 展示 GPS 轨迹或路径
  • 制作带标记和弹窗的汇报地图

嗯,这里要注意:Folium 不是用来做空间分析的,它就是个可视化工具。分析的事交给 GeoPandas 或 Shapely,展示的事交给 Folium,各司其职。

核心概念: Folium 生成的是 HTML + JavaScript 文件,不是图片。这意味着你可以交互——缩放、点击、拖拽,甚至嵌入到网页里。

2. 安装与第一个地图

安装很简单,一行命令搞定:

pip install folium

然后我们来创建第一张地图。我习惯先指定一个中心点坐标和缩放级别:

import folium

# 创建一个地图对象,中心点设为北京天安门附近
m = folium.Map(location=[39.9042, 116.4074], zoom_start=12)

# 保存为 HTML 文件
m.save('my_first_map.html')

运行完,你会在当前目录看到一个 HTML 文件。双击打开,就能看到一张可拖拽、可缩放的地图。是不是很简单?

小技巧: zoom_start 的值范围一般是 1(全球)到 18(街道级别)。我刚开始做项目时总喜欢设成 15,结果地图加载半天看不到全貌。后来学乖了,先设 10,再根据需求调整。

3. 添加标记与弹窗

光有地图太单调了。咱们加点标记上去。标记可以是一个点,也可以带上弹窗信息。

import folium

m = folium.Map(location=[39.9042, 116.4074], zoom_start=12)

# 添加一个标记
folium.Marker(
    location=[39.9042, 116.4074],
    popup='<b>天安门广场</b><br>北京市中心',
    icon=folium.Icon(color='red', icon='info-sign')
).add_to(m)

m.save('map_with_marker.html')

这里我用了 popup 参数,点击标记就会弹出一个信息框。你可以放 HTML 标签,比如加粗、换行、甚至图片链接。

我在项目中遇到过一个问题:弹窗内容太长,显示不全。后来发现可以用 folium.Popup 控制宽度:

popup = folium.Popup('这是一段很长的描述文字...', max_width=300)
folium.Marker(location=[39.9042, 116.4074], popup=popup).add_to(m)
注意: 弹窗里的 HTML 代码不要写太复杂。我曾经塞了一个完整的表格进去,结果地图加载慢得像蜗牛。保持简洁,用户体验才好。

4. 绘制轨迹线

轨迹线是地图可视化的重头戏。比如你有一组 GPS 坐标点,想看看走过的路径,用 PolyLine 就能搞定。

import folium

m = folium.Map(location=[39.9, 116.4], zoom_start=13)

# 模拟一条轨迹:从王府井到天安门再到西单
coordinates = [
    [39.9142, 116.4074],  # 王府井
    [39.9042, 116.4074],  # 天安门
    [39.9112, 116.3764]   # 西单
]

folium.PolyLine(
    locations=coordinates,
    color='blue',
    weight=3,
    opacity=0.8
).add_to(m)

m.save('trajectory.html')

你想想看,如果轨迹点很多,比如上千个 GPS 点,直接画上去会不会卡?会的。我曾经处理过一条 10 万点的轨迹,浏览器直接崩溃。后来我用了简化算法(比如 Douglas-Peucker),把点压缩到 1000 个以内,流畅多了。

经验之谈: 轨迹点超过 5000 个时,建议先做简化。Folium 本身不提供简化功能,但你可以用 Shapely 的 simplify() 方法预处理。

5. 知识体系一览

为了让你更直观地理解本章的知识结构,我画了一张 SVG 流程图:

Folium 地图可视化知识体系 安装 Folium 创建地图对象 添加标记 Marker + Popup 绘制轨迹线 PolyLine 保存地图 save() 到 HTML 交互式 HTML 地图

6. 常用参数速查

我把本章用到的核心参数整理成了一张表,方便你以后查阅:

函数/对象 参数 说明 示例值
folium.Map location 地图中心点坐标 [39.9042, 116.4074]
zoom_start 初始缩放级别 12
folium.Marker popup 点击弹窗内容(支持 HTML) '<b>标题</b>'
icon 标记图标样式 folium.Icon(color='red')
folium.PolyLine locations 轨迹点列表 [[lat1, lon1], [lat2, lon2]]
color 线条颜色 'blue'
weight 线条粗细 3
opacity 透明度(0~1) 0.8
避坑指南: 我曾经在 PolyLine 里传错了坐标顺序——把 [经度, 纬度] 写成了 [纬度, 经度]。结果轨迹画到了非洲去。记住,Folium 用的是 [纬度, 经度] 的顺序,和很多 GPS 设备输出的顺序一致。

好了,这一章的内容就到这里。你学会了创建地图、添加标记、绘制轨迹线,还知道了怎么保存成 HTML 文件。下一章咱们会深入聊一聊地图底图样式和图层控制,到时候你会看到更多好玩的东西。

可可精品资料库