在R中生成Bankura地区Voronoi剖分后瓦片数少于点数的原因
为什么生成的Voronoi瓦片数比小学观测点数少?
嘿,这个问题我处理空间数据时也碰到过,结合你的代码和数据情况,主要是这两个常见原因:
1. 重复的经纬度点被自动去重了
你用的deldir包在计算Voronoi剖分时,会自动忽略完全重合的坐标点——毕竟两个叠在一起的点没法生成各自独立的瓦片,它们会被合并成一个。
怎么验证?
跑这段代码看看你的prim_school里有多少重复点:
# 提取重复的坐标点 dupe_points <- prim_school[duplicated(prim_school@coords), ] # 打印重复点数量 cat("重复点数量:", nrow(dupe_points), "\n")
如果输出的数字刚好是27(2336-2309=27),那这就是核心原因了。
2. 部分点落在Bankura区域外,瓦片被裁剪掉了
还有一种可能是少量小学的坐标不在Bankura的边界范围内:
- 你的
voronoipolygons函数用Bankura的边界作为deldir的rw参数,虽然会生成覆盖区域的瓦片,但如果原始点在区域外,对应的瓦片可能完全在Bankura之外; - 后续执行
gIntersection(bankura, tess_prim, byid=TRUE)时,这些完全在区域外的瓦片会被过滤掉,导致最终数量减少。
怎么验证?
检查有多少点不在Bankura范围内:
# 判断点是否在Bankura区域内 points_inside <- over(prim_school, bankura) # 筛选出区域外的点 out_of_bounds <- prim_school[is.na(points_inside), ] # 打印数量 cat("区域外点数量:", nrow(out_of_bounds), "\n")
如果这个数字和差值匹配,那就是边界外点的问题。
对应的解决办法
- 重复点问题:要么保留每个重复组里的一个点,要么给重复点加个极小的随机偏移(比如
jitter(prim_school@coords, factor=0.0001)),让它们能生成独立的瓦片; - 边界外点问题:先确认这些点的坐标是不是录错了,如果是错误坐标就修正;如果确实在区域外但需要保留,可以扩大
rw参数的范围,或者单独处理这些点的瓦片。
内容的提问来源于stack exchange,提问作者Shalini
相关产品推荐
相关产品推荐

