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

基于真实数据半径在R中生成特定区域不规则空间点网格

基于采样点生成指定区域内的5公里间距空间网格点

步骤1:加载依赖包并准备基础数据

使用sf包处理空间数据,dplyr辅助数据清洗,先将原始采样点转为空间对象:

# 加载所需工具包
library(sf)
library(dplyr)

# 原始采样点数据集
df <- data.frame(
  lon = c(52.08249,52.09444,52.09731,52.09779,52.09875,52.09922,52.10114,52.10162,52.10305,52.10401),
  lat = c(36.62644,36.61794,36.61590,36.61556,36.61488,36.61454,36.61318,36.61284,36.61182,36.61114)
)

# 转换为WGS84坐标系的空间对象(EPSG:4326)
sf_points <- st_as_sf(df, coords = c("lon", "lat"), crs = 4326)

步骤2:定义目标区域(黄色圆圈范围)

由于经纬度无法直接计算准确距离,先转换到UTM平面投影(该区域对应UTM 39N,EPSG:32639),再生成采样点的5公里缓冲区作为目标区域:

# 转换为UTM投影,确保距离计算准确
sf_points_utm <- st_transform(sf_points, crs = 32639)

# 创建采样点的5公里缓冲区,合并为单个目标区域
target_area <- st_union(sf_points_utm) %>% st_buffer(dist = 5000)

如果你的黄色圆圈是自定义多边形,直接替换target_area为你的空间多边形对象即可

步骤3:生成并筛选网格点

在目标区域内生成5公里间距的网格中心点,再过滤出区域内的点:

# 生成5公里×5公里的网格中心点
grid <- st_make_grid(
  target_area,
  cellsize = c(5000, 5000),
  what = "centers"
) %>% st_sf()

# 筛选出目标区域内的网格点
grid_in_area <- grid %>% st_filter(target_area)

步骤4:转回经纬度坐标系(可选)

如果需要将结果转换回WGS84经纬度格式:

grid_final <- st_transform(grid_in_area, crs = 4326)

# 提取经纬度到普通数据框
grid_final_df <- grid_final %>% 
  mutate(
    lon = st_coordinates(.)[,1],
    lat = st_coordinates(.)[,2]
  ) %>% 
  st_drop_geometry()

结果验证

可以通过绘图确认网格点与目标区域的位置关系:

plot(st_geometry(target_area), col = "yellow", border = NA)
plot(st_geometry(sf_points_utm), col = "red", add = TRUE)
plot(st_geometry(grid_in_area), col = "blue", pch = 16, add = TRUE)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 19:27:07