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

如何匹配采样点所属1°经×0.5°纬CRS统计矩形并写入数据集

R实现采样站点匹配固定经纬度规格网格方案

前置依赖

首先安装并加载所需工具包:

install.packages(c("sf", "dplyr"))
library(sf)
library(dplyr)

步骤1:计算研究区域边界

假设你的原始采样站点数据框名为sample_df,包含经度字段lon、纬度字段lat,先计算对齐网格规格的区域边界:

# 经度对齐1°整数
lon_min <- floor(min(sample_df$lon))
lon_max <- ceiling(max(sample_df$lon))
# 纬度对齐0.5°整数倍
lat_min <- floor(min(sample_df$lat)*2)/2
lat_max <- ceiling(max(sample_df$lat)*2)/2

步骤2:创建指定规格网格

使用st_make_grid生成符合要求的网格,如需兼容老版本SpatialGrid对象可直接转换:

# 生成网格并转为sf对象,添加唯一网格ID
grid <- st_make_grid(
  offset = c(lon_min, lat_min),
  cellsize = c(1, 0.5), # 经度方向1°,纬度方向0.5°
  crs = 4326 # 对应WGS84经纬度坐标系,如用其他CRS可修改此处
) %>% 
  st_sf() %>% 
  mutate(grid_id = row_number())

# 如需生成你需要的SpatialGrid对象,执行下行代码即可
spatial_grid <- as(grid, "Spatial")

步骤3:匹配站点到所属网格

通过空间连接将网格归属信息添加到原站点数据集:

# 将原始站点转为空间点对象
sample_sf <- st_as_sf(sample_df, coords = c("lon", "lat"), crs = 4326)

# 空间连接,匹配每个点所属的网格
sample_with_grid <- st_join(sample_sf, grid, join = st_within)

# 转换回普通数据框,保留原始经纬度字段
sample_with_grid <- sample_with_grid %>% 
  mutate(
    lon = st_coordinates(.)[,1],
    lat = st_coordinates(.)[,2]
  ) %>% 
  st_drop_geometry()

可选优化:添加网格经纬度范围字段

如果需要明确每个网格的坐标范围,可在生成网格时添加对应字段:

grid <- grid %>% 
  mutate(
    grid_lon_min = st_bbox(geometry)$xmin,
    grid_lon_max = st_bbox(geometry)$xmax,
    grid_lat_min = st_bbox(geometry)$ymin,
    grid_lat_max = st_bbox(geometry)$ymax,
    .by = grid_id
  )

注意事项

  • 若你的站点数据使用其他坐标系,需先通过st_transform统一转换为和网格相同的CRS,避免匹配错误
  • 网格ID可自定义为更易识别的格式,例如paste0("lon_", grid_lon_min, "_lat_", grid_lat_min),方便后续按网格分组统计

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:06:04