You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Folium中裁剪指定矩形区域并保存为PNG?

在Folium中裁剪并保存指定矩形区域为PNG

Folium本身没有直接裁剪地图区域的功能,因为它本质是生成Web地图页面。要实现仅保存目标矩形区域,需要先渲染地图页面,再精准截取对应区域,以下是可行方案:

步骤1:生成并配置Folium地图

先确保地图聚焦到目标矩形区域,保存为HTML文件:

import folium
import pandas as pd

# 从数据框获取经纬度边界
xlim = (df['longitude'].min(), df['longitude'].max())
ylim = (df['latitude'].min(), df['latitude'].max())
min_lon, max_lon = xlim
min_lat, max_lat = ylim

# 创建地图,隐藏多余控件,限制边界
m = folium.Map(
    zoom_control=False, 
    control_scale=False, 
    max_bounds=True
)
# 添加目标矩形边界(可选,仅用于可视化)
folium.Rectangle(
    bounds=[[min_lat, min_lon], [max_lat, max_lon]], 
    color='red', 
    fill=False
).add_to(m)
# 让地图自动适配矩形边界
m.fit_bounds([[min_lat, min_lon], [max_lat, max_lon]])
# 保存为本地HTML文件
m.save('target_map.html')

步骤2:用Selenium渲染并裁剪地图

借助Selenium控制浏览器渲染HTML,截取地图容器区域(无需识别红色矩形,避免干扰):

  1. 先安装依赖:pip install selenium pillow,并下载对应浏览器的驱动(如ChromeDriver)
  2. 执行以下代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
import time
from PIL import Image
import io

# 配置Chrome无头模式(后台运行)
chrome_options = Options()
chrome_options.add_argument('--headless=new')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--window-size=1200,800')  # 调整窗口大小确保地图完整显示

# 初始化浏览器
driver = webdriver.Chrome(options=chrome_options)
# 打开本地地图HTML(替换为你的文件绝对路径)
driver.get('file:///Users/xxx/target_map.html')
# 等待地图瓦片加载完成(根据网络情况调整等待时间)
time.sleep(3)

# 获取Folium地图的容器元素
map_container = driver.find_element(By.CLASS_NAME, 'folium-map')
# 获取容器的位置和尺寸信息
pos = map_container.location
size = map_container.size

# 截取整个页面,再裁剪出地图区域
full_screenshot = driver.get_screenshot_as_png()
img = Image.open(io.BytesIO(full_screenshot))
# 计算裁剪坐标:左、上、右、下
crop_area = (
    pos['x'], 
    pos['y'], 
    pos['x'] + size['width'], 
    pos['y'] + size['height']
)
cropped_map = img.crop(crop_area)
# 保存裁剪后的PNG
cropped_map.save('cropped_target_map.png')

# 关闭浏览器
driver.quit()

注意事项

  • 如果地图加载缓慢,可延长time.sleep()的时长,确保所有瓦片加载完毕
  • 窗口大小可根据地图区域的实际比例调整,避免出现滚动条导致截取不完整
  • 此方法直接基于地图容器的位置截取,完全匹配你设置的经纬度边界,不受地图中其他颜色元素干扰

内容的提问来源于stack exchange,提问作者joon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 22:03:26