Poly2nb-如何摆脱r中的空几何图形



我有r代码,用于计算Getis ord Gstatistics。我通常在GIS中创建我的shapefile,然后导入到r中与代码一起使用。我最近需要对我的shapefile进行编辑,这是我在GIS中完成的,并像往常一样导入到sas中:

tract<-st_read("CBSA2022.shp")

我的问题是我的代码的循环部分和poly2nb特性。目前写为:

for (CBSA in CBSAs) {
temp <- tract[ tract$CBSAFP == CBSA, c("JOIN_ID", variable_of_int)]
names(temp)[2] <- 'black_pop'
#We create the weight matrices within each CBSA now
#We check that there are more than one tract in the CBSA
if ((nrow(temp) > 1)) {
q1<-poly2nb(temp, queen = queen)
if (self_include){ q1 <- include.self(q1) }

在GIS中编辑我的shapefile之前,这项工作非常完美,没有任何错误。现在,我收到这个错误消息:

poly2nb中的错误(temp,queen=queen(:找到空的几何体

你认为我的形状文件有什么不同,我现在收到了这个错误?和/或我该如何解决?这个形状文件和原始形状文件之间的唯一区别是,在将数据连接到GIS中的空间多边形时,我必须以不同的方式定义我的空间连接。

我没有尝试过任何有意义的东西,因为我不太熟悉r。我没有创建这个代码,但与一名学生(现在已经不可用了(合作创建了它,以非常方便我使用。在我最近的编辑之前,我已经在不同的形状文件中使用了很多次,它总是有效的,只是不确定为什么我现在有空的几何图形或如何修复它。

查看poly2nb的源代码(https://github.com/r-spatial/spdep/blob/main/R/poly2nb.R):
poly2nb <- function(pl, row.names=NULL, snap=sqrt(.Machine$double.eps),
queen=TRUE, useC=TRUE, foundInBox=NULL) {
[...]
if (inherits(pl, "sfc")) {
[...]
if (attr(pl, "n_empty") > 0L) 
stop("Empty geometries found")
sf <- TRUE
}

似乎您的temp对象是类sfc,但是n_empty属性没有更新。在谷歌上搜索我们可以找到一个例子:https://github.com/r-spatial/sf/issues/1115.您可以检查几何图形的n_empty,并将值>0.

最新更新