在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
相关产品推荐
相关产品推荐

