带有 poly2nb() 的邻居列表适用于 2004 年人口普查形状文件,但不适用于 2011 年

neighbour list with poly2nb() works on 2004 census shapefile but not on 2011

我正在尝试从多边形列表构建伦敦低层超级输出区域 (LSOA) 的邻居列表。我从 London Datastore 获得了我的 shapefile,在这里下载:https://data.london.gov.uk/dataset/statistical-gis-boundary-files-london

当我读入 2004 shapefile (LSOA_2004_London_Low_Resolution.shp) 时,它完美地工作:

ldn <- st_read("statistical-gis-boundaries-london/ESRI/LSOA_2004_London_Low_Resolution.shp")

#make into sp
ldn_sp <- as(ldn, "Spatial")

#create a list of neighbours using the Queen criteria (default, if you want rook chage to queen = FALSE)
w <- poly2nb(ldn_sp)

plot(ldn_sp, border = "grey60")
plot(w, coordinates(ldn_sp), pch = 19, cex = 0.6, add = TRUE)

当我阅读 2011 shapefile (LSOA_2011_London_gen_MHW.shp) 时,似乎认为大多数 LSOA 都没有邻居。

当我使用具有相同代码的 2011 版本时,我得到了这个:

ldn <- st_read("statistical-gis-boundaries-london/ESRI/LSOA_2011_London_gen_MHW.shp")

ldn_sp <- as(ldn, "Spatial")

w <- poly2nb(ldn_sp)

plot(ldn_sp, border = "grey60")
plot(w, coordinates(ldn_sp), pch = 19, cex = 0.6, add = TRUE)

有人知道我做错了什么吗?显然应该有邻居的 LSOA 显示为 0 个链接。我不知道为什么...!

看起来 shapefile 的组合方式存在问题 - LSOA_2011_London_gen_MHW.shp 中的多边形未完全共享边界。

poly2nb 中使用 snap 参数将强制函数将特定定义距离内的边界视为连续的,例如:

w <- poly2nb(ldn_sp, snap=10)

在上面的示例中,10 = 十进制度数,因为您的原始数据采用 WGS84 格式 - 可能需要转换为 BNG 并设置一个合理的小距离(以米为单位)以进行捕捉。您需要稍微试验一下,但在上面的快速而肮脏的示例中,10 进制度数似乎会生成一些近似于预期邻居列表的东西。