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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:41:22