使用 Python Folium 地图并保存为图片

在数据可视化的过程中,地图是一个非常重要的工具。而 Python 的 Folium 库可以轻松地创建交互式地图。虽然Folium本身并不直接支持将地图保存为图片,但我们可以通过浏览器自动化来实现这一目标。本文将介绍如何使用 Folium 创建地图,并将其保存为本地图片文件。

Folium 简介

Folium 是一个强大的 Python 库,可以帮助开发者制作动态地图以展示数据,特别是在地理信息系统(GIS)领域。它基于 Leaflet.js,实现了简单易用的接口。通过 Folium,用户可以创建具有标记、图层、图表等特性的地图。

创建基本的 Folium 地图

首先,我们需要安装 Folium 库。可以通过以下命令进行安装:

pip install folium

接下来,我们来创建一个简单的 Folium 地图:

import folium

# 创建一个地图对象
map_center = [39.9042, 116.4074]  # 北京的经纬度
my_map = folium.Map(location=map_center, zoom_start=12)

# 保存地图到 HTML 文件
my_map.save("my_map.html")

在这段代码中,我们创建了一张以北京为中心的地图,并将其保存为 my_map.html 文件。

将 Folium 地图保存为图片

虽然 Folium 生成的是 HTML 文件,而不是图片,但我们可以使用 Selenium 或 Pyppeteer 等库来将 HTML 文件转换为图片。下面,我们将使用 Selenium 来实现这一转换。

首先,确保安装 required libraries:

pip install selenium

此外,你需要下载适合你浏览器的 WebDriver。例如,如果你使用 Chrome 浏览器,你需要下载 ChromeDriver。

使用 Selenium 自动化浏览器

以下是使用 Selenium 将 Folium 生成的 HTML 地图保存为 PNG 图片的完整例子:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
from PIL import Image
import time

# 创建地图
map_center = [39.9042, 116.4074]  # 北京的经纬度
my_map = folium.Map(location=map_center, zoom_start=12)
my_map.save("my_map.html")

# 路径设置
html_file = "my_map.html"
screenshot_file = "my_map_screenshot.png"

# 设置 Chrome 浏览器选项
options = webdriver.ChromeOptions()
options.add_argument('--headless')  # 无头模式,后台运行
options.add_argument('--disable-gpu')
options.add_argument('--window-size=800,600')  # 窗口大小

# 启动浏览器
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()), options=options)

# 打开 HTML 文件
driver.get(f'file://{html_file}')

# 等待页面加载
time.sleep(2)

# 保存截图
driver.save_screenshot(screenshot_file)

# 关闭浏览器
driver.quit()

# 打开并裁剪图片(可选)
image = Image.open(screenshot_file)
image = image.crop((0, 0, 800, 600))  # 裁剪图片
image.save(screenshot_file)

代码解释

  1. 创建 Folium 地图:与之前相同,我们生成一张 HTML 文件存储地图。
  2. 设置 Selenium:使用 WebDriverManager 自动管理 ChromeDriver 的安装。
  3. 打开地图文件:使用 driver.get() 方法加载我们保存的 HTML 地图文件。
  4. 截图:调用 save_screenshot() 方法,将网页截图保存为 PNG 格式的图片。
  5. 裁剪可选:使用 Pillow 库(通过 PIL 导入)打开截图并进行裁剪,以便于精确控制最终的输出。

结论

通过本文的介绍,您应该能够使用 Python 的 Folium 库轻松创建地图并使用 Selenium 库将其保存为图片。借助这些强大的工具,您可以增强您的数据可视化项目,并将地图以更易于共享的格式进行保存。希望这篇文章能够帮助您更好地利用 Python 进行地图可视化!如果您对 Python 编程或数据可视化有更多的兴趣,鼓励您深入学习并尝试不同的项目。