为什么rgeos/sp和terra计算多边形面积时会给出不同的值?

3
我正在将几个函数从sp包转换为terra,但在计算多边形面积时遇到了不一致的问题。下面的代码示例展示了我的问题。
x = seq(0, 2 * pi, length.out = 100)
circle = cbind(sin(x), cos(x))

# sp/rgeos version
poly.1 = sp::SpatialPolygons(list(sp::Polygons( list(sp::Polygon(circle) ), "circle")))
area.1 = rgeos::gArea(poly.1)

# terra version
poly.2 = terra::vect(circle, type = "polygons", crs = "local")
area.2 = terra::expanse(poly.2, transform = F)

area.1 - area.2 # != 0

我已经了解到 poly.1poly.2 应该描述的是同一个多边形。但每个多边形的面积计算结果不同(相似,但足以与现有代码兼容性不良)。

有人可以指出我是否做错了什么吗?还是有什么方法可以让terra提供与area.1相同的值?


你确定 Terra 和 SP 之间的 CRS 是完全相同的吗? - Nate
镜像 CRS 不会改变任何东西,所以忽略上面的注释。 - Nate
1个回答

0

这两个值之间的差异是-2.479456e-09。这是微不足道的,并且可能是由于浮点不精确造成的。我不会说结果是“相似的”;它们本质上是“相同的”。

为了得到相同的结果,您可以将面积舍入到6(或在这种情况下是8)位小数。

round(area.1, 6) == round(area.2, 6)
#[1] TRUE

经过一些测试(并熟悉了terra包),看起来所有的差异确实在浮点精度的范围内。 - randr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接