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

如何在Python中基于Excel/CSV坐标绘制世界地图矩形网格?

用Python绘制世界地图上的矩形网格

下面提供两种实用方案,分别对应交互式网页地图和静态图片地图的需求:

方法一:Folium 绘制交互式地图

适合生成可交互的网页地图,支持点击查看网格编号,操作门槛低。

1. 安装依赖库

pip install pandas folium

2. 读取并处理坐标数据

先从CSV/Excel文件读取数据,拆分每个坐标点的纬度和经度(以坐标格式为"纬度, 经度"为例,可根据实际格式调整拆分逻辑):

import pandas as pd

# 读取CSV,读取Excel替换为pd.read_excel("你的文件.xlsx")
df = pd.read_csv("grid_coords.csv")

# 拆分坐标字符串为纬度、经度数值
def split_coord(coord_str):
    lat, lon = coord_str.strip().split(",")
    return float(lat), float(lon)

# 批量拆分所有坐标列
df["tl_lat"], df["tl_lon"] = zip(*df["Top left coordinate"].apply(split_coord))
df["tr_lat"], df["tr_lon"] = zip(*df["Top right coordinate"].apply(split_coord))
df["bl_lat"], df["bl_lon"] = zip(*df["Bottom left coordinate"].apply(split_coord))
df["br_lat"], df["br_lon"] = zip(*df["Bottom right coordinate"].apply(split_coord))

3. 绘制网格并导出地图

import folium

# 创建世界地图实例,中心定位到赤道,初始缩放级别2
m = folium.Map(location=[0, 0], zoom_start=2)

# 遍历每个网格绘制矩形
for _, row in df.iterrows():
    # 构造矩形闭合坐标点
    coords = [
        [row["tl_lat"], row["tl_lon"]],
        [row["tr_lat"], row["tr_lon"]],
        [row["br_lat"], row["br_lon"]],
        [row["bl_lat"], row["bl_lon"]],
        [row["tl_lat"], row["tl_lon"]]
    ]
    # 添加多边形到地图
    folium.Polygon(
        locations=coords,
        color="#ff4500",
        fill=True,
        fill_color="#ff4500",
        fill_opacity=0.2,
        popup=f"Box No.: {row['Box Number']}"  # 点击显示网格编号
    ).add_to(m)

# 保存为HTML文件,直接打开即可查看交互地图
m.save("grid_interactive_map.html")

方法二:Matplotlib + Cartopy 绘制静态地图

适合生成可用于报告、论文的静态图片地图,支持自定义地图投影和样式。

1. 安装依赖库

pip install pandas matplotlib cartopy

2. 读取数据

和Folium方案的坐标处理代码完全一致,直接复用即可。

3. 绘制静态网格地图

import matplotlib.pyplot as plt
import cartopy.crs as ccrs

# 创建带地图投影的画布,PlateCarree为等距圆柱投影,适合世界地图展示
fig, ax = plt.subplots(figsize=(12, 8), subplot_kw={'projection': ccrs.PlateCarree()})

# 添加基础地图元素:海岸线、陆地、海洋
ax.coastlines(linewidth=0.8)
ax.add_feature(ccrs.cartopy.feature.LAND, facecolor="#f0f0f0")
ax.add_feature(ccrs.cartopy.feature.OCEAN, facecolor="#cce7ff")

# 遍历绘制每个网格
for _, row in df.iterrows():
    # 提取矩形的经度、纬度序列
    lons = [row["tl_lon"], row["tr_lon"], row["br_lon"], row["bl_lon"], row["tl_lon"]]
    lats = [row["tl_lat"], row["tr_lat"], row["br_lat"], row["bl_lat"], row["tl_lat"]]
    # 绘制边框和填充
    ax.plot(lons, lats, color="#dc143c", linewidth=1, transform=ccrs.PlateCarree())
    ax.fill(lons, lats, color="#dc143c", alpha=0.2, transform=ccrs.PlateCarree())

# 设置标题和布局
plt.title("World Grid Boxes", fontsize=14)
plt.tight_layout()

# 显示或保存图片
plt.show()
# plt.savefig("grid_static_map.png", dpi=300, bbox_inches='tight')

关键注意事项

  • 坐标格式适配:如果你的坐标不是"纬度, 经度"格式,需要修改split_coord函数的拆分逻辑(比如按空格、分号分隔)。
  • 性能优化:300个网格属于小数据量,两种方案都能流畅处理;若网格数量过万,可考虑批量绘制或简化样式。
  • 投影选择:Cartopy支持Robinson、Mercator等多种投影,可根据需求替换ccrs.PlateCarree()为对应投影类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 18:23:20