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

在R语言中匹配格点温度数据与城市多边形并计算平均气温

实现步骤

要计算每个城市的平均气温,核心是将格点温度数据转换为空间对象,再通过空间关联匹配到对应城市,最后分组计算均值,具体操作如下:

1. 将格点数据转换为带坐标的空间点对象

你的tem是360行(对应0.5°分辨率的纬度,覆盖-89.75°到89.75°)、720列(对应0.5°分辨率的经度,覆盖-179.75°到179.75°)的格点数据,先将其整理为带经纬度的长格式并转为空间点:

library(tidyverse)
library(sf)

# 生成对应格点的经纬度向量
lat <- seq(-89.75, 89.75, by = 0.5)
lon <- seq(-179.75, 179.75, by = 0.5)

# 转换为长格式并关联经纬度
tem_long <- tem %>%
  mutate(lat = lat) %>%
  pivot_longer(cols = -lat, names_to = "lon_col", values_to = "temp") %>%
  mutate(lon = lon[as.integer(str_remove(lon_col, "V"))]) %>%
  select(lon, lat, temp)

# 转为sf空间点对象,坐标系设为WGS84(EPSG:4326)
tem_sf <- st_as_sf(tem_long, coords = c("lon", "lat"), crs = 4326)

2. 空间关联:匹配格点与所属城市

使用空间连接,筛选出落在城市多边形范围内的格点,并关联对应城市信息:

# 空间连接,保留落在城市多边形内的格点
city_temp <- st_join(tem_sf, city_map, join = st_within)

3. 计算每个城市的平均气温

按城市唯一标识(比如你读取的FID)分组,计算温度均值:

# 分组计算平均气温
city_avg_temp <- city_temp %>%
  as.data.frame() %>%  # 移除空间属性,转为普通数据框
  group_by(FID) %>%  # 可替换为城市名称等其他唯一标识列
  summarise(avg_temp = mean(temp, na.rm = TRUE)) %>%
  ungroup()

# 可选:将结果关联回原城市地图,方便后续可视化或分析
city_map_with_temp <- left_join(city_map, city_avg_temp, by = "FID")

优化提示

如果格点数据量过大,可先裁剪格点到城市范围,减少计算耗时:

# 获取城市的边界框
city_bbox <- st_bbox(city_map)
# 裁剪格点数据到城市范围内
tem_cropped <- tem_sf %>% st_crop(city_bbox)
# 再执行空间连接
city_temp <- st_join(tem_cropped, city_map, join = st_within)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:45:21