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

在R中均等分割爱荷华州乡镇多边形并生成新数据框的问题

嘿,我来帮你搞定这个生成新数据框的问题!看起来你已经完成了分割的核心操作,接下来咱们把这些分割后的多边形整理成结构化的sf数据框就行,具体步骤如下:

解决方案步骤

1. 补全数据读取代码

先把你没写完的读取代码补全,确保数据正确加载:

library(sf)
library(tidyverse)

setwd("~/Desktop")
iowa <- st_read(
  dsn = "Townships/iowa",
  layer = "PLSS_Township_Boundaries",
  stringsAsFactors = FALSE
)

2. 为每个乡镇生成3×3网格并关联原属性

核心思路是按每个乡镇单独生成网格,再和原乡镇多边形做交集,这样每个网格块都会保留原乡镇的属性信息,最后合并成一个统一的数据框:

# 定义函数:输入单个乡镇多边形,返回其3×3分割后的sf对象
split_township <- function(township) {
  # 生成适配当前乡镇范围的3×3网格
  grid <- st_make_grid(
    township,
    n = c(3, 3),
    what = "polygons"
  ) %>%
    st_sf() %>%
    # 只保留落在原乡镇范围内的网格部分(避免边缘网格超出乡镇边界)
    st_intersection(township) %>%
    # 给每个网格块添加1-9的序号,方便识别位置
    mutate(grid_id = row_number())
  
  return(grid)
}

# 遍历每个乡镇应用分割函数,合并所有结果
iowa_grid <- iowa %>%
  group_by(OBJECTID) %>% # 这里用乡镇的唯一标识分组,你可以根据自己数据的字段调整,比如乡镇ID、名称等
  group_modify(~ split_township(.x)) %>%
  ungroup()

3. 验证结果

你可以通过以下代码确认生成的数据框是否符合预期:

# 查看前几行数据,确认属性和几何信息都存在
head(iowa_grid)

# 统计每个乡镇对应的网格数量,正常应该每个乡镇有9条记录
iowa_grid %>%
  count(OBJECTID) %>%
  head()

小提示

  • 如果你的乡镇数据里没有OBJECTID这个唯一标识,换成你数据里的对应字段就行,比如TOWNSHIP_ID之类的。
  • 要是不需要保留原乡镇的所有属性,可以在split_township函数里手动指定保留的字段,比如select(TOWNSHIP_NAME, grid_id, geometry)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:01:23