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

Python如何将带经纬度的pandas dataframe转为WGS84坐标系geoTIFF文件

Pandas DataFrame 转 WGS84 坐标系 GeoTIFF 实现方案

前置依赖安装

执行以下命令安装需要的第三方库:
pip install pandas numpy rasterio pyproj scipy

完整实现代码

import pandas as pd
import numpy as np
import rasterio
from rasterio.transform import from_origin
from pyproj import CRS
from scipy.interpolate import griddata

# 1. 读取你的DataFrame,这里替换成你自己的数据源读取逻辑
df = pd.read_csv("你的数据文件路径.csv")
# 确认列名:lon是经度,lat是纬度,value是你要存入栅格的属性值,可根据实际修改
lon_col = "lon"
lat_col = "lat"
value_col = "value"

# 2. 配置栅格参数
pixel_size = 0.001 # WGS84下单位是度,0.001度约等于111米分辨率,根据需求调整
crs_wgs84 = CRS.from_epsg(4326) # WGS84坐标系EPSG编码

# 3. 生成规则栅格网格
min_lon = df[lon_col].min()
max_lon = df[lon_col].max()
min_lat = df[lat_col].min()
max_lat = df[lat_col].max()

# 计算网格的行列数
x_size = int(np.ceil((max_lon - min_lon) / pixel_size))
y_size = int(np.ceil((max_lat - min_lat) / pixel_size))

# 生成网格坐标
x_grid = np.linspace(min_lon, max_lon, x_size)
y_grid = np.linspace(max_lat, min_lat, y_size)
xx, yy = np.meshgrid(x_grid, y_grid)

# 4. 散点插值到规则网格,这里用最近邻插值,可替换为'linear'/'cubic'等方法
points = df[[lon_col, lat_col]].values
values = df[value_col].values
grid_values = griddata(points, values, (xx, yy), method='nearest')

# 5. 写入GeoTIFF文件
output_path = "输出文件路径.tif"
with rasterio.open(
    output_path,
    'w',
    driver='GTiff',
    height=y_size,
    width=x_size,
    count=1, # 单波段,多波段的话修改对应数值和写入逻辑
    dtype=grid_values.dtype,
    crs=crs_wgs84,
    transform=from_origin(min_lon, max_lat, pixel_size, pixel_size),
    nodata=np.nan # 无值区域填充值,可根据需求修改
) as dst:
    dst.write(grid_values, 1)

注意事项

  • 如果你已经有规则排列的X/Y坐标,不需要做插值步骤,直接把数据整理成[y_size, x_size]的二维数组即可
  • 插值方法可根据业务需求调整,对精度要求高的场景可以替换为克里金、反距离权重等插值算法
  • 如果你的原始经纬度不是WGS84坐标系,需要先用pyproj做坐标转换,再执行后续逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:06:03