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

在R语言中根据点坐标提取所在多边形ID的技术求助

解决提取点所在多边形(栅格单元)ID的问题

高效解法:直接操作栅格对象(无需转多边形)

如果你的目标只是获取点对应的栅格单元ID,完全不需要先把栅格转成多边形——这是冗余的做法。直接用cellFromXY函数就能快速得到结果:

# 创建栅格对象
r1 <- raster(xmn=-111.4567,
       xmx=136.841,
       ymn=-94.39192,
       ymx=123.5581,
       res=50) 
# 定义目标点
d <- cbind("x" = 7.36459732, "y"=  30.4465762)
# 获取点对应的栅格单元ID
cell_id <- cellFromXY(r1, d)
print(cell_id) # 输出结果为13,符合预期

若需基于多边形提取ID的处理方案

如果一定要通过多边形对象来提取,问题出在rasterToPolygons生成的多边形属性列默认名为layer(存储栅格单元ID),而非你预期的id。只需调整属性列名或指定提取字段即可:

# 创建栅格对象
r1 <- raster(xmn=-111.4567,
       xmx=136.841,
       ymn=-94.39192,
       ymx=123.5581,
       res=50) 
# 转换为多边形,保留单元属性
r1_poly <- rasterToPolygons(r1, na.rm = FALSE, dissolve = FALSE)
# 将默认的layer列重命名为id
names(r1_poly)[1] <- "id"
# 定义目标点
d <- cbind("x" = 7.36459732, "y"=  30.4465762)
# 提取id字段
result <- extract(r1_poly, d, "id")
print(result) # 输出结果为13

关键说明

  • rasterToPolygons默认会把栅格的单元ID存入layer列,而非id,直接调用extract而不指定字段的话,会返回整个属性表,导致你无法直接拿到目标ID。
  • 转多边形是资源消耗较大的操作,仅在需要对多边形做进一步空间分析时才推荐使用,单纯获取单元ID优先用栅格原生函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:39:30