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

如何将经纬度网格状CSV温度数据转换为栅格地图?

网格状CSV转栅格可视化解决方案

能否直接基于网格格式生成栅格?

可以直接处理。网格格式本质是规则栅格的矩阵表示,Python的rasterio、R的raster等库支持直接将这类矩阵数据转换为栅格对象,无需先转成表格格式。但转成包含lat、long、z的长表格格式,会更适配多数可视化工具(如matplotlib、ggplot2),灵活性更高。

转换为表格格式的实现方法

Excel(Power Query)

  1. 打开CSV文件,选中数据区域,点击「数据」选项卡 → 「从表格/区域」进入Power Query编辑器
  2. 选中所有代表经度的数值列
  3. 点击「转换」选项卡 → 「逆透视列」→ 「逆透视其他列」
  4. 此时会生成三列:原索引列(纬度)、「属性」列(经度)、「值」列(温度)
  5. 重命名三列为lat、long、z,点击「关闭并上载」导出结果

Python(Pandas)

转成表格格式

import pandas as pd

# 读取网格CSV,假设第一列是纬度,第一行是经度
df = pd.read_csv("temperature_grid.csv", index_col=0)

# 堆叠数据转换为长格式
long_df = df.stack().reset_index()
long_df.columns = ["lat", "long", "z"]

# 保存结果
long_df.to_csv("temperature_table.csv", index=False)

直接生成栅格(无需转表格)

import rasterio
from rasterio.transform import from_origin
import numpy as np

df = pd.read_csv("temperature_grid.csv", index_col=0)
# 获取经纬度范围与分辨率
lat_min, lat_max = df.index.min(), df.index.max()
lon_min, lon_max = df.columns.min(), df.columns.max()
res_lat = (lat_max - lat_min) / (len(df.index)-1)
res_lon = (lon_max - lon_min) / (len(df.columns)-1)

# 创建栅格变换(适配栅格y轴从上到下递减的规则)
transform = from_origin(lon_min, lat_max, res_lon, res_lat)
# 反转纬度顺序匹配栅格坐标系
raster_data = np.flipud(df.values)

# 写入栅格文件
with rasterio.open(
    "temperature_raster.tif",
    "w",
    driver="GTiff",
    height=raster_data.shape[0],
    width=raster_data.shape[1],
    count=1,
    dtype=raster_data.dtype,
    crs="EPSG:4326",
    transform=transform,
) as dst:
    dst.write(raster_data, 1)

R(Tidyverse/Raster)

转成表格格式

library(tidyverse)

# 读取网格CSV,假设第一列是纬度,第一行是经度
df <- read_csv("temperature_grid.csv")

# 转换为长格式
long_df <- df %>%
  pivot_longer(cols = -1, names_to = "long", values_to = "z") %>%
  rename(lat = 1) %>%
  mutate(long = as.numeric(long)) # 确保经度为数值型

# 保存结果
write_csv(long_df, "temperature_table.csv")

直接生成栅格(无需转表格)

library(raster)

df <- read_csv("temperature_grid.csv", show_col_types = FALSE)
# 转换为矩阵并设置行列名
raster_matrix <- as.matrix(df[,-1])
rownames(raster_matrix) <- df[[1]]

# 创建栅格对象
r <- raster(raster_matrix)
# 设置地理范围
extent(r) <- extent(as.numeric(colnames(raster_matrix)) %>% range(),
                    as.numeric(rownames(raster_matrix)) %>% range())
# 设置坐标系
crs(r) <- CRS("+proj=longlat +datum=WGS84")

# 保存栅格文件
writeRaster(r, "temperature_raster.tif", format="GTiff")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:55:27