如何查找覆盖指定数据点的SpatVector空间多边形
查找覆盖指定点的terra多边形对象
你已经通过以下代码创建了包含多个多边形的SpatVector:
library(terra) er <- rbind(c(6225, -6050), c(11250, -5400), c(10800, -3100), c(7560, -3545), c(5850, -3800)) re <- rbind(c(5850, -3800), c(7560, -3545), c(6900, -100), c(5250, -350)) wr <- rbind(c(10750, -3100), c(15600, -2450), c(14650, 2850), c(12650, 2575), c(11600, 2430), c(4950, 1500), c(5250, -350), c(5850, -3800), c(7560, -3545)) pa <- rbind(c(4950, 1500), c(5250, -350), c(-2500, -1500), c(-2100, -4100), c(-4700, -4400), c(-4930, -2800), c(-5300, 0)) tb <- rbind(c(-4700, -4400), c(-4425, -6350), c(-1775, -6100), c(-2100, -4100)) exl <- rbind(c(-4700, -4400), c(-4425, -6350), c(-6300, -6525), c(-6750, -3000), c(-4930, -2800)) exu <- rbind(c(11600, 2430), c(12650, 2575), c(12400, 4050), c(11350, 3925)) whole_space <- rbind(cbind(object = 1, part = 1, er, hole = 0), cbind(object = 2, part = 2, wr, hole = 0), cbind(object = 3, part = 3, pa, hole = 0), cbind(object = 4, part = 4, tb, hole = 0), cbind(object = 5, part = 5, re, hole = 0), cbind(object = 6, part = 6, exl, hole = 0), cbind(object = 7, part = 7, exu, hole = 0)) whole_space <- vect(whole_space, "polygons")
要找到覆盖点c(8506, -4010)的多边形,可使用terra包提供的两种方法:
方法一:使用is.inside()函数
is.inside()会返回逻辑向量,标记每个多边形是否包含目标点,据此筛选出符合条件的多边形:
# 将目标点转换为SpatVector对象 point <- vect(cbind(8506, -4010), type = "points") # 判断点是否在每个多边形内部 inside_flag <- is.inside(point, whole_space) # 提取包含该点的多边形 covered_polygons <- whole_space[inside_flag, ] # 查看结果 print(covered_polygons)
方法二:使用extract()函数
extract()可提取点所在位置的多边形信息,返回结果中的ID对应多边形的索引:
# 将目标点转换为SpatVector对象 point <- vect(cbind(8506, -4010), type = "points") # 提取点所在的多边形 extract_result <- extract(whole_space, point) # 根据索引获取对应多边形 covered_polygons <- whole_space[extract_result$ID, ] # 查看结果 print(covered_polygons)
运行上述代码后,会发现目标点被object=1的多边形(即er多边形)覆盖。
内容的提问来源于stack exchange,提问作者Nic
相关产品推荐
相关产品推荐

