为什么rgeos/sp和terra给予的多边形面积值不同?

gc0ot86w  于 2023-04-09  发布在  其他
关注(0)|答案(1)|浏览(108)

我正在将几个函数从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相同的价值?

ruarlubt

ruarlubt1#

两个值之间的差异是-2.479456e-09。这是微不足道的,可能是由于浮点不精确。我不会说结果是 * 相似 *;它们本质上是相同的。
要获得相同的结果,可以将该区域四舍五入到6位(在本例中为8位)小数。

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

相关问题