如何推算空间权重矩阵的缺失邻居(皇后邻接性) [英] How to impute missing neighbours of a spatial weight matrix (queen contiguity)

查看:22
本文介绍了如何推算空间权重矩阵的缺失邻居(皇后邻接性)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个很大的形状文件,大约有180.000个250m^2的多边形。 我想创建一个空间权重矩阵(皇后邻接性)。 因此,如果是邻居,则为1,否则为0。 但是,有几个没有任何相邻(岛屿)的多边形。

我如何才能为那些没有任何直接邻居的单元分配最近的邻居?

(使用SF或SP包-在R中)

..........................................................................

使用数据样本并将其绘制出来,如下所示:

sample shape file

然后我可以使用以下代码创建W矩阵:

Create NB List
sample_queen_nb <- poly2nb(sp.sample, row.names=sp.sample$ID, queen=T)

# Create Weights/list
sample_W.list.queen <- nb2listw(sample_queen_nb, style="W", zero.policy = TRUE) 

# Create Matrix
sample_W.queen <- listw2mat(sample_W.list.queen)

并通过绘图检查其连通性:

# Plot ShpPolygons
plot(sp.sample)
# plot weightsmatrix to see connectivity
plot(sample_queen_nb, coords, add=TRUE, col="green", cex=0.5) 

获取此信息:

Connectivity Matrix

如您所见,有一个岛没有连接。我想要为这个岛状网格单元归因于邻近的单元。我如何才能做到这一点?

推荐答案

这就是我所说的创建样本数据集:

> library(spdep);example(columbus)
> sp.sample = columbus[c(1:5,10,23),]
> plot(sp.sample)

首先让我们检查是否有未连接的区域:

> coords = coordinates(sp.sample)
> queen_nb = poly2nb(sp.sample, row.names=sp.sample$ID, queen=TRUE)
> plot(sp.sample);plot(queen_nb, coords, add=TRUE)

这里有一个函数,它获取一组区域,计算相同的邻接关系,然后如果有任何没有邻域的区域,它会找到最近的邻域并将其添加到邻接对象中:

addnbs <- function(sp.sample){

    queen_nb <- poly2nb(sp.sample, row.names=sp.sample$ID, queen=TRUE)

    count = card(queen_nb)
    if(!any(count==0)){
        return(queen_nb)
    }

    ## get nearest neighbour index, use centroids:
    nnbs = knearneigh(coordinates(sp.sample))$nn

    no_edges_from = which(count==0)
    for(i in no_edges_from){
        queen_nb[[i]] = nnbs[i]
    }
    return(queen_nb)
}

让我们测试一下。

> n2 = addnbs(sp.sample)
> plot(sp.sample);plot(n2, coords, add=TRUE)

这篇关于如何推算空间权重矩阵的缺失邻居(皇后邻接性)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆