当涉及零范围对象时,terra::union返回多维SpatVector

qoefvg9y  于 2023-05-04  发布在  其他
关注(0)|答案(1)|浏览(89)

当两个相同的SpatVector对象在union下组合时,将创建与原始对象相同的新SpatVector对象。这是预期的行为。

a = terra::vect(cbind(c(0, 0, 1, 1, 0), c(0, 1, 1, 0, 0)), type = "polygons", crs = "local")
terra::union(a, a)
all.equal(a, terra::union(a, a)) # TRUE

但是,合并范围为零的SpatVector对象时,会添加其他尺寸。

b = terra::vect(cbind(rep(0, 5), rep(0, 5)), type = "polygons", crs = "local")
terra::union(b, b)
all.equal(b, terra::union(b, b)) # Not true (lengths differ).

为什么零范围的SpatVectors处理方式不同?有没有可能把这些优雅地融合在一起?我的用例包括添加一系列SpatVectors来创建一个复合对象,其中包含任何/所有组件的最大范围。零区对象不应该添加任何内容,因此terra::union(a, b)应该与a相同。有人能帮我到那里吗?

j91ykkif

j91ykkif1#

可能是因为您正在合并两个无效多边形。

is.valid(b)
#[1] FALSE

既然他们是无效的,你不能做一个工会,你得到他们两个回来?这是一个奇怪的角落错误,你可以report
下面是一个解决方法:

b <- unique(b)

相关问题