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

基于网格创建巴伐利亚地区位置数据的面积平衡随机样本

巴伐利亚州网格单元内随机抽取坐标样本解决方案

以下是实现你需求的完整流程,基于你的代码修正并补充关键步骤:

1. 依赖包加载与数据预处理

修正数据读取的语法错误,并将坐标转换为sf空间对象(空间操作必须依赖该类型):

library(sf)
library(dplyr)
library(tibble)

# 读取巴伐利亚州边界
germany <- raster::getData("GADM", country = "Germany", level = 1)
bavaria <- germany[germany$NAME_1 == "Bayern",]
bavaria_mod <- sf::st_as_sf(bavaria)

# 读取坐标数据(修正row.names参数的语法错误)
coord <- read.csv("coords.csv", sep = ";", row.names = 1, na.strings = "")
test <- coord %>%
  as_tibble() %>%
  filter(!is.na(Latitude), !is.na(Longitude)) %>%
  # 转换为sf空间对象,指定经纬度CRS(WGS84)
  st_as_sf(coords = c("Longitude", "Latitude"), crs = 4326)

2. 创建带唯一标识的巴伐利亚州网格

给网格单元添加ID,方便后续按单元分组抽样:

# 创建网格并与巴伐利亚边界裁剪
grid <- bavaria_mod %>%
  st_make_grid(cellsize = 0.1, what = "polygons", square = TRUE) %>%
  st_intersection(bavaria_mod) %>%
  # 为每个网格单元添加唯一ID
  mutate(grid_id = row_number())

3. 匹配坐标点到对应网格单元

通过空间连接,确定每个坐标点所属的网格:

# 空间连接:将点与所在网格匹配
points_with_grid <- st_join(test, grid, join = st_within)

4. 按网格单元随机抽样

指定每个网格要抽取的样本数量(示例中设为2),完成抽样:

# 每个网格单元随机抽取2个点(可修改n值调整样本量)
sampled_points <- points_with_grid %>%
  group_by(grid_id) %>%
  slice_sample(n = 2, replace = FALSE) %>% # replace=FALSE表示不重复抽样
  ungroup()

5. 结果可视化验证

plot(grid$geometry, border = "gray")
plot(test$geometry, col = "orange", pch = 20, cex = 0.5, add = TRUE)
plot(sampled_points$geometry, col = "red", pch = 19, cex = 1, add = TRUE)

关键说明:

  • 确保所有空间对象的CRS一致,这里统一使用WGS84(EPSG:4326);
  • slice_sample的n参数可根据需求调整每个网格的样本数量;
  • 如果部分网格单元内的点数量小于指定抽样数,可将replace设为TRUE启用有放回抽样,或添加条件判断跳过这类网格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 09:30:14