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

如何用含经纬度的CSV逐行绘制单个地理位置地图并保存

问题描述

我有一个以lat(纬度)、long(经度)为表头的CSV文件。目前已能将所有位置绘制在同一幅地图中并保存,但希望逐个绘制每个位置的地图,保存为图片或HTML文件。

我已实现生成含所有位置标记地图的代码:

xy_table = pd.read_csv('testdata.csv')
xy_table.head()

# 数据示例:
# | lat       | long   |
# | --------- | ------ |
# | lat 1     | long 1 |
# | lat 2     | long 2 |

xy_table['coordinates'] = xy_table[['long', 'lat']].values.tolist()   
xy_table.head()

print(xy_table)

from shapely.geometry import Point
xy_table['coordinates'] = xy_table['coordinates'].apply(Point)
xy_table.head()
 
# 处理后的数据示例:
# |  lat       | long   |coordinates     |
# | ---------- | -------|--------------- |
# |  lat 1     | long 1 |POINT (long lat)|
# |  lat 2     | long 2 |POINT (long lat)|

print(xy_table[['coordinates']])

type(xy_table)

stations = geopandas.GeoDataFrame(xy_table, geometry = 'coordinates')
type(stations)


osm_map = folium.Map(location=[stations.lat.mean(), 
stations.long.mean()], zoom_start=12)

points = folium.features.GeoJson(stations.to_json())

osm_map.add_child(points)

osm_map.save('project-1.html')
osm_map

解决方案

1. 生成单个位置的HTML地图

通过遍历数据行,为每个位置单独创建地图并保存:

import pandas as pd
import folium

# 读取CSV数据
xy_table = pd.read_csv('testdata.csv')

# 遍历每一行数据,生成独立地图
for idx, row in xy_table.iterrows():
    # 以当前位置为中心创建地图,zoom_start控制缩放级别
    single_map = folium.Map(location=[row['lat'], row['long']], zoom_start=15)
    # 在地图上标记当前位置,弹窗显示位置信息
    folium.Marker(
        location=[row['lat'], row['long']],
        popup=f"位置 {idx+1}<br>纬度: {row['lat']}<br>经度: {row['long']}",
        icon=folium.Icon(color='blue')
    ).add_to(single_map)
    # 保存为单独的HTML文件,文件名带位置索引
    single_map.save(f"location_map_{idx+1}.html")

2. 生成图片格式的地图

若需要保存为PNG/JPG等图片,需借助selenium对HTML地图进行截图:

步骤1:安装依赖

pip install selenium
# 下载对应浏览器驱动(如ChromeDriver),并配置到系统PATH中

步骤2:截图代码

import pandas as pd
import folium
from selenium import webdriver
import time
import os

xy_table = pd.read_csv('testdata.csv')
# 初始化Chrome浏览器驱动
driver = webdriver.Chrome()

for idx, row in xy_table.iterrows():
    # 创建临时地图HTML文件
    temp_html = f"temp_map_{idx+1}.html"
    single_map = folium.Map(location=[row['lat'], row['long']], zoom_start=15)
    folium.Marker(
        location=[row['lat'], row['long']],
        popup=f"位置 {idx+1}",
        icon=folium.Icon(color='red')
    ).add_to(single_map)
    single_map.save(temp_html)
    
    # 打开临时HTML并截图
    driver.get(f"file://{os.path.abspath(temp_html)}")
    time.sleep(2)  # 等待地图加载完成
    driver.save_screenshot(f"location_map_{idx+1}.png")
    # 删除临时HTML文件
    os.remove(temp_html)

# 关闭浏览器驱动
driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 05:16:09