我正在将几个函数从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.1
和poly.2
应该描述同一个多边形,但它们的面积计算并不相同(相似,但不同到足以破坏与现有代码的兼容性)。
有人能指出我是否做错了什么吗?或者有没有一种方法可以让terra
提供与area.1
相同的价值?
1条答案
按热度按时间ruarlubt1#
两个值之间的差异是-2.479456e-09。这是微不足道的,可能是由于浮点不精确。我不会说结果是 * 相似 *;它们本质上是相同的。
要获得相同的结果,可以将该区域四舍五入到6位(在本例中为8位)小数。