如何将经纬度网格状CSV温度数据转换为栅格地图?
网格状CSV转栅格可视化解决方案
能否直接基于网格格式生成栅格?
可以直接处理。网格格式本质是规则栅格的矩阵表示,Python的rasterio、R的raster等库支持直接将这类矩阵数据转换为栅格对象,无需先转成表格格式。但转成包含lat、long、z的长表格格式,会更适配多数可视化工具(如matplotlib、ggplot2),灵活性更高。
转换为表格格式的实现方法
Excel(Power Query)
- 打开CSV文件,选中数据区域,点击「数据」选项卡 → 「从表格/区域」进入Power Query编辑器
- 选中所有代表经度的数值列
- 点击「转换」选项卡 → 「逆透视列」→ 「逆透视其他列」
- 此时会生成三列:原索引列(纬度)、「属性」列(经度)、「值」列(温度)
- 重命名三列为
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
相关产品推荐
相关产品推荐

