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

使用bivrp::is_point_inside判断点是否在正方形内返回FALSE问题排查

关于bivrp::is_point_inside判断点在多边形内始终返回FALSE的问题及替代方案

问题详情

我尝试使用bivrp::is_point_inside函数判断点是否在正方形内,但无论如何操作,即使在最明显的场景下(如点(5,5)位于顶点为(15,15)、(15,0)、(0,0)、(0,15)的正方形内),始终返回FALSE结果。

我的代码:

polyg=data.frame(c(15, 15, 0, 0), c(15, 0, 0, 15))
point=c(5,5)
bivrp::is_point_inside(point, polyg)

执行结果:

> bivrp::is_point_inside(point, polyg)
[1] FALSE

请问我哪里操作出错了?注:我优先希望继续使用bivrp::is_point_inside,旧代码依赖该函数,若无法正常工作则需修改旧代码。

补充
该函数显然无法正常工作,能否推荐一个功能相同(判断点是否在多边形内)且可用的替代函数?

问题排查与修复尝试

很多多边形判断函数对输入格式有特定要求,你可以尝试以下两种修改:

  1. 给数据框的列命名为x和y(多数空间函数默认识别这两个列名):
polyg <- data.frame(x = c(15, 15, 0, 0), y = c(15, 0, 0, 15))
point <- c(5,5)
bivrp::is_point_inside(point, polyg)
  1. 让多边形顶点闭合(最后一个顶点重复第一个顶点):
polyg <- data.frame(x = c(15, 15, 0, 0, 15), y = c(15, 0, 0, 15, 15))
point <- c(5,5)
bivrp::is_point_inside(point, polyg)

如果以上修改仍无法解决,说明bivrp::is_point_inside可能存在bug或维护问题,推荐以下替代函数:

替代函数推荐

1. sp::point.in.polygon(sp包)

经典空间判断函数,返回值明确:1表示点在多边形内部,0表示外部,2表示在边界上。

library(sp)
# 定义闭合的多边形顶点
polyg_xy <- cbind(c(15,15,0,0,15), c(15,0,0,15,15))
point <- c(5,5)
# 执行判断
result <- point.in.polygon(point[1], point[2], polyg_xy[,1], polyg_xy[,2])

2. sf::st_within(sf包)

现代空间数据处理包sf中的函数,支持复杂空间操作,返回逻辑值。

library(sf)
# 创建多边形sf对象
polyg_sf <- st_polygon(list(cbind(c(15,15,0,0,15), c(15,0,0,15,15))))
# 创建点sf对象
point_sf <- st_point(c(5,5)) %>% st_sfc()
# 判断点是否在多边形内
result <- st_within(point_sf, polyg_sf, sparse = FALSE)[1,1]

3. pracma::inpolygon(pracma包)

专注数值计算的包,用法简洁,返回逻辑值。

library(pracma)
polyg_x <- c(15,15,0,0,15)
polyg_y <- c(15,0,0,15,15)
point_x <- 5
point_y <-5
# 执行判断
result <- inpolygon(point_x, point_y, polyg_x, polyg_y)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 08:43:29